Aplicaciones Web Inmutables

Rate this content
Bookmark

Resolver las dependencias cuando están todas agrupadas es fácil. Resolver las dependencias cuando se cargan a través de etiquetas de script es mucho más desafiante. El objetivo de esta charla es explicar cómo Meltwater maneja la resolución de dependencias al construir aplicaciones nativas basadas en componentes web que dependen de paquetes publicados por muchos equipos diferentes.

FAQ

Las aplicaciones web inmutables son aquellas diseñadas con la filosofía de ser construidas una vez y desplegadas muchas veces. Todas sus variables de entorno deben estar fuera del paquete, permitiendo que los paquetes sean inmutables para una versión específica y nunca cambien después de ser construidos.

Los beneficios principales incluyen la misma versión de activos utilizada en distintos entornos (pruebas y producción), activos altamente cacheables mejorando la eficiencia de carga, y la facilidad para realizar rollbacks a versiones anteriores.

UMD significa Universal Module Definition y es un formato que facilita el uso de módulos, que son compatibles con la mayoría de los empaquetadores de código y se pueden referenciar utilizando el espacio de nombres global del navegador.

HiMyNameIs es una biblioteca que ayuda a construir y mantener mapeos de módulos a espacios de nombres globales en el navegador mediante funciones que generan y resuelven estos espacios basados en la configuración del package.json, facilitando así la gestión automática de dependencias.

La herramienta 'Orchard' se usa para ordenar dependencias correctamente. Lee el package.json, utiliza Arborist para construir un árbol de dependencias completo y genera etiquetas de script basadas en esta resolución. Se limita mediante archivos YAML que definen cómo deben cargarse las dependencias.

La página de índice en una aplicación web inmutable sirve como punto focal donde se pueden reflejar todos los cambios inmediatamente. Dicta las versiones de todos los activos estáticos que se entregarán, siendo la única parte que no se almacena en caché de la aplicación.

Las aplicaciones web inmutables abordan desafíos como la duplicación de JavaScript, la necesidad de versiones consistentes entre entornos de prueba y producción, y la optimización de la carga mediante el uso extensivo de caché.

En Orchard, el archivo YAML define cómo se deben cargar las dependencias específicas, detallando la propiedad, la versión y los archivos a cargar. Ayuda a asegurar que las dependencias se carguen en un orden adecuado y gestionar la compatibilidad entre diferentes versiones.

Andy Desmarais
Andy Desmarais
20 min
20 Jun, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla de hoy discute las aplicaciones web inmutables y sus beneficios, como tiempos de carga más rápidos y un seguimiento de versiones fácil. El uso de la agrupación en estilo Universal Module Definition (UMD) permite una gestión flexible de dependencias y actualizaciones graduales. Herramientas como Webpack y Rollup proporcionan formas de referenciar UMD en paquetes y automatizar la configuración de dependencias. Los archivos Arborist y YAML ayudan a resolver árboles de dependencias y manejar conflictos, mientras que la herramienta Orchard CLI automatiza el ordenamiento de dependencias. Las dependencias internas y externas se pueden inicializar y gestionar de manera efectiva para un rendimiento óptimo.

Available in English: Immutable Web Apps

1. Introducción a las aplicaciones web inmutables

Short description:

Hoy vamos a hablar sobre aplicaciones web inmutables y dependencias. Tuvimos un problema con las dependencias en Meltwater, por lo que necesitábamos encontrar una forma de desagruparlas y compartirlas de manera efectiva. Las aplicaciones web inmutables nos permiten construir una vez y desplegar muchas veces, con variables de entorno fuera del paquete. Esto asegura que los activos se puedan almacenar en caché al máximo, lo que resulta en tiempos de carga más rápidos. También proporciona un seguimiento de versiones fácil y rollbacks.

¿Cómo les va, JS Nation? Hoy vamos a hablar sobre aplicaciones web inmutables y dependencias. Primero, soy Andy Damaris, pueden encontrarme en prácticamente todas las redes sociales como Teradox y mi sitio web es teradox.tech.

Lo que vamos a cubrir hoy es, vamos a comenzar con el problema. Hubo un problema que estábamos teniendo en Meltwater y luego pasaremos a las aplicaciones web inmutables, qué son y por qué las estamos usando, dependencias sin agruparlas, referenciando esas dependencias y finalmente hablaremos sobre cómo nosotros o esas dependencias con éxito.

Entonces, ¿cuál es el problema? Bueno, el problema eran las dependencias. Teníamos muchas y estaban siendo creadas por equipos internos para bibliotecas que podíamos usar regularmente para cosas como autenticación o búsquedas de empresas o búsquedas de usuarios y cada una de estas cosas estaba comenzando a acumular la cantidad de JavaScript duplicado que se estaba agrupando con todas las diferentes aplicaciones que estábamos enviando. Entonces, necesitábamos encontrar una forma de desagrupar estas dependencias y permitir que se compartieran de manera más efectiva entre las muchas aplicaciones que las estaban utilizando.

