JavaScript es el futuro del desarrollo de aplicaciones empresariales

Publicado por Pete Heard

La naturaleza caótica de la mejora tecnológica a menudo arroja al mundo una curva; cosas que nunca fueron diseñadas para ser populares de repente lo son. Nada podría haber sido más una sorpresa para el mundo tecnológico que el reciente ascenso de JavaScript a la cima en un mar de lenguajes modernos orientados a objetos. Convertirse en el primer lenguaje verdaderamente independiente de la plataforma con adopción masiva y soporte de herramientas.

Introducción: La subida de la popularidad de JavaScript

JavaScript apareció por primera vez en mayo de 1995 y fue creado por netscape como un lenguaje de secuencia de comandos único para ayudar con su navegador. En los últimos 5 años su popularidad ha sido ayudada por una serie de desarrollos clave (que cubrimos en este artículo).

Este gráfico muestra los datos recopilados por Redmonk que muestra la creciente popularidad de JavaScripts en comparación con muchos otros idiomas dominantes.

JavaScript duplication image

Fuente: http://redmonk.com/dberkholz/2014/05/02/github-language-trends-and-the-fragmenting-landscape/

Mejores herramientas, más soporte y avances en el lenguaje están permitiendo que JavaScript consolide lentamente su posición como un jugador importante en la industria de desarrollo de software. Un ejemplo se puede ver en este diagrama creado en Githut - que controla el uso del lenguaje en proyectos de código abierto.

JavaScript duplication image

Fuente: http://githut.info/

Razones para usar JavaScript

Razón 1: es mejor para arquitecturas distribuidas

Uno de los mayores problemas con el software de escritura es la duplicación. Tan pronto como ocurre la duplicación esto inmediatamente agrega costo de desarrollo, ya que cada cambio en el original ahora tiene que ser hecho dos veces.

Esto agrega una sobrecarga significativa. Desafortunadamente, con el aumento de la popularidad de las arquitecturas distribuidas (por ejemplo, single page applications y microservicios), esta duplicación es cada vez más frecuente, agrega costos porque hace que las aplicaciones sean más complejas y difíciles de mantener.

Por ejemplo; Vamos a tomar una típica aplicación de una sola página (SPA). Tiene una relación de servidor de cliente. En el cliente (el navegador) debe almacenar una lista de políticas de seguridad contra algún tipo de entidad. Estas políticas de seguridad son importantes. Pueden incluir cosas como (puede eliminar, puede actualizar). Son importantes porque usted no quiere mostrar a un usuario las cosas que no puede hacer.

El problema es que también debe almacenar esta información en el servidor. Porque cualquier persona con un poco de conocimiento técnico puede enviar peticiones falsas al servidor si no aplica las mismas políticas allí.

Así que terminas en una situación en la que tienes una aplicación de navegador escrita en JavaScript y un backend escrito en Java. En el diagrama siguiente vemos que tanto el servidor (en la parte superior) como el cliente (en la parte inferior) tienen la misma información. Debido a que están escritos en diferentes idiomas este conocimiento tiene que ser duplicado; observe las políticas de seguridad en rojo en ambas áreas.

JavaScript duplication image

Un ejemplo de cómo la separación física de los límites provoca la duplicación de la información

Esta situación, donde el navegador y el servidor están almacenando la misma información es un típico problema de duplicación. A menudo es causada por el uso de diferentes lenguajes en sistemas distribuidos.

La única manera de resolver este problema es usar código compartido entre los dos. Pero no podemos hacerlo porque los hemos escrito en diferentes idiomas. Y JavaScript es el único idioma que puede ser entendido por el navegador.

JavaScript del servidor al rescate! ...

El ecosistema de JavaScript está experimentando un rápido crecimiento y ha comenzado a acelerarse con el advenimiento de una herramienta de alojamiento de servidor llamada Node.js. Se ejecuta en el motor de Google Chrome v8.

Node permite ejecutar JavaScript en un servidor web. Esto no sólo abre las opciones de diseño y arquitectura de software, sino que debido a la forma en que funciona el lenguaje resulta que es bastante escalable también.

