Chalalo Land

Tecnologías ASP.NET y un poco Más

Contacto


 Si quierer cooperar, yo feliz, muy agradecido :)

De donde me Visitan?

Locations of visitors to this page

Generic Content

Si te gustaron los articulos, y te animas te estaría muy agradecido!


Recent Posts

Tags

Community

Blogs de MVP

Amigos Geeks

Blogs Imperdibles

GODS

Archives

Email Notifications

[Tutorial]Introducción al nuevo ScriptLoader de ASP.NET AJAX Library

Hola!, yo de nuevo :), hoy quería hablar de un control de la libería de ajax de ASP.NET que se llama ScriptLoader, el cual en breves palabras nos va a servir para reducir la complejidad a la hora de cargar script y resolver sus dependencias. De hecho la librería Microsoft Ajax Client-Side está dividida en múltiples archivos Javascript, permintiéndonos el ScriptLoader descargar solo los que necesitemos.

Dentro de sus características principales podemos encontrar:

  1. Resolución Automática de dependencias
  2. Carga Perezosa (Lazy loading)
  3. Carga de Script convinados
  4. Carga de Script Personalizados

Veamos con un ejemplo cada Caso:

1) Resolución Automática de dependencias

Vamos a realizar con el siguiente código nuestro análisis:

<html>
<title>ScriptLoader Demo 1</title>
<head>
    <script src="http://ajax.microsoft.com/ajax/beta/0911/Start.debug.js"  
            type
="text/javascript"></script>
    <script type="text/javascript">
        //Habilitar debugging
        Sys.Debug = true;
       //Resolver Dependencias
        Sys.require([Sys.scripts.DataContext]);
    </script>
</head>
<body>
</body>
</html>

Como  podemos ver la referencia hacia la librería que contiene al ScriptLoader src=http://ajax.microsoft.com/ajax/beta/0911/Start.debug.js , luego utilizamos Sys.require para y especificamos el nombre del componente cliente (o un arreglo de componentes cliente) que queremos cargar. Este control descarga todos los script necesarios en paralelo , permitiendo que la carga sea más rápida que lo normal (normalmente no hay descarga de script en paralelo), evitando bloquear la pagina mientras se renderiza. Cuando están cargados todos los script, se llama al método Sys.onready.

Al ejecutar el ejemplo 1 vamos a ver lo siguiente cuando analicemos el tráfico con Firebug:

image

Como ves, se estan cargando los script y sus correspondientes dependencias y en paralelo :)

2) Carga Perezosa de Script

Como no todo hay que cargarlo siempre al inicio, ya que por algún motivo, es posible que debido a la lógica de nuestro front-end. Veamos el Script:

<html>
<title>ScriptLoader Demo 2</title>
<head>
    <script src=http://ajax.microsoft.com/ajax/beta/0911/Start.debug.js
            type="text/javascript"></script>
    <script type="text/javascript">

        Sys.Debug = true;
      
//Carga Demorada
        function doSomething() {
            alert('Carga Demorada');
            Sys.require([Sys.scripts.DataContext]);
        };
    </script>
</head>
<body>
    <input type="button" onclick="doSomething()" value="ClickMe!" />
</body>
</html>

En este caso, al momento de presionar el botón, se van a cargar los archivos :), mostrando el mismo resultado que la foto tomada con FireBug anteriormente.

3) Carga de Script Combinados

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script src=http://ajax.microsoft.com/ajax/beta/0911/Start.debug.js
            type
="text/javascript"></script>
    <script type="text/javascript">
        Sys.Debug = true;
        //Carga normal 
        function cargaNormal() {
            Sys.require([Sys.scripts.Core]);
            Sys.require([Sys.scripts.ComponentModel]);
            Sys.require([Sys.scripts.Network]);
            Sys.require([Sys.scripts.Serialization]);
            Sys.require([Sys.scripts.History]);
            Sys.require([Sys.scripts.Globalization]);
            Sys.require([Sys.scripts.WebServices]);
        };        //Script Combinados
        function cargaCombinado() {
            Sys.require([
              Sys.scripts.Core,
              Sys.scripts.ComponentModel,
              Sys.scripts.Network,
              Sys.scripts.Serialization,
              Sys.scripts.History,
             
Sys.scripts.Globalization,
              Sys.scripts.WebServices
       ]);
    };
    </script>
</head>
<body>
  <input type="button" onclick="cargaNormal()" value="cargaNormal" />
  <br />
  <input type="button" onclick="cargaCombinado()" value="cargaCombinado" />
</body>
</html> Podemos darnos cuenta de la diferencia de la sentencia, en el primer caso son Sys.require independientes , en el segundo caso, que sería el de Script Combinados es solo un Sys.require que recibe una colección de componentes clientes.

 Veamos la diferencia con FireBug:
Opción carga normal:
image

Opción Scripts Combinados
image

En este caso hay una pequeña reducción de tiempo (medio segundo), la mayoría de este tiempo es parte de resolver al servidor y obtener los archivos individuales.

4) Carga de Script Personalizados

Muchas aplicaciones basadas en Ajax tienen comportamientos que no se ejecutan al iniciar la página, por lo que no es necesario cargar todos los script de la página en un inicio, solo cuando se necesita, evitando el retrazo del render hasta que se carguen todos los scripts.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>ScriptLoader Demo CustomScript</title>
   <script src=http://ajax.microsoft.com/ajax/beta/0911/Start.debug.js
           type
="text/javascript"></script>
    <script type="text/javascript">
        function Saludar() {
            Sys.loadScripts(["MyScripts/Script1.js",
                             "MyScripts/Script2.js",
                             "MyScripts/Script3.js"], 
                    function () {
                             Saludo1();
           
                 Saludo2();
            
                Saludo3();
            });
        }
    </script>
</head>
<body>
 <input type="button" onclick="Saludar()" value="Saludar" />
 <br />
</body>
</html>

 

En este caso tengo 3 Script que tienen una función que se llama Saludo1, Saludo2 y Saludo3 respectivamente, por ejemplo el código del Script1

image

function Saludo1() {
    alert("Hola desde Script1.js!");
}

 

Ahora ejecutamos , presionamos el botón saludar y revisamos nuevamente en FireBug:

image

Existe la posiblidad tambien, que veremos más adelante, podemos especificar las dependecias de nuestros propios script, pero eso lo vamos a ver en otro post :)

Saludos!
Gonzalo

Posted: 2/6/2010 7:13 por Gonzalo Perez | con 6 comment(s)
Comparte este post:

Comentarios

Jesús Bosch ha opinado:

muy interesante, sin duda. Esto debe ser nuevo en ASP.NET 4.0 verdad?

# June 3, 2010 8:24 AM

Gonzalo Perez ha opinado:

Si, de hecho es lo nuevo de Ajax Library de ASP.NET :)

# June 3, 2010 2:49 PM

Jesús Bosch ha opinado:

Una duda, de la resolución automática de dependencias no se encargaba ya el scriptmanager?

# June 5, 2010 12:08 PM

Jesús Bosch ha opinado:

mmm tampoco veo clara la diferencia entre los puntos 2 y 4 (perdona que pregunte tanto es que me interesa mucho el tema)

Saludos

jb

# June 5, 2010 12:10 PM

Gonzalo Perez ha opinado:

hola Jesus!, que tal!

El scriptmaneger lo hace, como tu dices, pero es un control de servidor, esto lo puedo hacer con client-script, incluso desde una pagina html.

El segundo punto es mostrar la diferencia entre el Sys.require y el Sys.loadScript, el primero determina dependecias de un componente, el segundo carga nuestros script (el primero tambien puede, estableciendo nosotros las dependecias)para el caso los dos los fueron ejemplo con carga retrazada, pero el fondo del [ultimo es el loadScript.

# June 6, 2010 6:24 AM

MVP Factor ha opinado:

Nuestro amigo Gonzalo Perez, ha escrito un excelente articulo aquí el detalle: [Tutorial]Introducción

# June 7, 2010 6:04 PM