Entonces, las aplicaciones web inmutables fueron una parte importante de ese proceso, así que las vamos a cubrir primero. La filosofía básica de las aplicaciones web inmutables es que quieres construirlas una vez y desplegarlas muchas veces. Hay algunos fundamentos realmente específicos que necesitamos lograr para ser una aplicación web inmutable. El primero es que todas nuestras variables de entorno deben estar fuera del paquete. Esto permite que nuestros paquetes se construyan una vez por versión y sean inmutables para esa versión específica. Nunca cambiarán después de la primera vez que se construyan. También significa que necesitamos desplegarlos en una URL donde la versión que acabamos de construir esté incluida como parte de esa URL. Así que queremos que la URL completamente calificada tenga nuestro número de versión en algún lugar.

Ahora, ¿qué beneficios nos brinda esto realmente? Hay muchos. El primero es que cuando estamos probando en entorno de pruebas y estamos probando en producción, están utilizando los mismos activos exactos. La única diferencia será la configuración que ha cambiado entre los dos. Esto significa que todos nuestros activos también se pueden almacenar en caché al máximo. De hecho, se pueden almacenar en caché durante todo un año, que es el máximo actual del navegador. Esto es de gran beneficio para nuestros clientes. Solo necesitan hacer una solicitud para esa versión específica de ese activo específico una vez. Y después de eso, está en la caché de su disco local, lo que ahorra una gran cantidad de tiempo para las cargas secundarias y terciarias del sitio. Nunca tenemos que preocuparnos de que tengan que volver constantemente al origen por estos activos grandes en ocasiones. Otras cosas que se incluyen con esto son que siempre sabes qué versiones están desplegadas porque tu página de índice.html lo deja muy claro. Mira tu etiqueta de script. ¿Qué versión hay en la URL? Esa es la versión con la que estás tratando. También significa que los rollbacks ahora son realmente triviales. Solo estamos volviendo de una versión específica de un conjunto de activos a otra etiqueta de script. Otra versión específica de un conjunto de activos.

2. Aplicaciones web inmutables y dependencias

Short description:

Si eres un consumidor, es probable que ya tengas la versión anterior de los activos en tu caché de disco. La página de índice es el punto focal para los cambios inmediatos. Dividimos las cosas en tres procesos de pensamiento: alojamiento web estático, entrega de activos estáticos mediante etiquetas de script y APIs. Para acceder a la API, utilizamos un bloque de configuración en la etiqueta de script. Tenemos muchas dependencias, por lo que necesitamos herramientas para solucionar el problema. La primera herramienta son los UMDs, el estilo de agrupamiento de Universal Module Definition.

Y si ya eres un consumidor, es probable que ya tengas esa versión anterior de los activos en tu caché de disco listos para usar. Así que ni siquiera tendrás que pagar nuevamente los costos de descarga por ello.

Entonces, hemos hablado de todos nuestros activos, pero ¿qué pasa con la página de índice? Bueno, la página de índice es la única parte de una aplicación web inmutable que no se almacena en caché. Es nuestro punto focal donde todos nuestros cambios pueden aparecer de inmediato.

Así que nos gusta dividir las cosas en tres procesos de pensamiento diferentes. No es necesario hacerlo de esta manera, es solo un ejercicio para pensar en las cosas. La primera parte es nuestro alojamiento web estático. Aloja nuestra página HTML de índice. Esa página HTML de índice es bastante estática. No tiene mucha naturaleza dinámica. Y dicta las versiones de todos los activos estáticos que vamos a entregar. Luego, esos activos estáticos se entregan mediante etiquetas de script. Y esas etiquetas de script utilizan la URL completamente versionada de la que estábamos hablando. En este caso, la versión 1.2.3 para poder entregar esos activos.

Luego también tenemos nuestras APIs, y nuestras APIs pueden estar en un servidor diferente, pueden estar en el mismo servidor. Pero dictamos a qué API vamos a acceder mediante ese bloque de configuración que ves en la etiqueta de script. Ese bloque de configuración le dice a nuestra aplicación a dónde debemos ir para acceder a esa API y cuál debería ser la ruta, eliminando esa variable de entorno de nuestro código JavaScript.

Así que he pasado rápidamente por las aplicaciones web inmutables. Hay más matices, muchos más detalles en los que podrías profundizar. Y si eso es algo que te interesa, por favor visita immutablewebapps.org.

Así que ahora volvamos al meollo de lo que estamos hablando, que son las dependencias. Tenemos muchas de ellas. Son utilizadas por muchas aplicaciones diferentes. Entonces, ¿cómo solucionamos ese problema? Bueno, vamos a necesitar algunas herramientas para hacer esto con éxito. La primera herramienta que vamos a utilizar son los UMDs. Son un tipo específico de agrupamiento del estilo de Universal Module Definition.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

