2009-06-30 9 views
6

Tengo un problema muy grande. Estoy creando un sistema CRM (gestión de relaciones con el cliente) en ASP.NET 3.5Estoy atrapado en la trampa UpdatePanel

He basado todo mi proyecto en controles DevExpress.com y el uso de UpdatePanels.

Ahora una de mis páginas, que es una página central en todo el sistema, contiene una gran cantidad de posibilidades y, por lo tanto, una gran cantidad de UserControls.

Ahora mi problema es que se está volviendo muy lento debido al hecho de que los paneles de actualización están volviendo a publicar toda la página y no solo el panel de actualización. Estamos hablando alguna vez 3-4 segundos antes de que aparezca una ventana emergente :(

¿Hay alguna manera de que pueda refactorizar todo este sistema fuera de UpdatePanels sin romper el cuello? ¿Hay alguna forma de optimizar el uso de mi UpdatePanels?

el ViewState también es absolutamente gigante.

buenas ideas son bienvenidos ...

+0

Supongo que lo que también estoy preguntando es si hay alguna forma de hacer que un UpdatePanel SOLO represente la página nueva y no la página completa. –

Respuesta

8

no hay manera de moverse por la publicación de la página entera usando UpdatePanels. En lugar de rediseñar la aplicación aquí hay un par de cosas Lo intentaría:

  1. estado de vista para desactivar los controles que no necesitan que
  2. Ajuste el UpdateMode = "condicional" para sus controles de usuario. Esto no servirá para publicar toda la página, pero reducirá un poco el tiempo de procesamiento. Solo el contenido del UpdatePanel específico se actualizará en el navegador.
  3. Asegúrate de que tus controles de usuario tengan identificaciones cortas. La forma en que los nombres de formularios web ASP.NET controlan en html estos identificadores se repiten bastante si tienes muchos controles de servidor. Lo mismo aplica para nombrar marcadores de posición de página maestra. Una vez corté una página grande a la mitad del tamaño cambiando el nombre de los controles de usuario y marcadores de posición.
+0

LOL No consideré el problema de nombres, aunque definitivamente está ahí ... sí, se repiten mucho, pero odio los nombres cortos no específicos ... ahora solo tengo que considerar si odio la carga lenta aún más ... –

+0

Es posible que desee aclarar esto: "Solo el control de usuario específico se actualizará en la pantalla". Probablemente debería ser "Solo el UpdatePanel específico ...". También puede observar que solo los paneles necesarios se envían al cliente, a diferencia de toda la página. –

+0

+1 para identificaciones cortas. Es muy frustrante mientras optimizo mi página para darme cuenta de que la mitad de la solicitud hecha es de elementos ID: masterpage_page_form_usercontrol_nestedusercontrol_gridview_label etc etc etc. –

0

Vas a tener que sustituir algunas de las devoluciones de datos contenidos en sus paneles de actualización con los bienes llamadas AJAX, es decir, enviar única los datos que se requiere para la acción en el servidor y volver única lo que se requiere para actualizar la vista, deshacerse de la devolución de datos y UpdatePanels.

(Notarás mi uso de los términos 'acción' y 'ver' - sí, soy un fan de MVC. La situación en la que te encuentras es típica del lío que se genera fácilmente al usar WebForms y el ASP controles .NET AJAX.)

+0

Es fácil ser un gran fan del nuevo chico en el bloque :) Estoy seguro de que es fácil escribir código desordenado en cualquiera de los frameworks. – kervin

+0

Sí, eso es definitivamente posible. ¡El problema en WebForms es que una página de "Hola mundo" ya se ve desordenada! –

0
  • debo estar perdiendo algo. ¿Por qué su panel de actualización está recargando toda la página? El objetivo de un panel de actualización es actualizar solo lo que está en ese panel, ¿no es así? Gracias por la explicación. Supongo que estamos hablando de volver a publicar la página y no volver a dibujar el panel como pensé.

  • Intente apagar ViewState, especialmente para las cuadrículas.

  • ¿Qué tipo de control es el más común en su página?Trate de reemplazar los que tienen su propio control de usuario o servidor de control de peso ligero que no utiliza ViewState o ControlState
+1

UpdatePanels solo actualiza el contenido dentro del panel, pero se ejecuta todo el ciclo de vida de la página, lo que significa que viewstate para todos los controles se envía al/desde el servidor. –

+0

Gracias por la explicación. Entonces, realmente es un problema de ViewState. ViewState/ControlState son errores :) Los deshabilito siempre que sea posible. – kervin

2

Puesto que usted es un usuario DevExpress, es posible considerar la adopción de un poco de tiempo para aprender su CallbackPanel que permitirá hacer asíncrono procesamiento sin la sobrecarga de UpdatePanel.

alternativa (por favor, que alguien me corrija si me equivoco), pero si todo de las devoluciones de datos son asíncrona (es decir, en un UpdatePanel), ¿no sería teóricamente posible desactivar ViewState para toda la página (en el Directiva de la página) sin consecuencias negativas? Tendría que probarlo completamente fuera de curso, pero vale la pena intentarlo.

+0

Voy a intentar esto, la mejor sugerencia hasta ahora ... –

0

Para todos Interesados ​​Deseo agregar una solución sobre cómo deshacerse de los datos de Viewstate en el lado del cliente. Le da al servidor una carga extra, pero si usted se encuentra en la misma situación que yo y tiene mucha potencia de servidor y necesita cargar con la carga del cliente, esto es agradable.

Que todos sus páginas se derivan de BasePage.cs con este aspecto

public class BasePage : System.Web.UI.Page 
{ 
    protected override void SavePageStateToPersistenceMedium(object viewState) 
    { 
     string vsKey = String.Format("VIEWSTATE_{0}_{1}_{2}", base.Session.SessionID, Request.RawUrl, DateTime.Now); 
     Session.Add(vsKey, viewState); 
     ClientScript.RegisterHiddenField("__VIEWSTATE_KEY", vsKey); 
    } 

    protected override object LoadPageStateFromPersistenceMedium() 
    { 
     string vsKey = Request.Form["__VIEWSTATE_KEY"]; 
     return Session[vsKey]; 
    } 
} 

Ahora usted tiene una llave de la sesión de datos estado de vista en lugar del estado de vista en su código ...

funciona como una encanto para mí en un sitio web con 1000-1200 visitantes diarios también.