viernes, marzo 17, 2006

Traducción de Artículo de Ajax IX

Un acertijo sobre asincronicidad
En un último artículo de esta serie, voy a tomarme un buen tiempo para escribir y usar código asincronico, pero deberías tener una idea de por que el último parametro en open() es tan importante. En un modelo normal de petición/respuesta -pensa en la Web 1.0 acá- el cliente (tu navegador o el código ejecutandose en tu maquina local) hace una petición al servidor. Esa petición es sincrónica, en otras palabras, el cliente espera por la respuesta del servidor. Mientras el clientes está esperando, normalmente ves una de las fomas de notificacion de que está esperando:
  • un reloj de arena (especialmente en windows)
  • Una pelota de playa giratoria (normalmente en máquinas Mac)
  • La aplicación se congela y a veces el cursor cambia.
Esto es lo que hace que las aplicaciones web en particular se sientan pesadas y lentas -- la ausencia de interactividad real. Cuando apretas un boton, tu aplicación se vuelve inutilisable hasta que la peticion que enviaste sea respondida. Si haces una peticion que requiera un importante procesamientos del servidor, la espera puede ser significativa (al menos para los multiprocesadores, DSL , mundo sin espera de hoy).
Una petición asincrónica sin embargo, no espera a que el servidor responda. Mandas la petición y luego tu aplicación continúa. Los usuarios pueden cargar información al formalario todavía, presionar otros botones, y hasta dejar el formulario. No hay pelota de playa giratoria o reloj de arena girando y no hay grandes congelamientos de la aplicacion. El servidor responde silenciosamente y cuando termina, le hace saber al solicitante original que ya está hecho (de maneras que verás en un momento). El resultado final es una aplicacion que no se siente pesada o lenta, al contrario es dinámica, interactiva y se siente mas rápida. Este es solo un componente de la Web 2.0, pero es muy importante. Todos los los componentes GUI pulidos y los paradigmas del diseño web no pueden superar un lento, sincrónico modelo de petición/respuesta.
Enviar la petición
Una vez configurada la peticion con open(), estás listo para enviarla. Afortunadamente el metodo para enviar una petición se llama de forma mas apropiada que open(); es llamado simplemente send().
send() tiene un solo parámetro, el contenido a enviar. Pero antes que penses mucho en eso, recuarda que estás listo para mandar informacion a traves de la URL misma:
var= url="/cgi-local/lookupcustomer.php?phone="+escape(phone);
Aunque podés mandar información usando send(), tambien podes mandarla a traves dela URL misma. De hecho, en las peticiones GET (que van a constituir tanto como el 80% de tu uso tipico de Ajax), es mucho mas facil mandar la informacion en la URL. Cuando empezas a mandar información segura o XML, es cuando queres ver como se manda contenido mediante send() (voy a hablar de ambos, informacion segura y envio de XML en uno de los ultimo sarticulos de esta serie). Cuando no necesitas pasar informacion atraves de send(), pasa null como argumento de este metodo. Entonces, para mandar una petición en el ejemplo que has visto en este artículo, eso es exactamente lo que se necesita. (ver listing10)

listing 10: enviar la peticion

function getCustomerInfo(){
var phone = document.getElementById("phone").value;
var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);
request.open("GET", url, true);
request.send(null);
}

Etiquetas: