viernes, 21 de marzo de 2008

Elección de una librería JavaScript


En la actualidad existen muchísimas librearias / frameworks JavaScript que son alternativas válidas a la hora de elegir una que utilizar en nuestros sitios. Esto hace que la elección de una sea difícil para quien nunca las ha utilizado, y en otros casos, la inercia de siempre usar la misma lleva a no siempre elegir la mejor para un proyecto.


El primer punto para poder decidir por una u otra librería es conocer cuales son sus fuertes y sus debilidades, y es eso lo que intentaré hacer en este breve resúmen de cada una. En este caso voy a hablar de Prototype, jQuery, YUI y MooTools.

Prototype - prototypejs.org


Esta es sin lugar a dudas una de las librerías más populares que hay, y sobre ella se han escrito muchos sitios e incluso otras librerías. Tiene una muy buena documentación y es sumamente sencilla de usarse. Es una librería genial para sistemas con mucha lógica en el lado del cliente, en especial por las facilidades que ofrece para crear clases (en particular a partir de la versión 1.6). El problema radica en que Prototype contamina todos los tipos de datos JavaScript con sus propios agregados, lo que hace que si uno está incluyendo plugins en el sitio o está desarrollando un plug-in, pueda romper el JavaScript del otro. Por ejemplo:

var frutas = new Array( "manzana", "pera", "uva" );
for ( var i in frutas )
alert( frutas[i] );


Sin Prototype mostrará 3 carteles, con las 3 frutas, pero si un plug-in cargase Prototype, este código mostraría muchísimas funciones y si se hiciese algo maś interesante que mostrarlas, el resultado sería totalmente inesperado.

jQuery - jquery.com


jQuery es sin lugar a dudas una de mis favoritas. La implementación de XQuery en JavaScript es de las mejores cosas que me han sucedido, pues facilita increiblemente la manipulación del árbol DOM. Aún más, el que permita una programación fluida (cada función retorna un objeto que puede ser utilizado para llamar a la siguiente) permite reducir lo que antes eran complejas piezas de código a una sóla línea muy facilmente legible.

jQuery está muy bien documentada, y no sólo no contamina el espacio publico, sino que está diseñada para poder ser altamente compatible con otras librerías si se lo requiere. Aún más, posee una increible variedad de plug-ins que uno puede incorporar según lo requiera, obteniendose una gran granularidad sobre que cosas se desea incorporar.

Son realmente pocas las limitaciones de jQuery, las maś importantes son la performance (que está en constante mejora, de hecho la versión 1.2.2 logró un gran avance en este sentido) y lo único que sí me ha limitado, es la imposiblidad de establecer ciertos headers a los pedidos AJAX (por ejemplo el encoding).

YUI - developer.yahoo.com/yui/


La YUI es una librería asombrosa. Tiene funcionalidades para hacer muchísimas cosas, y no sólo esto nos resuelve muchísimos problemas, sino que además viene todo skineado de forma muy agradable a la vista (aunque sigue siendo personalizable si se desea). Esta librería permite en forma realmente sencilla hacer aplicaciones web ricas y atractivas.

Sin embargo, YUI tiene algunos problemas que hacen que no sea usada en muchos casos. En primer lugar, su peso. YUI completa pesa más de 3 MB, y si bien es cierto uno nunca carga todo, sino que carga lo mínimo y si precisa más puede siempre utilizar el YUILoader para bajar CSS y JavaScript dinámicamente, lo cierto es que en general, sigue siendo demasiado, y se refleja rápidamente en los tiempos de carga. Por otro lado, YUI tiene un serio problema de documentación. Posee demasiados ejemplos, que no usan ni el 10% de lo que ofrece la librería, y la API Reference dista mucho de ser útil (suele hacer cosas como decir que una función devuelve un Object pero no dar ninguna pista respecto de lo que el mismo contiene) y nunca es claro en que versión se introduce una función / evento, por lo que mantener sistemas viejos es realmetne complicado.

mootools - mootools.net


Para quienes conozcan Prototype, notarán que esta librería tiene muchas cosas que les serán familiares. Muchas de las fuciones que ofrece una están en la otra: $A, each, bind, etc. Igual que Prototype, ofrece herramientas interesantes para generar objetos en JavaScript, y del mismo modo contamina los tipos de JavaScript por lo que hay que tener los mismos cuidados.

Lo original de esta librería es que al contrario de las otras, al momento de la descarga uno elije que cosas desea incluir y nos da un único archivo final que posee sólamente lo que nosotros precisamos.


En general, todo lo que uno hace con una librería se puede hacer con las otras, la diferencia está en cuanto tiempo y esfuerzo esto nos requiere. Idealmente uno debería de tener un buen manejo de un par de estas librerías y ser capáz de diferenciar cuadno conviene una u otra.

1 comentario:

Menduz dijo...

Muy buen articulo Juanma, en mi página utilizo jQuery, es para mi la mejor documentada, liviana y compatible.
MooTools me parece muy pesada y difícil de entender, pero es rápida y con muy buenas funciones,
YUI nunca lo probé, y Prototype .- Prefiero jQuery-.

Saludos
Agustin Mendez