2010-05-19 42 views
11

Tomemos un ejemplo muy simple sobre el uso de jQuery para ajaxify nuestra página ...Load o Page_Init

$.load("getOrders.aspx", {limit: 25}, function(data) { 
    // info as JSON is available in the data variable 
}); 

y en el ASP.NET (parte HTML) página (una sola línea)

<%@ Page Language="C#" AutoEventWireup="true" 
     CodeFile="getOrders.aspx.cs" Inherits="getOrders" %> 

y en el ASP.NET (Código Detrás) página

public partial class getOrders : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string lmt = Request["limit"]; 
     List<Orders> ords = dll.GetOrders(limit); 


     WriteOutput(Newtonsoft.Json.JsonConvert.SerializeObject(ords)); 
    } 

    private void WriteOutput(string s) 
    { 
     Response.Clear(); 
     Response.Write(s); 
     Response.Flush(); 
     Response.End(); 
    } 
} 

mi pregunta es

Si fuese

protected void Page_Load(object sender, EventArgs e) 

o

protected void Page_Init(object sender, EventArgs e) 

Así podemos ahorrar algunos milisegundos, ya que no necesita realmente para procesar los eventos para la página, o será Page_Init falta de una cierta clasificación de un método en el momento en que se llama?

P.S. Actualmente funciona bien en ambos métodos, pero sólo quiero entender los pros y contras de la elección de un método sobre el otro ciclo de vida de la página Básico

+0

Tenga en cuenta que el uso de Page_Init no le ahorra ningún milisegundo frente a Page_Load: Init y Load son eventos de ciclo de vida de página estándar, por lo que el costo de llamar a cualquiera de ellos es exactamente el mismo. –

+1

En realidad, dado que lo está cortando temprano, ese no es el caso, Init está más temprano en el ciclo y, por lo tanto, matarlo guarda los otros pasos, pero todavía hay más que ganar simplemente yendo a un ashx. – fyjham

+0

@Tim Schneider - En realidad, tienes razón, me perdí la llamada 'Response.End()'. Sí, hacerlo lo antes posible reducirá varios milisegundos. También tienes razón en que cambiar a .ashx es mejor que hacer tales micro-optimizaciones. –

Respuesta

8

Cualquiera de los dos funcionaría, porque esencialmente está descartando el ciclo de vida de la página llamando a response.Clear() y response.End(). Técnicamente, podrías incluso llegar a poner ese código en prerender y funcionaría. Al acceder al objeto Response, básicamente se pasa de la parte superior de la página y se corta a mitad de camino para que pueda realizar una tarea mucho más simple.

Supongo que simplemente no desea el ciclo de vida de la página en absoluto y simplemente desea devolver JSON desde esta página? Si es así, recomiendo implementarlo como controlador genérico (ashx). En este caso, simplemente usaría context.Request ["limit"] y context.Response.Write en su método de proceso. El beneficio de hacer esto es que no tiene todos los gastos generales de .NET preparando la clase de página e iniciando el ciclo de vida de la página, sino que está utilizando un archivo destinado a la tarea que está realizando.

Es agradable comprender el ciclo de vida de la página, como se muestra en otras respuestas, pero, en realidad, no lo está usando en absoluto y sería mejor que se alejara por completo de la clase de la página.

+0

hum ... 'Generic Handler's' algo que consideraré. ¡para la comprensión! – balexandre

0

Puede utilizar muy bien el método Page Init. Pero si tiene controles en su página y desea acceder a cualquier propiedad de esos controles, entonces es mejor utilizar el evento de carga de página, pero en su caso no necesita usar el evento de carga de página.

Puede ir a través del Asp.Net Page Life cycle here para comprender mejor qué evento usar.

2

El ciclo de vida de la página solo tiene significados en contexto de elementos de página (controles), por lo que no veo ninguna diferencia en su caso, ya que no tiene ningún otro control secundario en su página; esto es totalmente irrelevante .

Pero aquí está la verdadera pregunta: si no tiene ninguna representación de html en su página (solo serialización de datos), ¿por qué ha elegido trabajar con la página regular .aspx?

El servicio web es el candidato ideal para este escenario. Y se sorprenderá de la mejora de rendimiento que obtendrá al final.

+1

asmx es un dolor de cabeza para usar aunque jQuery ... a veces funciona bien, otros no. Entonces comencé a usar este método 'pirateado'. – balexandre

+0

Tienes razón en esto. Pero no es un problema del lado del servidor, no se puede usar Ajax. La solicitud de Json responde: el navegador está almacenando en caché. Más detalles aquí: http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/ – ljubomir