Muchas grandes empresas como Netflix y Walmart han decidido reemplazar sus arquitecturas de backend con Node. Al tener la opción de usar JavaScript a través de sus arquitecturas frontales y de back-end, puede desarrollar sistemas distribuidos que pueden utilizar módulos compartidos (Java, C#, PHP, Ruby).

En el siguiente diagrama he extendido nuestro diagrama desde arriba para mostrar que las políticas (en rojo) ahora se consolidan a un solo lugar.

JavaScript duplication image

Mediante el uso del mismo lenguaje que podemos compartir código que reduce la complejidad y lo más importante permite a los diseñadores de software eliminar la duplicación

El uso de JavaScript en servidores también ayudará con el diseño de microservicios, ya que la misma técnica se puede utilizar para crear microservicios que tengan algún código compartido.

Razón 2: es realmente bueno en multi-plataforma

JavaScript se ha ido moviendo lentamente para dominar muchas plataformas. Incluso en 2007, Jeff Attwood declaró en una publicación popular que JavaScript eventualmente superaría cualquier aplicación que lo permitiera.

"Cualquier aplicación que se pueda escribir en JavaScript, eventualmente se escribirá en JavaScript" - Jeff Attwood

JavaScript está empezando a obtener herramientas maduras y soporte para las tres áreas principales que las empresas están interesadas en desarrollar para (web, escritorio y móviles). Éstos son sólo algunos ejemplos de marcos que están impulsando JavaScript como un lenguaje de plataforma cruzada.

Native Mobile (IOS y Android) - React Native y NativeScript son los dos frameworks principales que permiten que el código JavaScript funcione en un móvil. Ofrecen apoyo maduro para una verdadera experiencia nativa; React fue utilizado por facebook para la plataforma móvil.

Desktop (Mac y Windows) - NW.js y Electron permiten a los desarrolladores empacar aplicaciones web o llamar automáticamente al sistema host para el desarrollo de escritorio.

Web (Todos los navegadores) - Angular , Meteor son ejemplos de marcos de aplicación de una sola página que usan JavaScript y permiten que aplicaciones empresariales complicadas se ejecuten dentro de un navegador. Nos traen gruesas arquitecturas cliente que son rápidas y sensibles al usuario.

Razón 3: Es realmente escalable

Irónicamente, la mayor debilidad en JavaScript se ha convertido ahora en una fuerza significativa. La diferencia clave entre JavaScript y la mayoría de los 'otros' lenguajes como (Ruby, Java, C# etc) es que es de subproceso único.

Si usted no es un desarrollador, entonces esto probablemente no significa mucho para usted, así que voy a tratar de explicar en términos simples.

La mayoría de los idiomas tienen funcionalidad que les permite ejecutar más de una instancia de sí mismos.

Estos lenguajes colocan en una gran lista las cosas que debe realizar el servidor. El procesador viene y sirve estas instrucciones, una a una.

A esto se le llama 'multi-hilo'. Así que el programador puede escribir código que se aprovecha de esto. Esto abre muchas opciones y pueden hacer cosas interesantes, como escribir servidores web que necesitan procesar lotes de usuarios concurrentes.

Pero ... esto tiene un costo, cambio de contexto! Todo lo que cambia entre los procesos consume el tiempo de los procesadores porque tiene que mantener dumping entre cosas dentro y fuera de la memoria. Esto lo ralentiza.

Un único hilo: un nuevo paradigma

JavaScript es un solo subproceso por naturaleza. Esto significa que el programador se detiene físicamente al tratar con varios subprocesos, ya que todo el código JavaScript se ejecuta en un solo hilo.

Debido a esta convención, los diseñadores del sistema se ven obligados a escribir código que no bloqueará el procesador - esto se llama una arquitectura no bloqueante.

Esto lo hace más difícil para el programador. Debido a que tienen que escribir código que se ocupa de eventos en lugar de código que es lineal.

El resultado es que ya que escriben código que no está permitido bloquear el único subproceso de JavaScript; se liberarán recursos inmediatamente, a diferencia de nuestros entornos "multi-hilo" donde los recursos se mantienen para procesamiento posterior.

Esto tiene el efecto de tener un aumento significativo de rendimiento en las aplicaciones que ejecutan procesos de alta carga y lo hace perfecto en un entorno web.

Conclusión

En este artículo hemos visto JavaScript y tres características interesantes.

Serverside JavaScript: Es la capacidad de ejecutar en el servidor utilizando Node.js es permitir la consolidación en bases de código único. Esto reduce la complejidad de las aplicaciones a gran escala. Esto tiene el beneficio de permitir que las arquitecturas más complejas se manejen más fácilmente porque se está resolviendo el problema de la duplicación.

Native Cross Platform Support: Está madurando el soporte de plataforma cruzada nativa a través de IOS, Android e incluso Windows / Mac Desktop permite a las organizaciones mejorar su tiempo de lanzamiento al mercado. Pueden reducir los cuellos de botella en torno a habilidades y soporte para sus aplicaciones.

Scalablity en entornos de alta carga: Su naturaleza de único hilo fuerza una convención en el diseño de software que termina permitiendo rendimiento y escalabilidad en muchos escenarios. Por lo general, estos escenarios se encuentran en un contexto web en el que las altas cargas necesitan ser servicios. Esto hace que JavaScript sea una poderosa herramienta para las organizaciones que necesitan escalar más tráfico para reducir costos.

Estas tres fortalezas, su creciente popularidad y herramientas y soporte mejorados significan que las organizaciones pueden aprovechar una ventaja competitiva al hacer de JavaScript un elemento básico de su estrategia de aplicación.