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.

This talk has been presented at JSNation 2022, check out the latest edition of this JavaScript Conference.

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
pnpm is a fast and efficient package manager that gained popularity in 2021 and is used by big tech companies like Microsoft and TikTok. It has a unique isolated node module structure that prevents package conflicts and ensures each project only has access to its own dependencies. pnpm also offers superior monorepo support with its node module structure. It solves the disk space usage issue by using a content addressable storage, reducing disk space consumption. pnpm is incredibly fast due to its installation process and deterministic node module structure. It also allows file linking using hardlinks instead of symlinks.
Yarn 4 - Gestión Moderna de Paquetes
JSNation 2022JSNation 2022
28 min
Yarn 4 - Gestión Moderna de Paquetes
Top Content
Yarn is a package manager that focuses on stability, performance, and security. It offers unique features like plug and play installation, support for nonmodules, and the exec protocol. Yarn is committed to being a good citizen in the open-source community and contributes to fixing dependencies. It is part of the Node.js Loader's working group and advocates for Corepack. Yarn is still experimental but is improving its user experience and security features. Contributions are welcome, and switching to Yarn can improve performance in large projects.
Lo Bueno, Lo Malo, y Los Componentes Web
JSNation 2023JSNation 2023
29 min
Lo Bueno, Lo Malo, y Los Componentes Web
Top Content
Web Components are a piece of reusable UI enabled by web standards and built into the web platform. They offer the potential for faster component initialization and less library overhead. Web Components can be created from scratch and utilized with existing component libraries. Shadow DOM and Declarative Shadow DOM provide benefits such as scoped CSS and server-rendered components. The tradeoff between not repeating oneself and achieving full server-side rendering support is discussed. User experience is deemed more important than developer experience.
Es hora de desfragmentar la web
React Day Berlin 2022React Day Berlin 2022
34 min
Es hora de desfragmentar la web
Top Content
Today's Talk introduces Mitosis, an open source project that solves the problem of building framework agnostic components. It supports JSX and Svelte syntax and outputs human-readable code for various web frameworks. Mitosis is already being used by enterprise customers and can be easily integrated with React, Svelte, and other frameworks. It saves time, allows for easy handling of framework version migrations, and enables efficient unit and integration testing.
Componentes Web, Lit y Santa 🎅
JSNation Live 2021JSNation Live 2021
28 min
Componentes Web, Lit y Santa 🎅
Web Components and the Lit library are introduced, highlighting their ability to create custom elements and replicate built-in components with different functionality. The use of semantic HTML and the benefits of web components in development are emphasized. The features of Lit, such as data binding and rendering, are discussed. The Santa Tracker is showcased as an example of web components being used in educational games. The compatibility of web components with other frameworks and their versatility in creating small widgets or large applications are highlighted.
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
This Talk by Tony Alicia focuses on authoring HTML in a JavaScript world. The speaker challenges developers to change their approach to building React components by starting with HTML first. By authoring HTML in a semantic way, readability and maintainability can be improved. Well-authored HTML provides better understanding of content and improves accessibility. It also has performance benefits by reducing DOM size. Investing time in HTML can save time and make applications more future-proof.

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.