Optimización de Imágenes - Victoria Rápida para Mejorar el Rendimiento en Aplicaciones Vue & Nuxt

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

Mejorar el rendimiento de las aplicaciones Vue o Nuxt no es una tarea fácil. Sin embargo, hay algunas victorias rápidas que puedes implementar fácilmente y que mejorarán drásticamente el rendimiento de tu sitio web. Una de estas victorias rápidas es la Optimización de Imágenes. En esta charla, te enseñaré cómo optimizar imágenes al vuelo con servicios de Gestión de Activos Digitales como Cloudinary o Sistemas de Gestión de Contenidos, utilizar el concepto de Carga Perezosa, usar formatos comprimidos de imágenes como WEBP, ¡y mucho más!

This talk has been presented at Vue.js London 2023, check out the latest edition of this JavaScript Conference.

FAQ

La optimización de imágenes implica ajustar el tamaño, el formato y la calidad de las imágenes para reducir su tamaño de archivo sin perder calidad visual significativa. Es crucial para mejorar el rendimiento del sitio web porque las imágenes optimizadas se cargan más rápido, mejorando la experiencia del usuario y la velocidad general del sitio.

Durante la presentación se mencionaron formatos de imagen como WebP y Avif, que son más ligeros en tamaño comparados con formatos más tradicionales como JPEG y PNG, aunque no son compatibles con todos los navegadores, como Internet Explorer.

Se puede utilizar IPX, una herramienta desarrollada por el equipo de Nuxt bajo la organización NGS, que es fácil de usar y puede funcionar como middleware de ExpressJS o como cliente. Otra opción es Cloudinary, una herramienta de gestión de activos digitales que permite optimizar imágenes bajo demanda con varias configuraciones.

Cloudinary permite transformar imágenes ajustando formato, tamaño y aplicando diversas optimizaciones. Automáticamente selecciona el formato más eficiente y permite realizar transformaciones como cambiar el formato, reducir tamaño y añadir superposiciones, mejorando así la eficiencia y la apariencia de las imágenes en un sitio web.

Sí, Cloudinary ofrece un nivel gratuito que es bastante generoso para aplicaciones pequeñas como portafolios, aunque tiene algunas limitaciones en comparación con los niveles de pago, como la eliminación de fondos y otras características avanzadas.

La carga diferida de imágenes es una técnica que carga imágenes solo cuando son necesarias, es decir, cuando el usuario se desplaza y están a punto de entrar en el viewport. Esto reduce el tiempo de carga inicial de la página y mejora la eficiencia al no cargar todas las imágenes de una vez.

En Vue o Nuxt, se puede utilizar el módulo Nuxt Image, que soporta varios proveedores de optimización de imágenes, incluyendo Cloudinary. También se está desarrollando un módulo específico para Cloudinary que traerá funcionalidades adicionales para Nuxt 3, facilitando la integración y optimización de imágenes directamente en estas plataformas.

Jakub Andrzejewski
Jakub Andrzejewski
31 min
12 May, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La optimización de imágenes es crucial para el rendimiento del sitio web y la experiencia del usuario. Servicios como IPX y Cloudinary pueden ayudar a optimizar las imágenes al vuelo. Cloudinary ofrece funcionalidades adicionales y transformaciones para la gestión de imágenes. La carga perezosa y el patrón perezoso pueden mejorar el rendimiento del sitio web al diferir la carga de imágenes. Las imágenes optimizadas ofrecen una mejor experiencia al usuario. Las soluciones alternativas pueden mitigar el impacto de las fallas del servicio.

1. Introducción a la Optimización de Imágenes

Short description:

Para mejorar el rendimiento del sitio web, a menudo nos enfocamos en el back-end. Sin embargo, hay varias optimizaciones de front-end que podemos hacer. La optimización de imágenes es una victoria rápida para mejorar el rendimiento y la experiencia del usuario. Comencemos con una encuesta para ver cuántos de ustedes están utilizando y optimizando imágenes en sus sitios web. Optimizar las imágenes es crucial para un sitio web de alto rendimiento y mejora la experiencia del usuario. Hoy, nos centraremos en la optimización de imágenes y su impacto en el rendimiento del sitio web.

¿Me escuchan bien? ¿Sí? Bueno. Vale. Entonces, podrías estar pensando que para mejorar el performance del sitio web, necesitamos enfocarnos en las cosas del back-end. ¿Verdad? Entonces, necesitamos optimizar o hacer las consultas SQL más eficientes. Necesitamos optar por implementaciones de caché y cosas así. Pero en realidad, hay varias cosas que podemos hacer en el front-end para hacerlo más eficiente. Y esto me inspiró a tomar el tema de la optimization de imágenes para la presentación de hoy ya que es, en mi opinión, una de las victorias rápidas para mejorar el performance en tu sitio web.

