UpdatePanel Slowness en IE

Estoy trabajando en una aplicación ASP.Net y trabajando para agregarle algo de Ajax para acelerar ciertas áreas. La primera área en la que me estoy concentrando es el área de asistencia para que los maestros informen la asistencia (y algunos otros datos) sobre los niños. Esto tiene que ser rápido.

He creado una configuración de control dual donde el usuario hace clic en el icono y, a través de Javascript y Jquery, abro el segundo control. Luego uso un __doPostBack () para actualizar el control emergente para cargar todos los datos relevantes.

Aquí hay un pequeño fragmento de video para mostrar cómo funciona: http://www.screencast.com/users/cyberjared/folders/Jing/media/32ef7c22-fe82-4b60-a74a-9a37ab625f1f (: 21 e ignorar el fondo de audio).

Es más lento de lo que me gustaría en 2-3 segundos en Firefox y Chrome por cada “aparición”, pero es completamente inviable en IE, y se toma de 7 a 8 segundos para cada vez que aparece y se carga. Y eso no tiene en cuenta el tiempo que sea necesario para guardar los datos después de que se hayan modificado.

Aquí está el javascript que maneja la ventana emergente:

function showAttendMenu(callingControl, guid) { var myPnl = $get('" + this.MyPnl.ClientID + @"') if(myPnl) { var displayIDFld = $get('" + this.AttendanceFld.ClientID + @"'); var myStyle = myPnl.style; if(myStyle.display == 'block' && (guid== '' || guid == displayIDFld.value)) { myStyle.display = 'none'; } else { // Get a reference to the PageRequestManager. var prm = Sys.WebForms.PageRequestManager.getInstance(); // Unblock the form when a partial postback ends. prm.add_endRequest(function() { $('#" + this.MyPnl.ClientID + @"').unblock({ fadeOut: 0}); }); var domEl = Sys.UI.DomElement; //Move it into position var loc = domEl.getLocation(callingControl); var width = domEl.getBounds(callingControl).width; domEl.setLocation(myPnl, loc.x + width, loc.y - 200); //Show it and block it until we finish loading the data myStyle.display = 'block'; $('#" + this.MyPnl.ClientID + @"').block({ message: null, overlayCSS: { backgroundColor:'#fff', opacity: '0.7'} }); //Load the data if(guid != '') { displayIDFld.value = guid; } __doPostBack('" + UpdatePanel1.ClientID + @"',''); } }} 

Primero, no entiendo por qué el __doPostBack () introduce tal retraso en IE. Si tomo eso y el prm.add_endRequest fuera, es MUY veloz, ya que no se produce devolución de datos.

En segundo lugar, necesito una forma de abrir este control y actualizar los datos para que aún sea interactivo. No estoy casado con un UpdatePanel, pero no he podido averiguar cómo hacerlo con un método de servicio web / página estática. Como puede ver, este control se carga muchas veces en la misma página, por lo que el tamaño de la página y la velocidad de descarga son un problema.

¿Apreciaría alguna idea?

Edición: es lo mismo en IE 6 o 7. Estoy pensando que tiene que ver con el manejo de IE de UpdatePanel, porque el mismo código es mucho más rápido en FF y Chrome.

Si la velocidad / rendimiento es una preocupación importante para usted, sugeriría encarecidamente que no vaya a usar UpdatePanels, ya que provocan una devolución de página completa que arrastra el ViewState en el encabezado, entre otras cosas, y obliga a la página a pasar por todo el ciclo de vida cada vez (aunque el usuario no vea esto).

Debería poder (con relativa facilidad) utilizar PageMethods para realizar su tarea.

 // In your aspx.cs define the server-side method marked with the // WebMethod attribute and it must be public static. [WebMethod] public static string HelloWorld(string name) { return "Hello World - by " + name; } // Call the method via javascript PageMethods.HelloWorld("Jimmy", callbackMethod, failMethod); 

Es un problema conocido solo con IE, consulte KB 2000262 . Una solución / solución se puede encontrar aquí . Trabajé con ellos en el guión y es una pena que no puedan poner una solución real.

Notado en un proyecto anterior que IE se volvió terriblemente lento cuando teníamos montones (más de 150) cuadros de texto en una página, después de verificar con el violinista nos dimos cuenta de que era el motor de renderizado el que era lento.

(por cierto, antes de que todos griten, los más de 150 cuadros de texto eran un requisito explícito del cliente, básicamente recreamos Excel personalizado en la web)

Aquí está el código para el control emergente (solo hay uno de estos en la página que comparten todos los controles que contienen los íconos):

    

Para averiguar por qué tarda tanto, recomendaría usar Fiddler para espiar su tráfico de IE: http://www.fiddlertool.com/fiddler/

Observará la respuesta de cada uno de los mensajes para ver qué tan grandes son. Si los mensajes son> 5kb o menos, entonces el UpdatePanel está siendo demasiado inteligente.

Suena como algo bastante simple que estás tratando de hacer, así que estoy teniendo dificultades para creer que el panel de actualización es el culpable. Sin embargo, probarlo no debería ser demasiado difícil. La forma más fácil de probar esto sin un UpdatePanel sería usar un PageMethod. Esta página tiene un gran tutorial: http://weblogs.asp.net/sohailsayed/archive/2008/02/23/calling-methods-in-a-codebehind-function-pagemethods-from-client-side-using -ajax-net.aspx

¿Podrías también publicar tu código de UpdatePanel para que podamos obtener más detalles?

EDIT: ¡Gracias!

¿Qué versión de IE estás usando?

Trabajar con el DOM y HTTP Las solicitudes son intrínsecamente lentas, es el navegador. La mejor manera de acelerarlo es reducir el número de veces que hay una solicitud HTTP (AJAX o de otro tipo), y reducir el número de acciones DOM, buscar, editar, reemplazar, etc.

Recomiendo hacer trazabilidad de perforación con texto de enlace . Es una herramienta gratuita para el análisis del rendimiento AJAX en Internet Explorer.