Estoy trabajando en una aplicación ASP.Net y estoy trabajando para agregarle algo de Ajax para acelerar ciertas áreas. La primera área en la que estoy concentrado es el área de asistencia para que los maestros denuncien la asistencia (y algunos otros datos) sobre los niños. Esto necesita ser rápido.UpdatePanel Slowness en IE
He creado una configuración de control doble donde el usuario hace clic en el icono y a través de Javascript y Jquery I aparece 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 ignore el fondo de audio).
Es más lento de lo que me gustaría en 2-3 segundos en Firefox y Chrome para cada "aparición", pero es completamente inviable en IE, tardando fácilmente entre 7 y 8 segundos cada vez que aparece y se carga. Y eso ignora cualquier momento que sea necesario para guardar los datos después de que hayan sido cambiados.
Aquí está el código JavaScript que se encarga de la 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 + @"','');
}
}}
En primer lugar, no entiendo por qué el __doPostBack() introduce un retraso en el IE. Si tomo eso y prm.add_endRequest, es MUY veloz ya que no está ocurriendo ninguna devolución.
En segundo lugar, necesito una forma de mostrar este control y actualizar los datos para que siga siendo interactivo. No estoy casado con un UpdatePanel, pero no he podido averiguar cómo hacerlo con un servicio web/método de 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.
Agradecería cualquier idea?
Edit: 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.
Cambié a usar Jquery y un PageMethod y ahora es muy rápido en todos los navegadores, por lo que fue UpdatePanel e IE – Jared
Usar webmethods en algunas situaciones es beneficioso que los paneles de actualización, por ejemplo.- El estado de visualización tiene peso y no necesitamos para enviar viewstate en el encabezado una y otra vez. –