Entonces, como ya me presenté. Mi nombre es Jakub y trabajo en Vue Storefront. Y también soy un Experto Desarrollador de Google en performance web. Esta es también una de las razones por las que seleccioné el tema. Y también soy embajador en esas organizaciones, así que si estás interesado en hablar sobre cualquiera de ellas, solo búscame después de la charla y podemos compartir el conocimiento. Y sí. Hablar de ello. Y como también mencionó Dom, nos conocimos hace casi dos años en la última edición de Vue.js Live, así que estoy muy contento de estar aquí una vez más. Y sí, compartir mi conocimiento con todos ustedes.

Entonces comenzaré la presentación con una pequeña encuesta. Por favor, levanta la mano si estás utilizando imágenes en tu sitio web. Eso es básicamente muy sencillo, ¿verdad? Sí, estamos utilizando las imágenes en nuestros sitios web. Y ahora por favor levanta la mano si estás optimizando las imágenes. Vale. Entonces, bastantes de ustedes, pero no tantos. Así que claramente podemos ver que todos estamos utilizando las imágenes, pero no las estamos optimizando. Mientras que optimizar las imágenes es, en mi opinión, la parte crucial de un sitio web de alto rendimiento. Y no se trata solo de los resultados de Lighthouse o cualquier otra herramienta de auditoría de performance web. También es bueno para la user experience porque los usuarios quieren obtener los data lo más pronto posible. Como las imágenes, si estás buscando un sitio web de e-commerce, quieres tener la imagen del producto lo más pronto posible porque quieres comprar el producto. Entonces, hablemos primero sobre los formatos de imagen. Hay muchas diferencias técnicas entre un formato de imagen y otro. Y en mi charla de hoy, quería centrarme en la optimization.

2. Importancia del Tamaño y Formato de la Imagen

Short description:

El tamaño y el tiempo de carga de las imágenes son factores importantes en el rendimiento del sitio web. Formatos como WebP y Avif son más ligeros que JPEG y PNG, pero no son compatibles con Internet Explorer. Las imágenes de tamaño adecuado evitan el desplazamiento del diseño y mejoran el tiempo de carga. Los Core Web Vitals, como la pintura de contenido más grande y el desplazamiento acumulativo del diseño, dependen de imágenes de tamaño adecuado. Los servicios de optimización de imágenes pueden ayudar a optimizar las imágenes al vuelo.

Básicamente el tamaño y el tiempo de carga de la imagen. Así que quiero centrarme solo en uno. Y sí, prepárate, habrá algunos memes más también.

Para los usuarios, la diferencia habitual entre una imagen que está, digamos, en un formato y la otra imagen, que está en un formato diferente, suele ser la misma. No puedes ver la diferencia. Simplemente se ven igual. La única diferencia es el tamaño. Y esto es lo que mostraré durante la breve demostración más adelante. Pero en general, formatos como WebP o Avif, espero haberlo pronunciado correctamente, son más ligeros que JPEG y PNG, pero no son compatibles con Internet Explorer. Y digo esto porque uno de mis amigos, hasta hoy, está soportando una aplicación que todavía necesita funcionar en Internet Explorer. Así que no tiene un gran trabajo, diría yo.

Sí, así que hablamos de los formatos de imagen. También hay casos sobre el tamaño, imágenes de tamaño adecuado. Y he visto demasiados sitios web de producción donde básicamente estaban obteniendo la imagen, por ejemplo, para un pequeño icono, y la imagen estaba en una resolución full HD, y luego era como comprimida en el icono que estaba, por ejemplo, en el pie de página. Así que esto puede parecer un problema realmente, realmente extraño, pero sucede demasiado a menudo, diría yo, para los sitios web modernos.

Entonces, ¿por qué deberíamos tener las imágenes de un tamaño adecuado? Básicamente por el tiempo de carga. Si estamos obteniendo las imágenes en el formato correcto, el tiempo de carga será más corto y también habrá lo que es la segunda cosa más importante, no veremos el desplazamiento del diseño. Porque tendrás... si has visto algunas charlas o artículos sobre el rendimiento web, probablemente ya sabes sobre los Core Web Vitals. Esta es como la métrica o conjunto de métricas que podemos usar para verificar cómo está funcionando nuestro sitio web. Así que hay métricas como la primera, la pintura de contenido más grande y el desplazamiento acumulativo del diseño. Y tener las imágenes de tamaño adecuado es importante para ambos. Pero podemos optimizar esas imágenes básicamente reemplazando... o convirtiendo una de las formatos de imágenes en otro. Podemos simplemente tener la imagen en la resolución correcta desde el principio. Pero en la mayoría de los casos, queremos poder optimizarlas al vuelo. Utilizando cierto software. Para eso, podemos usar servicios de optimización de imágenes. No estoy seguro si existe una palabra como esta o una palabra clave. Simplemente la inventé.

3. Servicios de Optimización de Imágenes

Short description:

