Blog de Jorge Pedraza

octubre 12, 2009

Programacion Asincrona de Pagina web

Filed under: Aplicaciones Web — JorgePedraza @ 1:17 am
Tags:

La programación Asíncrona permite que una solicitud se ejecute en un subproceso diferente. Esto detiene el flujo actual de espera y le permite realizar acciones adicionales, mientras que el otro subproceso se ejecuta. Esto puede mejorar dramáticamente el rendimiento en situaciones en que una solicitud de otro modo tendría que esperar (o bloque) para una acción relativamente largo, como el acceso a un recurso de red.

En una Aplicación Windows el uso de programación asíncrona  permitir que la aplicación responda a la entrada del usuario mientras se ejecuta proceso de larga ejecución. En Páginas Web los usuarios no puede interactuar con la página hasta que la página se represente por completo, para responder a la entrada del usuario; esto no es una razón válida para usar programación asíncrona .En su lugar se usaría la programación asíncrona para mejorar la eficacia de larga ejecución de una página web.

Por ejemplo, si está creando una página web que debe consultar recurso de la red (Como un servicio web), IIS y ASP.NET solo puedo procesar un número limitado de páginas simultáneamente. Por lo tanto el pool de subproceso puede ser consumido completamente, crea un cuello de botella. Una vez que el pool es consumido, tu servidor espera que la página finalice su representación antes que se inicie procesos por otras páginas. A pesar de que el servidor puede tener ciclos de procesador disponible, las solicitudes son encoladas.  Habilitando la programación de página web asíncrona el servidor puede simultáneamente iniciar la representación de más páginas, mejorado el tiempo de representación de páginas más reducido y eficiente.

Patrón base para Trabajar con programación asíncrona de página web ASP.NET (Visual Basic 2008):

  1. Agregar el Atributo Async=”true” en la directiva @ Page,  como muestra en el siguiente Ejemplo:
    <%@ Page Language=”VB” Async=”true” AutoEventWireup=”False” %>
    Dicho codigo esta situado generalmente en la primera linea de cada pagina ASPX.
  2. Se crea eventos  de inicio y fin asíncrono que implementa  System.Web.IHttpAsyncHandler.BeingProcessRequest y System.Web.IHttpAsyncHandler.EndProcessRequest. estos eventos debe coincidir con la siguiente firma:
    Function BeginTask(ByVal src As Object, ByVal args as EventArgs, ByVal cb As AsyncCallback, ByVal state as Object) as IAsyncResult
    End Function
    Sub EndTask(ByVal ar as IAsyncResult)
    End Sub
  3. Llama el metodo AddOnPreRenderCompleteAsync para declarar su manejador de eventos como es demostrado por el siguiente codigo:
    Dim bh As New BeginEventHandler(AddressOf Me.BeginTask)
    Dim eh As New EndEventHandler(AddressOf Me.EndTask)
    AddOnPreRenderCompleteAsync(bh,eh)

En resumen la programación asíncrona de página web enfocada con ASP.NET tiene como finalidad mejorar el tiempo de ejecución de tarea relacionada con una página web además de brindar mayor rendimiento de representación de página con otros usuarios en la web.

Codigo Fuente (Visual Basic 2008)

4 comentarios »

  1. Excelente articulo megaman..me has dado una idea …

    Comentario por Javier Rodriguez — octubre 21, 2009 @ 5:07 pm | Responder

  2. Hola, amigo. por favor intentar probar el codigo que tiene adjunto el articulo!
    y cualquier cosa me avisa!

    Comentario por jorgepedraza — octubre 21, 2009 @ 7:41 pm | Responder

  3. El código es interesante y muy educativo para explicar el asincronismo de páginas web, pero tengo una preguunta. Tu utilizas un sleep para retrasar el tiempo en que se procesa la página. Supongamos que se dispara una función asincrónica que no se termine de ejecutar cuando la página haya sido cargada totalmente. Qué pasaría en ese caso, lo que se disparó asincrónicamente se termina de ejecutar o se detiene también ?????

    Gracias por tus comentarios,

    Comentario por José Antonio — agosto 11, 2010 @ 3:10 pm | Responder

    • Hola José.
      Gracias por la pregunta.
      Tú pregunta es: Supongamos que se dispara una función asincrónica que no se termine de ejecutar cuando la página haya sido cargada totalmente. Qué pasaría en ese caso, lo que se disparó asincrónicamente se termina de ejecutar o se detiene también ?
      Respuesta:Cuando el servidor Web responde por completo una solicitud ASP.NET de determinado cliente Web, Sé está asumiendo que la operación asincrona iniciada previamente ya fue completada. De lo contrario se mantiene en ejecución el hilo principal de la pagina ASP.NET, hasta que finalice la operación asincrona.
      Ahora sí el hilo principal de ejecución de la pagina ASP.NET se detiene bruscamente. Entonce la operación asincrona se detiene forzadamente.
      Por eso según la experiencia, yo sugiero usar meticulosamente este mecanismo para ciertos escenarios puntuales.

      Bueno espero que haya aclarado la duda.
      Saludos.

      Comentario por jorgepedraza — agosto 13, 2010 @ 5:39 am | Responder


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: