Desarrollo de apps con JavaScript: ¿híbrido o nativo?
No todo el desarrollo se enfoca en crear páginas web o crear tiendas para Desktop. En materia de dispositivos, se requiere tradicionalmente el uso de lenguajes específicos para la plataforma, Java para Android y la combinación Swift/Objective-C para iOS, por ejemplo. Sin embargo, la irrupción de JavaScript en múltiples entornos también nos permite usar este lenguaje para el desarrollo de apps. Y, ante esta posibilidad, siempre puede surgirnos la duda de si optamos por la vertiente híbrida o por la nativa, algo que intentamos resolver en este artículo.
Antes que nada, conviene aclarar que JavaScript es capaz de desarrollar aplicaciones web, pero cuando nos referimos en este artículo a aplicaciones o apps, nos referimos exclusivamente a aquellas que se descargan desde las correspondientes tiendas de aplicaciones, App Store para iOS y Google Play para Android.
Tipos de apps que podemos hacer con JavaScript
En general, JavaScript nos permite hacer dos tipos de aplicaciones para dispositivos:
Aplicaciones híbridas
Son aquellas que se ejecutan en modo webview (es decir, con el navegador integrado en la app). Estas aplicaciones internamente se implementan por medio de páginas web y utilizan, por tanto, todas las tecnologías web para desarrollarse (HTML + CSS + JavaScript). El webview donde se se ponen en marcha es similar a cualquier navegador, ejecutado en el dispositivo, solo que sin barra de direcciones y otros elementos de interfaz que permitan navegar por otros lugares. Es decir, el webview te mostrará solo las páginas de la app híbrida.
Como alternativas de desarrollo híbrido nos encontramos con Apache Cordova, Phonegap e Ionic. Estas dos última opciones tienen también como raíz el propio Apache Cordova, la diferencia fundamental entre ellas es que Ionic se basa en el framework Angular y ofrece una serie de componentes propios para una serie de comportamientos comunes y necesarios en la mayoría de apps.
Aplicaciones nativas
Además de ejecutar un desarrollo realizado con JavaScript por medio de un webview, podemos también desarrollar aplicaciones que son capaces de compilar a nativo. Nativo quiere decir que no se ejecuta mediante un webview. Es decir, nuestra aplicación no es un conjunto de páginas web, sino es una aplicación compilada, al mismo nivel que una aplicación desarrollada con los lenguajes oficiales.
Como alternativas de desarrollo nativo tenemos NativeScript, basado en JavaScript Vanilla o Angular, y ReactNative, que obliga a desarrollar con React por debajo.
Híbrido vs. Nativo con JavaScript
Entre estos dos mundos tenemos como denominador común el uso de JavaScript, pero realmente el flujo de trabajo no es exactamente igual. Por supuesto, tampoco lo será la app resultante.
Podemos destacar y enfrentar varios puntos:
- Capacidad de aprovechar los conocimientos web. El desarrollo de aplicaciones híbridas es más parecido a la web, por lo tanto los desarrolladores serán capaces de sentirse más familiarizados con el modo de desarrollo. Por contra, aunque en el desarrollo nativo de JavaScript es necesario implementar ciertas funcionalidades, como las vistas, de una manera diferente.
- Capacidad de uso de los periféricos. Los periféricos que tiene un dispositivo (acelerómetro, cámara, etc.) se utilizan por medio de plugins en el desarrollo híbrido. Sin embargo, si desarrollas en modo nativo estás utilizando directamente el hardware, mediante las librerías con las que trabajarías en los lenguajes oficiales de cada plataforma. En híbrido, por tanto eres, más dependiente del desarrollo de terceros para el acceso al hardware.
- Rendimiento. Por su compilación, en el desarrollo nativo hemos de suponer un mayor rendimiento de las apps. Aunque lo cierto es que, a la hora de la verdad, no hay muchas diferencias ya que hoy en día los dispositivos son muy potentes y, en general, las aplicaciones no resultan demasiado exigente a nivel técnico.
- Permisos y posibilidades. Lo más destacado al final es que el webview está embutido dentro de un navegador y, por tanto, está sujeto a las características del desarrollo para la web. En resumen, no siempre es posible realizar cualquier comportamiento dentro de un navegador, mientras que en nativo sí es posible. Aunque estos problemas se suelen solucionar en el desarrollo híbrido también por medio de plugins, no siempre resulta práctico depender de los desarrollos de terceros.
- Capacidad de aprovechar un desarrollo web ya realizado. Gracias al desarrollo híbrido somos capaces de aprovechar una parte del código de las aplicaciones web que podamos tener ya desarrolladas. En el desarrollo nativo no es tan fácil porque el código cambia más.
En resumen, el desarrollo de apps híbrido con JavaScript es, a día de hoy, una excelente alternativa capaz de cubrir la mayoría de los requisitos de las aplicaciones. Siendo prácticos, su mayor ventaja es que permite a los desarrolladores web aprovechar su conocimiento y parte del trabajo durante el desarrollo de una aplicación web. Además, hoy disponemos del desarrollo JavaScript que compila a nativo, que supone un paso más, al permitir disfrutar de recursos mucho más cercanos al dispositivo y las propias librerías disponibles en el desarrollo con los lenguajes nativos. La adaptación es un poco más compleja para los desarrolladores web, pero sus ventajas también resultan suficientemente representativas como para considerar esta opción.
Si estás trabajando con apps, te pueden interesar los artículos Cómo configurar un entorno de desarrollo para Android y Cómo configurar un entorno de desarrollo para iOS