La idea detrás de estos servicios es optimizar las imágenes al vuelo. IPX, desarrollado por el equipo de Nuxt, es un optimizador de imágenes sencillo basado en Sharp y VIPS. Se puede utilizar como middleware de ExpressJS o como cliente de IPX. Es ampliamente utilizado en el ecosistema de Nuxt.

Básicamente, la idea detrás de estos servicios es permitirnos optimizar las imágenes al vuelo. Siempre que lo necesitemos, y con los parámetros que también necesitemos. Así que podemos usar la herramienta llamada IPX, que es la herramienta desarrollada por el equipo de Nuxt también bajo la organización NGS.

Y la organización NGS en general, si aún no la conoces, es una organización donde hay paquetes que se utilizan en muchos diferentes frameworks porque son solo de JavaScript / TypeScript. Así que podemos usarlo con Vue, React.

Así que IPX es el optimizador de imágenes que se basa en Sharp y VIPS. Y realmente es muy sencillo de usar. Podemos simplemente instalarlo y podemos usarlo como middleware de ExpressJS o podemos usarlo como simplemente el cliente de IPX. ¿Y cómo podemos usarlo más adelante en nuestra aplicación? Podemos simplemente enviar una solicitud al localhost con ciertos parámetros, por ejemplo, el formato. En este caso, será webP. Pero IPX funciona bien y de hecho se utiliza en la imagen de Nuxt, el módulo que se utiliza ampliamente en el ecosistema de Nuxt para manejar imágenes.

4. Uso de Cloudinary para la gestión de imágenes

Short description:

Sin embargo, puede haber casos en los que no podamos usar IPX y necesitemos un servicio de terceros como Cloudinary. Cloudinary es una herramienta de gestión de activos digitales que te permite gestionar varios tipos de activos en tu sitio web. Proporciona la flexibilidad para obtener activos en el formato, tamaño y optimizaciones deseados. NUX image y NUX Cloudinary se integran con Cloudinary, pero NUX Cloudinary ofrece funcionalidades y transformaciones adicionales. He colaborado con Kolby Fajok, Director de Experiencia de Desarrollador en Cloudinary, para lanzar un módulo de Cloudinary para NUX 3. Permíteme mostrarte cómo funciona. Simplemente instalamos el módulo, lo registramos, añadimos el nombre de la nube y usamos el componente de imagen CLD. Cloudinary selecciona automáticamente el formato de imagen más eficiente.

Sin embargo, puede haber casos en los que básicamente no podemos usar algo como IPX. Simplemente queremos que un servicio de terceros maneje este caso por nosotros. Y para eso, podemos usar una herramienta como Cloudinary.

Así que Cloudinary es la gestión de activos digitales que te permite gestionar tus activos en el sitio web. Así que fotos, imágenes, videos, GIFs, muchas cosas así. Y luego lo que podemos hacer con él es que podemos obtenerlos de la manera que queramos. Así que en el formato correcto, en el tamaño correcto, con muchas optimizaciones diferentes aplicadas a, que mostraré en un minuto.

Así que en el mundo de NUX, podemos usar Cloudinary con NUX image porque NUX image soporta 18 proveedores y Cloudinary es uno de ellos. Pero también podemos usar el módulo Cloudinary, que es específicamente para trabajar con Cloudinary Eso fue desarrollado por Maja Chavin. Maja Chavin también es popular en la comunidad de Vue y ella fue la creadora original de este módulo. Y sí, entonces podrías estar preguntándote, cuál es la razón o básicamente cuál es la diferencia entre usar NUX image y el NUX Cloudinary si ambos pueden integrarse con Cloudinary?

Así que la idea detrás de NUX image es ser genérico. Así que no importa qué proveedor uses, todavía puedes usarlo con una API para la imagen. Sin embargo, para el NUX Cloudinary, la idea era entregar más funcionalidades de Cloudinary, más optimizaciones, más transformaciones, transformaciones de imagen. Y también hay una diferencia más en el NUX Cloudinary es que el módulo en sí fue desarrollado hace algún tiempo. Y solo funciona para NUX 2, que como sabes ahora, NUX está en transición a NUX 3. Así que tengo una pequeña sorpresa para ti. Y me uní a Kolby. Kolby Fajok es el Director de Experiencia de Desarrollador en Cloudinary. Así que recientemente hemos unido fuerzas para lanzar un módulo de Cloudinary para NUX 3. Y te lo mostraré en un minuto.

Así que déjame ir al código. Así que el uso del módulo Cloudinary es realmente simple. Simplemente, como con muchos otros módulos, instalamos el módulo. Luego lo registramos en el array de módulos. Y luego, básicamente, solo necesitamos agregar el nombre de la nube, el nombre específico de la nube que está asignado a nuestra cuenta. Y luego lo que podemos hacer es que podemos empezar a usar la imagen CLD, que es el componente específicamente creado para trabajar con Cloudinary. Así que como resultado, lo que tenemos es que cuando vamos al localhost, esta es la imagen que se obtiene de Cloudinary. Y si inspeccionamos, por cierto, ¿está bien la fuente? ¿Visible? Okay. Así que, como puedes ver, el tipo de la imagen es Aviv. Porque Cloudinary, por defecto, lo que hará el cargador de URL de Cloudinary es que automáticamente intentará usar el formato de imagen más eficiente.

