UpdatePanel async postbacks slow in Internet Explorer
Importante
La aplicación de escritorio Internet Explorer 11 está retirada y sin soporte a partir del 15 de junio de 2022 para determinadas versiones de Windows 10.
Todavía puede acceder a sitios antiguos heredados que requieren Internet Explorer con el modo Internet Explorer en Microsoft Edge. Obtenga más información.
La aplicación de escritorio Internet Explorer 11 se redirigirá progresivamente al explorador Microsoft Edge, más rápido y seguro. En última instancia, se deshabilitará a través de Windows Update. Deshabilite IE hoy.
En este artículo se presenta una solución alternativa para solucionar el problema que experimenta un retraso al visitar una página y seleccionar un elemento de página.
Versión del producto original: Internet Explorer
Número KB original: 2000262
Síntomas
Cuando usa Internet Explorer para examinar una página que contiene un UpdatePanel, hay un retraso (a menudo entre 10 segundos y 45 segundos o más) después de hacer clic en un elemento de página que inicia una devolución asincrónica. El retraso no se experimenta al usar exploradores distintos de Internet Explorer.
Causa
El método recorre en iteración los elementos DOM dentro de UpdatePanel antes de iniciar una devolución asincrónica para eliminar los PageRequestManager's _destroyTree elementos DOM. La implementación específica del método es lenta en Internet Explorer al trabajar con un árbol DOM grande en algunas condiciones debido a la forma en que el visor HTML (mshtml.dll) de Internet Explorer almacena los elementos DOM en la _destroyTree memoria.
Solución alternativa
Puede agregar el JavaScript siguiente inmediatamente antes de que el elemento de </body> cierre de la página experimente el retraso.
<script language="javascript" type="text/javascript">
function disposeTree(sender, args)
{
var elements = args.get_panelsUpdating();
for (var i = elements.length - 1; i >= 0; i--)
{
var element = elements[i];
var allnodes = element.getElementsByTagName('*'),
length = allnodes.length;
var nodes = new Array(length)
for (var k = 0; k < length;
{
nodes[k] = allnodes[k];
}
for (var j = 0, l = nodes.length; j < l;
{
var node = nodes[j];
if (node.nodeType === 1)
{
if (node.dispose && typeof (node.dispose) === "function")
{
node.dispose();
}
else if (node.control && typeof (node.control.dispose) === "function")
{
node.control.dispose();
}
var behaviors = node._behaviors;
if (behaviors)
{
behaviors = Array.apply(null, behaviors);
for (var k = behaviors.length - 1; k >= 0; k--)
{
behaviors[k].dispose();
}
}
}
}
element.innerHTML = "";
}
}
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(disposeTree);
</script>
Más información
Este script usa el getElementsByTagName método, que es mucho más rápido en Internet Explorer que la implementación original.
Este artículo solo se aplica a versiones anteriores de asp.net e Internet Explorer 8 o versiones anteriores.