La dualidad en el desarrollo de interfaces web: ¿Ajax o Flash?
¿Ajax o Flash?. Ésta es una de las muchas preguntas sin respuesta que casi cualquier desarrollador web se ha hecho durante el último año.
Argumentos a favor de ambas tecnologías (porque en ambos casos hablar de lenguaje o de entorno de desarrollo no es demasiado riguroso) los hay, y probablemente del mismo peso y defendidos con semejante vehemencia por las respectivas comunidades de desarrolladores. Pero en realidad, la discusión se puede simplificar en uno sólo: el uso de tecnologías propietarias, o abiertas, y es que el player o máquina virtual de Flash es algo cerrado, propiedad de Adobe, y el HTML dinámico basado en comunicaciones asíncronas depende de un objeto (XMLHTTPRequest) propiedad de Microsoft, aunque implementado por todos los navegadores modernos.
Evidentemente, la discusión es mucho más compleja, y en ella hay también una carga bastante fuerte de, llamémosles así, prejuicios históricos. Flash ha sido hasta hace muy poco tiempo una herramienta exclusiva para diseñadores y animadores, y si bien es cierto que con ella se han realizado algunas de las aberraciones más dolorosas para la vista que se recuerdan, no es menos cierto que también hay alguna que otra retina desprendida por el mal uso del HTML (“blink, blink”).
Por eso, todos los argumentos que se puedan dar a favor de una u otra tecnología no son más que discusiones bizantinas que intentan obviar lo que debería ser la norma para cualquier desarrollador: utiliza la herramienta que mejor te pueda ayudar a resolver el problema concreto con el que te encuentres.
En cualquier caso, no estaría de más volver al vista atrás y recordar el porqué de la existencia de ambas tecnologías. En los albores de la historia moderna de Internet, allá por el 2000, se empezó a hacer patente la necesidad de superar las limitaciones intrínsecas al HTML, el lenguaje de descripción de páginas en el que se basó la web, y del modo de operación del protocolo de comunicaciones utilizado, basado en envíos de datos a un servidor remoto, y espera de la respuesta de éste para volver a presentar datos en el navegador del usuario.
En esos tiempos, había quien se ganaba las lentejas (como éste que les escribe) realizando animaciones en Javascript, un lenguaje de programación que permitía hacer maravillas visuales si se dedicaba un 80% del tiempo de desarrollo a luchar a brazo partido contra las diferentes implementaciones del lenguaje y del acceso a los elementos de la página por los navegadores existentes, incluso por las distintas versiones de un mismo navegador.
Pero en eso llegó algo nuevo: Flash. Con Flash se podía hacer lo mismo que con HTML dinámico (esto es, la combinación de HTML y Javascript), sólo que de forma mucho más rápida y que funcionaba en todos los navegadores. Y aunque ya lo he dicho, quiero insistir en ello: de forma más rápida. Mucho más rápida.
Y pasó lo que tenía que pasar: todo el mundo, al menos el mundo que gustaba de los interfaces ricos, que gustaba de salirse del aburrimiento visual del HTML, giró la cabeza, abandonó el Javascript y se pasó a Flash. Y comenzaron a propagarse por la web los equivalentes a blink y a las marquesinas, sólo que ahora con más colorines, y a veces, incluso con sonido.
Y así estuvimos unos tres años largos, creciendo con cada nueva versión de Flash, y empezando a decir que podíamos llevar la experiencia de las aplicaciones de escritorio a la web, haciendo lo que el marketing de Macromedia llamaba RIAs. (Rich Internet Applications). Ésa era la luz hacia la que todos íbamos, el cielo que todos perseguíamos: las RIAs.
Pero de repente, Google sacó del arroyo al Javascript, e implementó todo el cliente de su sistema de correo electrónico utilizando ese lenguaje. Y alguien más llegó y decidió que había que ponerle un nombre al redescubrimiento: AJAX (Asynchronous Javascript And XML). Y alguien más desarrolló un framework para simplificar el desarrollo en Javascript. Y alguien más llegó y decidió que esa forma de implementar los interfaces de las aplicaciones web era uno de los pilares maestros sobre las que se sustentaba lo que había comenzado a llamarse web 2.0.
Y de la noche a la mañana, los que llevaban años diciendo que Javascript no era un lenguaje de programación, se olvidaron de su poco gusto por la plataforma, y de lo poco que les gustaba que en los navegadores las cosas se movieran, o que se recargaran datos si eso se hacía en Flash, y comenzaron a loar las maravillas de AJAX.
Y ahora, nos pasamos los días de claro en claro y las noches de turbio en turbio discutiendo sobre qué es lo correcto, si implementar soluciones basadas en Flash o en XHTML con peticiones de datos asíncronas a servidor.
¿Lo correcto? ¿Cómo se puede saber qué es lo correcto? En primer lugar, conociendo las ventajas e inconvenientes de cada solución, sabiendo qué se puede y qué no se puede hacer y qué perspectivas de futuro inmediato hay. Veamos, pués, rápidamente, qué caracteriza a cada una de las dos tecnologías.
AJAX
Lo bueno:
- Basada en HTML, en realidad en XHTML, por lo que debería ser fácilmente estandarizable.
Accesible. La integración de lectores de pantalla, las posibilidades de modificar el tamaño del texto por el usuario, etc siguen sin tener comparación en Flash. (Por aquí hay disidencia: ¿AJAX accesible? Si te lee Stevie Wonder se le caen las gafas de sol. La propuesta es quitarlo tanto de aquí como de Flash) - Integración con CSS. Es, por tanto, bastante sencillo separar datos de presentación, por lo que las aplicaciones son más escalables.
- Ligereza. Se supone que una página con sólo HTML es más ligera que un front-end en flash, aunque en realidad el Javascript necesario para funcionar no es tan ligero, por lo que finalmente se depende de mecanismos de caché en servidor.
- Javascript. Lenguaje interpretado en el navegador, sencillo, orientado a objetos (según a quién se le pregunte), especialmente orientado a manipular el DOM de las páginas.
- Motores de búsqueda. Al basar los interfaces en HTML, son fácilmente indexados por los motores de búsqueda. Siempre y cuando su contenido no sea producto de una petición de datos a servidor, claro está.
Lo malo:
- El usuario puede haber deshabilitado el Javascript en el navegador.
- Se depende de un objeto propiedad de Microsoft para las comunicaciones asíncronas. Lo malo de esto no es que ese objeto sea propiedad de Microsoft o de cualquier otro, sino que es propiedad de alguien.
- No es tan ligero como parece a primera vista.
- Burdo. Por mucho que se intente, el resultado final no es comparable al de una web en Flash.
Flash
Lo bueno:
- Player casi universal. Prácticamente todos los ordenadores del mundo lo tienen instalado, aunque eso no implica que el usuario de un ordenador en concreto tenga instalada la última versión del mismo, ni que no lo haya deshabilitado utilizando alguna extensión del navegador.
Calidad visual. Sobre todo con el avance en el manejo de los textos en las últimas versiones del player de Flash. - Animación, multimedia. La única forma solvente de incluir animaciones, contenido interactivo, vídeo, audio.
- Lenguaje de programación de alto nivel orientado a objetos, aunque también sea interpretado en el player.
Lo malo:
- Se depende de un plug-in, propietario.
- Se tiende a abusar de las animaciones.
- Integración con el botón de volver del navegador no es nada sencilla.
- Poco accesible, a pesar de que las últimas versiones de Flash suponen una mejora sensible en este aspecto.
- Está inevitablemente unido a dos cosas: el botón de “Skip intro” y los banners abusivamente invasivos.
Efectivamente, todos los argumentos a favor de una u otra tecnología en realidad contienen un argumento en contra. Y viceversa. En el fondo, no debería ser el uso de una u otra tecnología el que marque la bondad de una solución sino el buen uso que se haga de ella, la forma en la que se utiliza. Al igual que con todos los avances del ser humano, como la electricidad, el motor de explosión, o la rueda, tanto Flash como AJAX se pueden utilizar para hacer el bien y para hacer el mal.
Esa, al menos, fue la conclusión de Herr Kompilehn, eminente psiquiatra de los Cárpatos, en el Trigésimocuarto Congreso Mundial de Transtornos de la Personalidad en Programadores.
A continuación, voy a transcribir las notas que tomé sobre su ponencia en dicho Congreso. Es un relato escalofriante, así que, por favor, si sus corazones son delicados, no sigan leyendo…
Estimados miembros de la Comisión Científica, estimados colegas, señoras y señores:
Durante los últimos cuarenta años he tratado a algunas de las mentes más preclaras de Europa, pero también a algunas de las más sanguinarias; a genios que no eran capaces de acordarse de ponerse los pantalones antes de salir de casa, y a asesinos múltiples que lloraban cuando alguien les enseñaba una foto de su madre.
Pero lo que les voy a contar ahora es el caso más extraño con el que me he encontrado jamás, el caso que estuvo a punto de hacerme renegar del Juramento Hipocrático, de hacerme abandonar el ejercicio de la psiquiatría.
Todo comenzó hace un par de años, cuando mi ayudante concertó una cita con un paciente que parecía como cualquier otro, una persona joven, con muchos de esos pendientes en partes muy extrañas de la cara, que hablaba un lenguaje un poco raro, lleno de términos desconocidos entonces para mí, pero que me perseguirán en mis sueños durante el resto de mi vida.
Pero no adelantemos acontecimientos, queridos colegas. Como he dicho, todo comenzó hace un par de años, con la visita de este joven paciente, a quien llamaré Mr. Alaguan de ahora en adelante, nombre ficticio, sí, pero que me permitirá mantener el debido secreto profesional.
Mr. Alaguan era un joven vestido a la moda, con ese pelo alborotado que estoy seguro que necesita más tiempo de preparación que un buen peinado con gomina, como a mí me gusta.
Desde su primera visita, aprecié en él una serie de gestos inquietantes. Como he dicho, durante mi larga carrera, igual que como durante la suya, queridos colegas, he tenido que tratar con algunos de los cerebros más enfermos de Centro-Europa, pero en el joven Alaguan, había algo que no había visto nunca.
Había decisión, una decisión, una pasión, que rallaba en el fanatismo. Porque durante los primeros meses de terapia lo único que conseguí sacar en claro es que el joven Alaguan sufría por no poder conseguir lo que él llamaba “llevar el escritorio a la web”, fuera eso lo que fuera.
Cada vez que nos acercábamos al tema, la agitación del joven Alaguan era patente,: comenzaba a temblar, a sudar, sus músculos se convulsionaban, y lo único que era capaz de decir, haciendo dolorosos esfuerzos para abrir la boca aprisionada bajo la tensión de sus mandíbulas era “llevar el escritorio a la web, debo llevar el escritorio a la web, debo trasladar la experiencia de utilizar una aplicación de escritorio a la web”.
¿Qué mayor reto puede haber para un científico, queridos colegas, que intentar desentrañar lo desconocido, intentar hacer un poco de luz en la oscuridad de una mente enferma? Por eso, en pocas sesiones Alaguan se convirtió casi en una obsesión para mí.
Poco a poco, utilizando algunas de las técnicas más avanzadas de electroshock, conseguí atisbar la fuente del problema. Dentro de Alaguan había dos personalidades totalmente diferentes, pero en continua lucha por lograr un objetivo compartido, que no era otro que la frase que Alaguan repetía una y otra vez durante sus ataques “llevar el escritorio a la web, trasladar la experiencia de usuario de una aplicación de escritorio a la web”.
Por fin, tras varios meses, conseguí comenzar a separar una de otra, conseguí aislar a las dos personalidades, de forma que podía interrogar a cada una de ellas. Pero siempre, antes o después, la personalidad que no estaba siendo interrogada conseguía, no sé cómo, salir a la luz, y participar de la conversación.
Por ello, me ha parecido, queridos colegas, que lo mejor era transcribir las grabaciones de una de mis sesiones con Mr. Alaguan, aquella en la que por fin sus dos personalidades afloraron y se enfrentaron abiertamente, para intentar hacerles partícipes del miedo, del horror que yo sentí.
Despacho de Herr Kompilehn: 30/06/2006
Herr Kompilehn: Relájese, Mr. Alaguan, no se asuste, esta inyección es un relajante muscular. Le ayudará a evitar los dolores que tuvo después de las últimas sesiones.
Bien, relájese, y deje que AJAX tome el control de su cuerpo, que se exprese con confianza. Déjele que hable de sus frustraciones, de sus miedos, de sus orgullos, con total libertad.
AJAX: Un momento, que estoy haciendo una petición nueva de datos sin recargar la página. Que eso se me da muy bien. Pero claro, ya estoy oyendo a Flash , protestando como siempre, que si es que dependo del objeto HTTPRequest, que si dependo de un lenguaje interpretado, que si no termino de ser cross-browser…. Qué pesado ¿Y él?, se habrá visto… con esa chulería, con esa soberbia por dibujar gráficos vectoriales, ¿quién se creerá que es?
Flash: ¡Callaaaaaaaaa! No me seas soberbio tú. Dependes para funcionar de un objeto que no se implementa igual en todos los navegadores, y de un framework en Javascript (como si eso fuera un lenguaje de programación) que deja mucho que desear, basado en una arquitectura más que discutible, y que parece pensado para que cualquier programador se vincule y dependa de él más que para utilizarlo.
AJAX: Ya está, ya salió. ¿Y tú? ¿Acaso no dependes de un runtime (perdona, no me mires así, por mucho que te empeñes en llamarlo máquina virtual no deja de ser un runtime), y además, propietario? Porque yo no obligo a ningún usuario a que se tenga que instalar nada, ni runtimes, ni máquinas virtuales, ni nada.
Flash: Sí claro, tú nunca obligas a nadie a nada, sólo es necesario que tengan activado el Javascript en el navegador, y que además el navegador no sea demasiado viejo. Por no hablar de los desarrolladores, que tienen que pasar por un infierno para probar sus aplicaciones, dependiendo de plugins del navegador o de sniffers de red para probar y resolver los errores de sus aplicaciones…
AJAX: ¡Calla! ¡Que me estás poniendo malo! No paras de quejarte, que si esto, que si lo otro, que si tienen que activar el Javascript… anda, y ¿qué pasa si alguien no se instala el Flash Player? ¿Y si tiene una versión antigua y no se ve tu aplicación?
Flash: Ya estamos otra vez con lo del player. ¿Porqué no dices de una vez que eso no es más de una disculpa para no reconocer que como el resultado que doy yo no lo da nadie?. ¿Quieres un trabajo fino? Dáselo a Flash, no al garrulo ese del Javascript
AJAX: Eso que acabas de decir sí que es una tontería.
Flash: Claro, pero no das argumentos para sustentar tus teorías. ¿No tendrá algo que ver el que yo ahora tenga un player nuevo, con un lenguaje nuevo, y que mis aplicaciones funcionen mucho más rápido que antes? ¿Te suena? ¿Has oído hablar de Flex o estás tan ocupado mirándote el ombligo que no te has enterado?
AJAX: ¿Flex?. Espera… ¿no es lo mismo que Generator, pero cinco años después?. Uy, no, no es lo mismo, que para desarrollar con Flex hay que seaber mucho de patrones J2EE…. ¡JA!
Flash: Ya, claro, lo que pasa es que a tí te molesta que se facilite el desarrollo de aplicaciones de cualquier forma. Si hay algo que no se hace con un editor de texto, ya no sirve para nada. Da igual que el desarrollo se pueda basar en un lenguaje orientado a objetos moderno y eficaz, que no necesita de trucos baratos como tu adorado prototipo, herencia de la que yo ya he salido.
AJAX: ¡Qué cara más dura! Ahora resulta que el mismo lenguaje que tú has estado utilizando durante años, lo que llamas con tanta pedantería ActionScript 1, como si ya lo hubieras olvidado, es lo peor que se ha inventado. Claro, con ponerle coletillas y número de versión al lenguaje ya lo arreglamos todo. Que si AS1, que si AS2, que si AS3… Muy modernos, sí, pero ¿por qué no hablas de la burrada de dinero que se necesita para empezar a desarrollar en Flash?… … y no te cuento ya si encima lo que vas a hacer lo vas a hacer con Flex… Porque en el mejor de los casos, hay que comprar un entorno de desarrollo, que por cierto, sigue siendo de lo más incomprensible y agresivo para los programadores que vengan de otros lenguajes. Mientras no te deshagas de la línea de tiempo no vas a conseguir que te consideren como un lenguaje normal, no como yo, que no necesito de paradigmas extraños; lo mío es código, y nada más, basta con tener un editor de texto, y se puede empezar a desarrollar.
Flash: Claro, ya has llegado a donde querías ¿no? Eso es lo que en realidad te molesta, que Flash haya sido durante mucho tiempo una herramienta para creativos, y que éstos la sigan utilizando. ¿Si hay línea de tiempo no vale como lenguaje de programación?
Herr Kompilehn: ¡Señores, por favor! ¡Compórtense! ¿Les parece a ustedes bien que se peleen de esa forma por algo tan banal?
AJAX: ¡Ha empezado él!
Flash: ¡Ha sido él, que se cree mejor que nadie!
Herr Kompilehn: ¡Silencio! ¡Ya está bien! ¿No han probado a trabajar en equipo, aprovechando cada uno lo mejor del otro? ¿No se dan cuenta que no son más que dos herramientas disponibles para la resolución de un mismo problema?
Efectivamente, Herr Kompilehn, como suele ocurrir con los grandes científicos de los Cárpatos, había dado en el clavo. La bondad de las soluciones viene por modas. Lo que hace cinco o seis años era considerado por la mayoría de los desarrolladores como un lenguaje de segunda categoría, de repente se ha convertido en la panacea, superando a otra herramienta también denostada por muchos por su pasado como herramienta para diseñadores y para realizar los banners más molestos del mundo.
Tal vez lo importante no sea saber qué solución es mejor, porque ninguna lo es, sino conocer bien las implicaciones, ventajas y desventajas de cada una de ellas, para que sea el desarrollador quien, utilizando su criterio, su conocimiento del problema a atacar y de las posibles soluciones para el mismo, utilice una u otra herramienta, o una combinación de ambas.
Cita recomendada: TARDÁGUILA, César. La dualidad en el desarrollo de interfaces web: ¿Ajax o Flash? Mosaic [en línea], julio 2006, no. 49. ISSN: 1696-3296. DOI: https://doi.org/10.7238/m.n49.0617.