5. Comparación de Formato y Tamaño de Imagen

Short description:

El tamaño de la imagen varía dependiendo del formato utilizado. El formato AVI reduce el tamaño a 22 kilobytes, mientras que el formato JPEG original es de 33 kilobytes. PNG, por otro lado, es de 200 kilobytes, significativamente más grande que el formato AVI.

Entonces, en este caso, será Aviv. Echemos un vistazo al tamaño. Dice 22.3 kilobytes para esta imagen. Y como puedes ver aquí, el SRC de la imagen es JPEG, por lo que ya ves la transformación realizada. Fue JPEG transformado en Aviv. Así que intentemos hacerlo como un WebP. Así que aquí ves 22 kilobytes. Y cuando refresco, ves que cambiar a WebP aumentó el tamaño en 15 kilobytes. Más o menos. Así que hagámoslo en el formato original, que será JPEG, si puedo escribirlo correctamente. Así que 33 kilobytes. Ahora son 55 para el original. Así que ya logramos obtener la mitad del tamaño de la imagen solo usando este formato. Y ahora vamos a probar con PNG solo para mostrar la diferencia. Así que con PNG, PNG es de 200 kilobytes, básicamente 10 veces más grande que la imagen en el formato AVI.

6. Funcionalidades de Cloudinary y Módulo Nuxt

Short description:

Cloudinary ofrece más que solo cambio de formato. Permite agregar superposiciones con texto y estilo a las imágenes. La próxima versión 2.0 del módulo Cloudinary para Nuxt se lanzará la próxima semana, lo que lo hará accesible para los usuarios de proyectos gratuitos de Nuxt.

Pero Cloudinary no solo te permite cambiar el formato. Viene con muchas más funcionalidades de serie. Así que digamos que en lugar de solo cambiar el formato, lo que me gustaría hacer aquí es agregar alguna superposición a nuestra imagen, por lo que tendrá algo de texto, algo de estilo también. Entonces, cuando lo descomento y simplemente lo hago un poco más pequeño y refresco la página, tú ves qué más se puede agregar a la imagen. Y esto se está haciendo completamente por Cloudinary, y podemos inspeccionarlo comprobando la fuente de la imagen. Entonces ves aquí la fuente completa de la imagen. Entonces, básicamente, todo lo que definimos aquí en el code, la superposición, se está agregando como los parámetros para que Cloudinary optimice las imágenes para nosotros. Entonces sí, la versión 2.0 para el módulo Cloudinary para Nuxt aún no se ha lanzado, pero será la próxima semana. Entonces, con la creciente popularidad de los proyectos gratuitos de Nuxt, podrás usar este módulo en los próximos días también.

7. Carga Diferida de Imágenes

Short description:

La carga diferida es un patrón que implica diferir la carga de imágenes hasta que realmente se necesiten. En lugar de buscar todas las imágenes al principio, podemos diferirlas hasta el punto en que el usuario las verá en el viewport.

Permítanme volver a las diapositivas porque tengo algunos patrones más que quería compartir con ustedes. Y el primer patrón que siempre me gusta recomendar y usar en aplicaciones web es básicamente la carga diferida, y específicamente la carga diferida de las imágenes. Así que puedo explicarte cómo funciona, pero te mostraré un GIF con algunos gatos que básicamente te mostrará cómo funciona. Así que tenemos los gatos, imágenes de los gatos, y puedes ver en la cola de solicitudes que ellos se buscan básicamente cuando el usuario está desplazándose hacia abajo, es decir, cuando realmente se necesitan. Así que en lugar de buscar todas ellas al principio, en la carga inicial de la aplicación, podemos simplemente diferirlas hasta el punto en que el usuario las verá en el viewport.

8. Carga Diferida y el Patrón Diferido

Short description:

La carga diferida es una técnica para diferir la carga o solicitud de imágenes hasta que realmente se necesiten. Es parte del patrón diferido, que implica diferir la funcionalidad hasta que se necesite. La carga diferida puede mejorar el rendimiento del sitio web al prevenir solicitudes de imágenes innecesarias. Además, existe una característica experimental llamada prioridad de búsqueda que permite priorizar la carga de imágenes. Estas técnicas son solo el comienzo de la optimización del rendimiento.

Y se puede hacer muy fácilmente. Puedes usar el atributo de carga de la imagen. También puedes usar paquetes como lozat o el observador de intersección. Pero una pequeña cosa que noté recientemente en los docs de Mozilla es que la carga diferida o el valor diferido para el atributo de carga de la imagen se explica como que la imagen se cargará cuando sea necesario. Así que esto no es del todo exactamente cierto, porque, bueno, es cierto, pero no te da el contexto completo de la carga diferida. Porque lo que noté en muchas aplicaciones web como producción, y hablaré de ello en un segundo, es que hay una mayoría de páginas web o, por ejemplo, sitios web de comercio electrónico que están cargando diferidamente la pintura de contenido más grande.