pnpm: un gestor de paquetes rápido y eficiente para JavaScript
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
pnpm: un gestor de paquetes rápido y eficiente para JavaScript
Aprenderás sobre uno de los gestores de paquetes más populares para JavaScript y sus ventajas sobre npm y Yarn.Una breve historia de los gestores de paquetes de JavaScriptLa estructura aislada de node_modules creada por pnpmQué hace que pnpm sea tan rápidoQué hace que pnpm sea eficiente en el uso del espacio en discoSoporte para monoreposGestión de versiones de Node.js con pnpm
Yarn 4 - Gestión Moderna de Paquetes
JSNation 2022JSNation 2022
28 min
Yarn 4 - Gestión Moderna de Paquetes
Top Content
Yarn 4 es la próxima versión mayor de tu gestor de paquetes JavaScript favorito, con un enfoque en rendimiento, seguridad y experiencia del desarrollador. A lo largo de esta charla repasaremos sus nuevas características, cambios importantes y compartiremos nuestros planes a largo plazo para el proyecto.Si solo has oído hablar de Yarn sin probarlo aún, si no estás seguro de por qué la gente hace tanto alboroto con los gestores de paquetes, si te preguntas cómo tu gestor de paquetes puede hacer tu trabajo más sencillo y seguro, ¡esta es la charla perfecta para ti!
Lo Bueno, Lo Malo, y Los Componentes Web
JSNation 2023JSNation 2023
29 min
Lo Bueno, Lo Malo, y Los Componentes Web
Top Content
No ha habido escasez de críticas justas e injustas hacia los Componentes Web de una amplia gama de personas que construyen para la web, incluyendo pero no limitado a los autores de Frameworks de JavaScript en supuesta competencia con la plataforma. En esta charla te mostraré cómo navegar y simplificar el multifacético paisaje de los componentes web, satisfaciendo las críticas comunes y mostrando cómo puedes Usar la Plataforma de manera más efectiva hoy en día.
Es hora de desfragmentar la web
React Day Berlin 2022React Day Berlin 2022
34 min
Es hora de desfragmentar la web
Top Content
A lo largo de los últimos años, el número de frameworks web disponibles para nosotros ha explotado. En cierto modo, la amplitud de elección es una clara victoria para nuestro ecosistema. Sin embargo, para muchos de nosotros, también viene con severas desventajas: - ¿Alguna vez has usado un componente de código abierto popular construido para el framework A, y deseaste que existiera en el framework B? ¿Qué tal una biblioteca de sistema de diseño? - ¿Tu empresa tiene frontends construidos en diferentes frameworks, y tus equipos web están frustrados por las horas perdidas necesarias para lograr un sistema de diseño consistente? - ¿Tu equipo construye SDKs para frameworks web, y debe reescribirlos manualmente para cada framework? La solución a estos 3 problemas existe hoy. Para entenderla completamente, primero debemos examinar los frameworks web de hoy, repensar cómo debería ser un componente, e introducir una nueva Representación Intermedia de nuestros componentes. Esto es lo que hemos hecho en Builder.io cuando creamos Mitosis, y estamos emocionados de compartirlo con todos.
Componentes Web, Lit y Santa 🎅
JSNation Live 2021JSNation Live 2021
28 min
Componentes Web, Lit y Santa 🎅
Comienza con los Componentes Web, que te permiten definir nuevos elementos HTML que funcionan en todas partes donde funciona el HTML regular. Esta charla se centrará en Lit, una suite de Google que te ayuda a crear Componentes Web con características que esperarías, como la vinculación de datos y definiciones declarativas. También se hablará de cómo los hemos utilizado para construir uno de los sitios más alegres de la web, el Rastreador de Santa de Google 🎅
Autoría de HTML en un Mundo JavaScript
React Summit US 2023React Summit US 2023
21 min
Autoría de HTML en un Mundo JavaScript
En esta charla, Tony muestra cómo un enfoque de autoría y HTML semántico primero para el trabajo de plantillas JSX conduce a componentes de interfaz de usuario más legibles, mantenibles y accesibles. Demuestra cómo pensar en implementar un prototipo de interfaz de usuario de una manera semántica, autoría de HTML antes de los visuales. Muestra cómo el marcado accesible mejora el rendimiento, reduce el tamaño del DOM, minimiza el tiempo dedicado a CSS y reduce la carga cognitiva no solo para los desarrolladores, sino también para todos nuestros usuarios, sin importar cómo consuman nuestros sitios y aplicaciones.

Workshops on related topic

Despliega una aplicación de componentes web y configura un flujo de integración continua
DevOps.js Conf 2022DevOps.js Conf 2022
111 min
Despliega una aplicación de componentes web y configura un flujo de integración continua
Workshop
Philippe Ozil
Philippe Ozil
Únete a nosotros en un masterclass en el que desplegarás una aplicación Node.js simple construida con componentes web y configurarás un flujo de integración continua (CI). Aprenderás sobre el poder del Lightning Web Runtime (LWR) y las GitHub Actions.
Componentes Web en Acción
JSNation Live 2021JSNation Live 2021
184 min
Componentes Web en Acción
Workshop
Joren Broekema
Alex Korzhikov
2 authors
El masterclass amplía el conocimiento del lenguaje de programación JavaScript, revisa los patrones generales de diseño de software. Se centra en los estándares y tecnologías de los Componentes Web, como Lit-HTML y Lit-Element. También practicamos la escritura de Componentes Web tanto con JavaScript nativo como con Lit-Element. Al final, revisamos las herramientas clave para desarrollar una aplicación: open-wc.