miércoles, julio 11, 2007

5 puntos débiles que se le podrían encontrar a YUI Yahoo!

En IBM venimos trabajando hace un par de meses transformando nuestra aplicación Web Tradicional en algo más "RIA Oriented" y la verdad que fue un trabajo duro pero que viene resultando muy pero muy interesante, todavía estamos en el medio del testing y refactoring pero ya puedo decir que realmente es posible enriquecer una aplicación web con JavaScript, AJAX y CSS y sobre todo utilizando un excelente toolkit como YUI, ya que es una herramienta excelente, con mucha documentación, con una madurez y soporte increíble... podría estar escribiendo 5.000 líneas de lo bueno que YUI es y no creo que tenga mucho sentido, me parece que lo mejor en estos casos es buscar los puntos flojos para poder solucionarlos, y bueno, aquí van:
  1. El excelente componente Connection Manager carece de llamadas sincrónicas (bloqueantes) y esto es más por un capricho del autor que por otra cosa (en mi humilde opinión). Está claro que no son tan importantes pero no cuesta nada dejar la posibilidad.
  2. Todavía no tienen una solución para almacenar información del lado del browser y asi permitir construir aplicaciones RIA offline. Creo que este es un tema que hay que tener algo en cuenta ya otras tools como Dojo están un poco adelante.
  3. Los componente son un poco duros para extender, si bien son bastante configurables muchas veces es necesario dejar puntos de extensión sencillos para poder agregar funcionalidad que todavía no traen. Alguno puede decir que JavaScript es un lenguaje prototipado que te permite extender y modificar el comportamiento en tiempo de ejecución y es verdad, pero muchas veces eso no es muy simple te hacer. Aca se puede hablar mucho más pero estoy con un poco de sueño :)
  4. No provee una implementación para hacer Server Pushing o Comet y esto es algo bastante interesante a tener en cuenta. Justamente estas semanas estamos trabajando en esto pero estamos concentrados en el modelo de threads que hay que tener en el server poder enviar info al browser sin que el browser la pida. Actualmente estamos resolviendo el esto teniendo un client polling con una única conexión ajax por vez y con un time out relativamente largo (de 4 a 5 segundos aprox) como para que venga siempre con info del server.
  5. Le faltan utilidades sencillas para manejo de JavaScript como tiene Prototype y JQuery, realmente es invaluable poder acceder a elementos del DOM utilizando el $, o agregar estilos de manera muy sencilla y obviamente sin perder portabilidad.
Antes de cerrar quiero destacar dos puntos importantes:
  • esto es una critica totalmente constructiva a YUI desde mi humilde opinión. Vuelvo a repetir que de las herramientas que vi, y me recomendaron, es la que más documentación, soporte y madurez tiene.
  • muchos de estos puntos débiles que he encontrado a YUI principalmente vienen por el lado de la integridad conceptual que quisimos lograr armando el framework en JavaScript ya que en un momento estábamos usando 3 tools diferentes y no era muy lógico. Actualmente estamos usando YUI y Prototype, pero calculo que próximamente la saquemos o pongamos JQuery que es un poco más liviana y hace cosas parecidas.
Esto es todo...

3 comentarios:

Gona dijo...

Gustavo
Coincido en todo lo que vos dijiste sobre YUI, sobre todo en el problema de la extensibilidad. Tambien noto que impone un poco su manera de hacer las cosas, algo que si bien puede ser bueno en un framework yo prefiero tener un poco mas de libertad con algunas cosas, creo que con eso prototype es imbatible porque mas que un framework es un conjunto de ayudas para javascript, del otro lado estaria DOJO, que mas que un framework ya parece un SDK o un lenguaje. Javascript es un lenguajito bastante poderoso y esta bueno mantener cierta libertad para que los programadores nos limemos ;-)
Hay cosas que son medio rebuscadas y medio oscuritas para mi gusto, hablaste del connection manager y me molesta un poco que no sea una clase "instanciable" sino que haya que setearle parametros a la "clase" y despues llamar al metodo "estatico" para que haga la conexion, sobre todo cuando se manejan upload de files.
Y por ultimo ya estoy CANSADO de escribir 'YAHOO' por todos lados, podrian haber hecho un objeto 'Y' ¿no? :-p

Gustavo Andrés Brey dijo...

Totalmente de acuerdo con la primera del ConnectionManager. Pero con el segundo punto, se podría simplificar muy facil, ponés poner:

Y=YAHOO;
//Ahora sería muy sencillo...
Y.log("yui copado!");

y listo, no? :)

Gona dijo...

si, pero tengo que escribir una lina de mas.... fiaca mucha fiaca...