Así que para darte más contexto, la pintura de contenido más grande debería ser entregada lo más pronto posible. Y cuando estamos usando la carga diferida, estamos añadiendo la solicitud de esta imagen al final del bucle de solicitud, lo que básicamente hace que se cargue más tiempo. Así que aquí, también ves la diferencia en el tamaño de las imágenes que se están ejecutando en el sitio web que está usando la carga diferida y no la está usando. Básicamente, como se muestra en el GIF con los gatos, podemos usarlo para diferir la carga o la solicitud de las imágenes hasta el punto en que realmente se necesiten. La carga diferida es parte de lo que llamo el patrón diferido. Y básicamente, lo llamo así. No estoy seguro si esto es un patrón. Y soy realmente un gran fan de este patrón. Este soy yo con dos de mis gatos el último domingo perezoso. Así que soy un gran fan de ello. Y la idea detrás de tener un patrón tan perezoso es usar las técnicas que están relacionadas con diferir, hacer alguna funcionalidad hasta que realmente se necesite. Esta es como, hice esta definición. Así que puedes leer sobre este patrón perezoso en mi DEVTOOL, en mi artículo sobre la mejora del rendimiento de NAX con el patrón perezoso. Y como parte de este patrón perezoso, lo que viene con él es, por supuesto, la carga diferida, como mencioné. Componentes dinámicos de importación perezosa, composables de búsqueda de datos perezosos, y también la hidratación perezosa. Esta configuración es un gran paquete de Harlan, que también es miembro del equipo central de NAX, así que deberías echarle un vistazo.

¿Qué sigue? También hay una prioridad de búsqueda, que es una característica experimental que te permite instruir al navegador cuándo debe buscar la solicitud. Así que básicamente puedes usarlo para decirle al navegador, OK, esta es súper necesaria, y debería ser cargada lo más pronto posible. Así que podemos decir para el, digamos el banner de inicio de nuestra página de inicio, deberíamos usar la prioridad de búsqueda para permitir que se cargue lo más rápido posible. Y podemos hacerlo muy fácilmente con la etiqueta de imagen. Solo establece la prioridad de búsqueda en alto para las imágenes que queremos buscar lo más pronto posible. Y también podemos instruir al navegador para que ciertas imágenes sean buscadas más tarde. Así que esto es solo la punta del iceberg en la mejora del rendimiento.

9. Importancia de las Imágenes Optimizadas

Short description:

Al usar imágenes optimizadas, ofreces una mejor experiencia a los usuarios, haciéndolos sentir geniales. Gracias por estar aquí y escucharme. Si quieres encontrarme en Internet, busca a Jakub Andrewski. Soy Barosz en GitHub. Gracias.

Porque hay muchas cosas que deberíamos observar. Y estoy seguro de que justo después de mí estará Filip, quien te mostrará algunas ideas sobre el performance web también. Y si estás interesado en aprender más sobre este tema, tengo esta serie en DevTool sobre el performance de NAX, específicamente de NAX. Y también recientemente comencé a escribir sobre el performance web. Entonces, el uso de IPX, que mencioné anteriormente, la lista de verificación de performance web, son cosas que deberías observar mientras intentas hacer que tu sitio web sea más eficiente.

Y tengo una pequeña solicitud final para ti para terminar mi charla. Al usar imágenes optimizadas básicamente ofreces una mejor experiencia a los usuarios. Esto es genial. Porque a los usuarios les gusta ser entretenidos, les gusta tener una experiencia genial. Entonces, ¿quién no quiere ser genial, verdad? Bueno, muchas gracias por estar aquí y escucharme. Si quieres encontrarme en algún lugar de Internet, puedes buscar a Jakub Andrewski. Es más fácil pronunciar mi apellido de esta manera que el original. Con una pequeña diferencia en GitHub, soy Barosz. Gracias. Gracias. Me encantan tus ideas sobre el performance web. Siéntete libre.

10. Técnicas de Carga de Imágenes y Optimización de SVG

Short description:

En un proyecto, teníamos dos imágenes diferentes como activos, cargando la primera y reemplazándola por una de mayor calidad. Esta técnica es parte de la carga progresiva, donde se muestra algo al usuario lo antes posible, como un marcador de posición o cargador, y luego se reemplaza por la imagen real. Otra idea es mostrar una matriz de imágenes simples y reemplazarla por el control deslizante real cuando se carga la página. En cuanto a la optimización de SVG, hay paquetes como SVGO que eliminan espacios en blanco y optimizan el archivo. Cloudinary funciona con Vue y hay planes para integrarlo con Vue también.

