martes, 9 de diciembre de 2014

Aplicaciones híbridas para móviles

Hace poco más de un año empecé a desarrollar aplicaciones móviles, y por mi experiencia previa con sitios web, opté por el desarrollo de aplicaciones HTML híbridas en lugar de nativas, para hacer el desarrollo más rápido. Pero veamos...

¿Qué son las aplicaciones híbridas?

Las aplicaciones móviles comúnmente conocidas como híbridas son aplicaciones desarrolladas utilizando tecnologías web del lado del cliente (HTML, Javascript, CSS), pero que se instalan en los dispositivos móviles, y pueden acceder a las funcionalidades de hardware de este a través de APIs provistas por frameworks especiales (como Phonegap/Cordova, Sencha).
Estas aplicaciones usualmente se muestran en un componente visor de web provisto nativamente por el sistema operativo del móvil, los cuales proveen las funcionalidades de un navegador web relativamente moderno (soporte para HTML5 y CSS3).

¿Cuáles son sus ventajas?

La principal ventaja de las aplicaciones híbridas es que se basa en tecnologías web ampliamente conocidas, las cuales existen desde hace largo tiempo y han crecido y mejorado a lo largo de su desarrollo. Esto proporciona una sola interfaz de programación para multiples plataformas, a través del uso de frameworks especiales como Phonegap/Cordova, que porporcionan la infraestructura necesaria para crear de forma automática las respectivas aplicaciones nativas que encapsulan el contenido web, además de proveer APIs que estandarizan y simplifican el acceso a las funcionalidades del dispositivo.
El uso  de tecnologías web también ahorra la curva de aprendizaje de los desarrolladores que ya poseen conocimiento en el área, lo que puede facilitar y agilizar el desarrollo de aplicaciones móviles. También permite reducir el costo de contratar personal especializado en el área móvil para cada sistema operativo móvil del mercado (iOS, Android, Windows 8, Tizen, etc.), ya que cada plataforma hace uso de distintas herramientas y lenguajes de programación.
Adicionalmente, y como apreciación personal, el desarrollo de interfaces de usuario es más fácil, personalizable y escalable con el uso de HTML5 y CSS3, que son tecnologías especializadas para la presentación de la información. Y la disponibilidad de media queries en CSS facilitan el diseño responsivo, que permite adaptar la vista a la gran variedad de pantallas y resoluciones de dispositivos que existen en el mercado.

¿Existen desventajas?

Hasta acá todo parecía felicidad, ¿verdad? Lo cierto es que como en toda tecnología, existen desventajas que hay que tomar en cuenta. La principal desventaja que presentan las aplicaciones híbridas es la capa extra de virtualización que existe: la aplicación en realidad está corriendo sobre una aplicación nativa, en última instancia. Esto se traduce en una disminución en el desempeño de la aplicación, en contraparte de las aplicaciones nativas, lo cual se hace más notorio a medida disminuyen las características del hardware.
Sumado a esto está el hecho de que se depende del componente visor de web disponible en la versión del sistema operativo, lo cual puede disminuir aún más el desempeño, y disminuir el soporte de componentes HTML5 e instrucciones CSS. Además, hay que recordar que los desarrolladores del visor web no tenían como objetivo inicial perfeccionarlo para la ejecución de aplicaciones híbridas.
También, a pesar de que los frameworks especiales como Phonegap/Cordova, Sencha Touch y otros cuentan con una extensa API y plugins para el acceso al hardware (cámara, GPS, bluetooth, etc.) y funciones especiales del sistema operativo (acceso a archivos, identificación, almacenamiento, etc.), aún hay partes para los cuáles no existe un soporte completo (como servicios de fondo asíncronos entre otros).
Finalmente, hay que tomar en cuenta también el aspecto de la seguridad. En agosto de este año (2014) se emitió un comunicado por parte de Apache Cordova informando de vulnerabilidades en su framework, que obligaron al lanzamiento de una nueva versión menor de este para solucionar estas debilidades. Con esto no quiero decir que las aplicaciones híbridas sean inseguras, ni que las nativas sean seguras, ya que en realidad toda pieza de software puede presentar vulnerabilidades, mientras hayan humanos que las hagan y ataquen. Simplemente es que al existir una capa de abstracción más entre las aplicaciones, se abre la posibilidad a más puntos de ataque que hay que defender.

¿Ser o no ser?

Vamos a la pregunta del millón: ¿desarrollo una aplicación nativa o híbrida?. Creo que hay muchas respuestas posibles y válidas para esta pregunta, pero al menos personalmente, estos son los aspectos que tomo en cuenta para decidir si desarrollar una aplicación híbrida o no:
  • ¿Es una aplicación intensamente gráfica? Si lo es demasiado, es mejor utilizar la tecnología que presente un mejor desempeño, y en este caso, al menos hasta el momento, la mejor alternativa es una aplicación nativa. Pero si es una aplicación no tan gráfica, como por ejemplo una app informativa, o incluso hasta un juego ligero en 2D, entonces una aplicación híbrida puede ser una buena opción.
  • ¿El sistema operativo y hardware objetivo es viejo o reciente? A medida es más nuevo, se brinda un mayor soporte a las tecnologías web y aplicaciones híbridas. Si es más viejo, habría que evaluar si soporta o no las características que tengamos en mente para nuestra aplicación.
  • ¿Puedo acceder a todas las funcionalidades que necesito? Tomando como base que una aplicación nativa puede acceder al 100% de funcionalidad disponible, habría que investigar y evaluar si el framework que utilizaré para mi aplicación posee las funciones que requiero, o aunque no las posea, es posible desarrollarlas y añadirlas (y por supuesto cuento con el tiempo para hacerlo).
  • ¿Tengo poco tiempo y solo conozco tecnologías web/nativas? Creo que es el punto de menor relevancia de los mencionados, pero lo suficientemente importante para tener en consideración. ¿Por qué? Porque tanto el desarrollo de aplicaciones nativas como el uso de frameworks para aplicaciones híbridas posee su curva de aprendizaje. Además, el desarrollo de aplicaciones híbridas requiere siempre cierto conocimiento de las herramientas nativas subyacentes, principalmente para la preparación del entorno de desarrollo (SDKs, dispositivos de prueba, depuración, etc.). Y por qué no, esta prodría ser una buena oportunidad de aprender una tecnología y alternativa de desarrollo que no conocía, ya sea nativa (si viene del entorno web) o híbrida (si ya posee experiencia en el desarrollo nativo).

Related Articles

0 comentarios:

Publicar un comentario

Con la tecnología de Blogger.