Bueno, necesito sacar mi teléfono, pero antes de eso, en realidad tengo una pregunta. Hace un par de años, en un proyecto, teníamos un componente especial para cargar imágenes, y siempre teníamos dos imágenes diferentes como activos. Una era de resolución completa y la otra resolución era, no sé, algo como 50X, 50 píxeles o 100X100, que era extremadamente pequeño. Luego siempre cargábamos la primera, mostrábamos esa, que era solo borrosa, y luego cuando se obtenía la más grande, obviamente la reemplazábamos por una de mejor calidad. ¿Qué opinas de esa técnica? Es una buena idea en general, y también es parte de algo que se llama carga progresiva. Si te gustaría revisar este concepto también. Por cierto, el concepto de la carga progresiva es que muestras algo al usuario, como, lo antes posible. Entonces, la primera pintura significativa, la pintura de contenido más grande, y cosas así. Puede ser incluso un marcador de posición, puede ser incluso un cargador. No necesita ser una imagen, puede ser un cargador. Y luego, con el tiempo, lo reemplazas por la imagen real. Incluso escuché a uno de los chicos de la comunidad de Vue mencionar otra idea, que era sobre los controles deslizantes. Entonces, como una galería de imágenes, digamos. Porque generalmente usan JavaScript para la galería, las bibliotecas comunes. Entonces, lo que recomendó es que, en lugar de cargar el control deslizante desde el principio, porque generalmente el control deslizante llega, por ejemplo, en la página de inicio. Entonces, tener algo que dependa de JavaScript en la página de inicio que debería cargarse lo antes posible no es generalmente una buena cosa. Entonces, lo que recomendó es mostrar una matriz de imágenes, solo imágenes simples, y luego cuando la página se carga, reemplace esta matriz de imágenes con el control deslizante real. Entonces, esto también puede ser un truco, diría. Sí, genial. Tiene mucho sentido. Genial. Ahora pasemos a nuestras preguntas. ¿Qué hay de optimizar los SVG? Oh, para ser honesto, no tengo experiencia en eso. Estoy seguro de que hay paquetes para trabajar con los SVG en Vue y Vite que hacen parte de la optimización por nosotros. Creo que es SVGO, este plugin como este, pero no tengo mucha experiencia con SVG, así que no estoy seguro. En realidad, usamos antes, creo que puedes buscar en Google SVGOptimizer y luego simplemente pones tu SVG allí, el que te dan los diseñadores, y simplemente elimina todos los espacios en blanco, optimiza todo, y a veces ahorras hasta el 80-90% de espacio. Creo que es incluso algo como SVGOMG, algo así. Creo que es de Jake Archibald, algo similar.

Ok, genial. La segunda es, ¿Cloudinary también funciona con Vue? Si no, ¿hay planes para integrarlo? Sí, funciona con Vue, pero con Vue también.

11. Refactorización de Vue 3 e Imágenes Subidas por el Usuario

Short description:

Para Vue 3, planeamos refactorizar el módulo para Next en un plugin de Vue. Las consideraciones para optimizar las imágenes subidas por el usuario incluyen disminuir la calidad, cambiar el formato y optimizar los tamaños. Cloudinary tiene un nivel gratuito con limitaciones, como la no eliminación de fondos. Existe una alternativa de código abierto llamada IPX que se puede utilizar localmente sin un servicio de terceros.

Para Vue 3, no estoy al tanto de la biblioteca todavía, pero planeamos con Kolby, básicamente después de desarrollar el módulo para Next, refactorizarlo en la próxima versión en un plugin de Vue, de modo que tendremos la misma experiencia para las aplicaciones de Vue sin tener realmente el módulo de Next. Así que ahora solo está en Next, pero la idea es extraerlo a Vue y luego usarlo en Next como un plugin de Vue.

¡Genial! La siguiente es, ¿hay consideraciones especiales para optimizar las imágenes subidas por un usuario? Diría que las mismas, como tratar de, tal vez porque los usuarios tienden a, ya sabes, poner la mejor calidad de imagen, porque la están usando, así que a veces es como calidad del 100% y se utiliza luego como portada de algo o se recorta a un tamaño más pequeño, así que tal vez disminuir la calidad de la imagen, cambiar el formato seguro, porque si el usuario usa PNG, como has visto en la demo, es como 10 veces más grande. Así que si es posible, solo trata de optimizar el formato, los tamaños también, y, sí, la calidad. Nombraría esos tres seguro.

Tiene sentido, por supuesto, desde el lado del desarrollador, pero como usuario final siempre odio cuando simplemente subo una imagen de alta calidad y arruinan todo. Es como en Messenger, ¿verdad? Subes la imagen y la calidad es tan mala que ni siquiera puedes verte a ti mismo en la imagen. Oh, pero todos sabemos las razones de eso. La siguiente pregunta, ¿es Cloudinary gratis? Sí, sí, tienen un nivel gratuito. El que estaba usando durante la demostración es completamente gratis. Por supuesto, hay algunas limitaciones como con todas las herramientas, como con los CMS, con los motores de búsqueda. Hay algunas limitaciones para el nivel gratuito. Por ejemplo, en el caso del nivel gratuito en Cloudinary, lo que no obtienes en una cuenta gratuita es, por ejemplo, eliminar el fondo de la imagen. Porque si vas y visitas el sitio web de Colby, él lo hizo para el Next Cloudinary, el mismo enfoque que te mostré, pero para Next.js. Está utilizando la eliminación de fondo porque tiene la cuenta premium, ya que está trabajando allí. Yo tengo la cuenta gratuita, así que básicamente, no puedo hacer la eliminación de fondo. Cuando intentas enviar una solicitud con el parámetro de eliminación de fondo en la solicitud, simplemente te dirá que tu cuenta no es adecuada para eliminar el fondo, así que cosas así. En resumen, sí, es gratis, y diría que el plan es bastante generoso. Para aplicaciones más pequeñas como un portafolio, esto está completamente bien. Para usarlo en una aplicación de producción como enterprise, el nivel gratuito no es suficiente seguro. Así que eres un embajador, y no te dieron una cuenta PRO. Creé esta cuenta mucho antes. Aún no he solicitado la cuenta para los embajadores, pero ese es el plan. Sí, lo conseguirás. Solo bromeaba.

La siguiente es, ¿existe una alternativa de código abierto y autohospedada a Cloudinary? Sí, básicamente el IPX, el que mostré, este es de código abierto, puedes simplemente descargarlo. También se utiliza en NextImage. Así que en NextImage también puedes usar Cloudinary como proveedor, pero por defecto utiliza IPX para que puedas usarlo localmente sin ningún servicio de terceros para optimizar la imagen.

OK, gracias.

12. Impacto de las Fallas de Servicio

Short description:

¿Qué sucede cuando Cloudinary o cualquier otro servicio de terceros falla? Si nuestro sitio web depende de ese servicio, también se caerá. Esto se aplica a las plataformas de CMS y comercio electrónico también. Implementar soluciones alternativas, como el uso de imágenes de directorio local o marcadores de posición, puede ayudar a mitigar el impacto de las fallas de servicio.

Ahora tenemos una pregunta que a todo desarrollador le gusta. ¿Qué sucede cuando Cloudinary falla? Diría que lo mismo que con cualquier otro servicio de terceros. Si nuestro sitio web es como, este servicio de terceros es crucial, el sitio web estará caído. Es la dura verdad. Pero puede funcionar de la misma manera si basamos nuestra aplicación en, por ejemplo, el CMS o el comercio electrónico. ¿Qué sucede ahora si tienes un sitio web de comercio electrónico que el front-end es solo el front-end y la plataforma de comercio electrónico se cae? Digamos que Shopify por alguna razón está caído. Básicamente, nuestra tienda no está funcionando. Por supuesto, puedes implementar algún tipo de solución alternativa. Si la solicitud falla, podemos simplemente hacer una solución alternativa a un directorio local donde podríamos tener algunas imágenes o imágenes de marcador de posición. Con el CMS también. Si tu página está basada en CMS, alimentada por CMS, si el CMS no funciona, tu sitio web tampoco funciona. Sí. 100%. Y hagamos una pregunta final ahora. Entonces, además de las imágenes, algunas de las cosas que mencioné en el patrón perezoso, como la obtención de los data cuando se necesitan, por supuesto, las cosas que mencioné al principio de la charla, por lo que las optimizaciones en el backend. Entonces, si puedes, por ejemplo, unir algunas solicitudes, digamos que el usuario está haciendo tres solicitudes para obtener un data. Quizás puedas unir esas solicitudes y luego devolver los data al usuario. Quizás si tus usuarios, tus clientes, tienen una conexión a internet lenta, puedes simplemente usar aplicaciones SSR y renderizar los data en el servidor y luego devolver al usuario el resultado real para que no necesite disparar cinco solicitudes. Puede simplemente disparar una y obtener los data de vuelta. Entonces, en realidad hay muchas cosas que puedes hacer. Y creé esta lista de verificación, así que si estás interesado, échale un vistazo. Es como una lista de verificación de performance de front-end. Es realmente fácil de encontrar. Sí, esta es una pregunta de la que probablemente podrías hablar durante horas y horas. Gracias por ayudarnos a mejorar la user experience. Fue una charla increíble. Hagan ruido por Jakub.

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

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
Bienvenido a Nuxt 3
Vue.js London Live 2021Vue.js London Live 2021
29 min
Bienvenido a Nuxt 3
Top Content
Nux3 has made significant improvements in performance, output optimization, and serverless support. Nuxt Bridge brings the Nitro engine for enhanced performance and easier transition between Nuxt 2 and Nuxt Read. Nuxt 3 supports Webpack 5, Bytes, and Vue 3. NextLab has developed brand new websites using Docus technology. Nuxt.js is recommended for building apps faster and simpler, and Nuxt 2 should be used before migrating to Nuxt 3 for stability. DOCUS is a new project that combines Nuxt with additional features like content modules and an admin panel.
Un Año en Vue 3
Vue.js London Live 2021Vue.js London Live 2021
20 min
Un Año en Vue 3
Top Content
Vue 3 has seen significant adoption and improvements in performance, bundle size, architecture, and TypeScript integration. The ecosystem around Vue 3 is catching up, with new tools and frameworks being developed. The Vue.js.org documentation is undergoing a complete overhaul. PNIA is emerging as the go-to state management solution for Vue 3. The options API and composition API are both viable options in Vue 3, with the choice depending on factors such as complexity and familiarity with TypeScript. Vue 3 continues to support CDN installation and is recommended for new projects.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Vue: Actualizaciones de Características
Vue.js London 2023Vue.js London 2023
44 min
Vue: Actualizaciones de Características
Top Content
The Talk discusses the recent feature updates in Vue 3.3, focusing on script setup and TypeScript support. It covers improvements in defining props using imported types and complex types support. The introduction of generic components and reworked signatures for defined components provides more flexibility and better type support. Other features include automatic inference of runtime props, improved define emits and defined slots, and experimental features like reactive props destructure and define model. The Talk also mentions future plans for Vue, including stabilizing suspense and enhancing computer invalidations.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
Workshop
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
Usando Nitro - Construyendo una Aplicación con el Último Motor de Renderizado de Nuxt
Vue.js London Live 2021Vue.js London Live 2021
117 min
Usando Nitro - Construyendo una Aplicación con el Último Motor de Renderizado de Nuxt
Top Content
Workshop
Daniel Roe
Daniel Roe
Construiremos un proyecto Nuxt juntos desde cero usando Nitro, el nuevo motor de renderizado de Nuxt, y Nuxt Bridge. Exploraremos algunas de las formas en que puedes usar y desplegar Nitro, mientras construimos una aplicación juntos con algunas de las restricciones del mundo real que enfrentarías al desplegar una aplicación para tu empresa. En el camino, dispara tus preguntas hacia mí y haré lo mejor para responderlas.
Vue3: Desarrollo Moderno de Aplicaciones Frontend
Vue.js London Live 2021Vue.js London Live 2021
169 min
Vue3: Desarrollo Moderno de Aplicaciones Frontend
Top Content
Workshop
Mikhail Kuznetsov
Mikhail Kuznetsov
Vue3 fue lanzado a mediados de 2020. Además de muchas mejoras y optimizaciones, la principal característica que trae Vue3 es la API de Composición, una nueva forma de escribir y reutilizar código reactivo. Aprendamos más sobre cómo usar la API de Composición de manera eficiente.

Además de las características principales de Vue3, explicaremos ejemplos de cómo usar bibliotecas populares con Vue3.

Tabla de contenidos:
- Introducción a Vue3
- API de Composición
- Bibliotecas principales
- Ecosistema Vue3

Requisitos previos:
IDE de elección (Inellij o VSC) instalado
Nodejs + NPM
Depuración del Rendimiento de React
React Advanced 2023React Advanced 2023
148 min
Depuración del Rendimiento de React
Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Veía una interacción lenta, probaba una optimización aleatoria, veía que no ayudaba, y seguía probando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Hacía una grabación en Chrome DevTools o React Profiler, la examinaba, intentaba hacer clic en cosas al azar, y luego la cerraba frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos cómo analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, cubriremos el rendimiento de interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Embarcándonos en una aventura con Nuxt 3, Motion UI y Azure
JSNation 2022JSNation 2022
141 min
Embarcándonos en una aventura con Nuxt 3, Motion UI y Azure
Workshop
Melanie de Leeuw
Melanie de Leeuw
¡Nos encantan las aplicaciones web fáciles de crear y desplegar! Entonces, veamos qué puede hacer una pila tecnológica muy actual como Nuxt 3, Motion UI y Azure Static Web Apps. Podría ser perfectamente un trío de oro en el desarrollo web moderno. O podría ser una hoguera de errores y problemas. De cualquier manera, será una aventura de aprendizaje para todos nosotros. Nuxt 3 se lanzó hace apenas unos meses y no podemos esperar más para explorar sus nuevas características, como su compatibilidad con Vue 3 y el Motor Nitro. Agregamos un poco de estilo a nuestra aplicación con la biblioteca Sass Motion UI, porque el diseño estático está pasado de moda y las animaciones vuelven a estar de moda.Nuestra fuerza impulsora de la pila será Azure. Las aplicaciones web estáticas de Azure son nuevas, casi listas para producción y una forma ingeniosa y rápida para que los desarrolladores desplieguen sus sitios web. Así que, por supuesto, debemos probar esto.Con algunas Azure Functions esparcidas por encima, exploraremos lo que puede hacer el desarrollo web en 2022.