CursosEmpresasBlogLiveConfPrecios

Aplicando Lazy loading

Clase 24 de 29 • Curso de Manipulación del DOM

Clase anteriorSiguiente clase

Contenido del curso

DOM y Web API
  • 1
    Y entonces nació internet...

    Y entonces nació internet...

    02:23
  • 2

    Accede a la versión más actualizada de este contenido

    00:14
  • 3
    ¿Qué es el DOM?

    ¿Qué es el DOM?

    02:39
  • 4
    Web APIs modernas

    Web APIs modernas

    03:17
Operaciones básicas
  • 5
    Leer nodos

    Leer nodos

    09:31
  • 6
    NodeLists vs Array

    NodeLists vs Array

    03:46
  • 7
    Crear y agregar

    Crear y agregar

    15:47
  • 8
    Otras formas de agregar

    Otras formas de agregar

    06:55
  • 9
    Atributos y propiedades

    Atributos y propiedades

    05:12
  • 10
    Eliminar nodos

    Eliminar nodos

    09:31
  • 11
    Operaciones en lote

    Operaciones en lote

    06:52
Workshop 1: Fetch
  • 12
    Presentación del proyecto

    Presentación del proyecto

    01:10
  • 13
    Descargando información y creando nodos

    Descargando información y creando nodos

    18:36
  • 14
    Enriqueciendo la información

    Enriqueciendo la información

    10:53
  • 15
    Usando la API de internacionalización del browser

    Usando la API de internacionalización del browser

    12:14
  • 16
    Comparte el resultado

    Comparte el resultado

    02:18
Eventos
  • 17
    Reaccionar a lo que sucede en el DOM

    Reaccionar a lo que sucede en el DOM

    13:58
  • 18
    Event propagation

    Event propagation

    12:08
  • 19
    Event delegation

    Event delegation

    05:32
Workshop 2: Lazy loading
  • 20
    Presentación del proyecto

    Presentación del proyecto

    03:34
  • 21
    Nuestro propio plugin Lazy Loading

    Nuestro propio plugin Lazy Loading

    08:32
  • 22
    Creando las imagenes con JavaScript

    Creando las imagenes con JavaScript

    17:33
  • 23
    Intersection Observer

    Intersection Observer

    14:21
  • 24
    Aplicando Lazy loading

    Aplicando Lazy loading

    13:07
  • 25
    Comparte el resultado

    Comparte el resultado

    03:17
Workshop 3
  • 26
    Proyectos propuestos

    Proyectos propuestos

    04:17
Librerías relacionadas
  • 27
    ¿Y jQuery?

    ¿Y jQuery?

    03:41
  • 28
    ¿Y JSX?

    ¿Y JSX?

    09:40
Conclusiones
  • 29
    Conclusiones

    Conclusiones

    01:56
    Douglas Lovera

    Douglas Lovera

    student•
    hace 4 años

    Ya el Lazy Loading es nativo en HTML:

    <img src="imagen.png" loading="lazy">

    Pero todavía no está 100% soportado por los navegadores. Referencia: can i use

      Jose Ever Muñoz Muñoz

      Jose Ever Muñoz Muñoz

      student•
      hace 2 años

      waooo que util

      Henry Alexander Velásquez Rosas

      Henry Alexander Velásquez Rosas

      student•
      hace 2 años

      El profe Fernando Herrera lo menciona en este video [Lazy loading](https://www.youtube.com/shorts/u\_iWpYEDSdc)

    Sebastián Buitrago

    Sebastián Buitrago

    student•
    hace 5 años

    no les pasa que ven algo asi y les dan ganas de aplicarlo a todos los proyectos de los cursos anteriores

      Guadalupe Monge Barale

      Guadalupe Monge Barale

      student•
      hace 4 años

      Todo el tiempo :)

    Diego Rodriguez

    Diego Rodriguez

    student•
    hace 5 años

    Hay varias maneras de obtener la imagen del container sin necesidad de usar querySelector, como estas:

    • container.childNodes[0] // childNodes devuelve un nodeList con todos los hijos, tomamos el primero que es la imagen.

    • container.children[0] // Devuelve un HTMLCollection, es similar al nodeList, así que también podemos tomar el primer elemento que sería la imagen.

    • container.firstChild = Es un atributo que contiene el primer elemento hijo del container, que sería en este caso la imagen. IMPORTANTE: Este método devuelve el primer elemento del container, por lo que si hay comentarios o texto como primer elemento devolverá esto y no el nodo.

    • container.firstElementChild = Es muy similar al fisrtChild, pero este solamente devuelve nodos HTML ignorando cualquier comentario o texto.

      Luis Fernando Rodriguez Boett

      Luis Fernando Rodriguez Boett

      student•
      hace 3 años

      Gracias por compartir! :star2:.

      Jose Ever Muñoz Muñoz

      Jose Ever Muñoz Muñoz

      student•
      hace 2 años

      muy util a tener en cuenta

    Beto Martinez

    Beto Martinez

    student•
    hace 5 años

    Woooow, esta clase me voló la cabeza, uno siempre piensa que sabe JavaScript hasta que llegan estos cursos increíbles.

    Diego Andres Cardenas Caro

    Diego Andres Cardenas Caro

    student•
    hace 5 años

    Como ya se habia comentado el lazy loading ya funciona nativamente aunque no es soportado por todos los navegadores. Por supuesto que crear nuestro propio observer nos da mas control sobre el codigo y sobre el comportamiento deseado.

    En mi codigo uso el lazy-loading nativo si el navedador lo soporta, si no uso el observer de la clase.

    lazy-load.png
      Josue Cerron Tuesta

      Josue Cerron Tuesta

      student•
      hace 3 años

      Gracias bro!

    Andres Felipe Pinchao Ramirez

    Andres Felipe Pinchao Ramirez

    student•
    hace 5 años

    Mis Apuntes :D index.js .

    import {registerImage} from './lazy' const maximun = 121; const minimun = 1; const random = () => Math.floor(Math.random()*(maximun - minimun)+ minimun) const createImageNode = () => { const container = document.createElement('div'); container.className = "p-4"; const imagen = document.createElement('img'); imagen.className = "mx-auto"; imagen.width = '320'; /* 1. forma Si no queremos que una imagen cargue tenemos que eliminar la parte que la carga ya que esta linea trae la url de la imagen por lo tanto la hara cargar siempre. Pasaremos este trabajo de cargar la imagen al lazy loading 2.forma La informacion de la url se la dejaremos a la imagen pero utilizaremos el dataset que es una propiedad de html Dataset se utiliza mucho para comunicar informacion entre html y js, es muy comun tener diferentes data-? para comunicar la info */ //imagen.src = `https://randomfox.ca/images/${random()}.jpg`; // Esto agregara a la propieda data-src de mi imagen la url imagen.dataset.src = `https://randomfox.ca/images/${random()}.jpg` container.appendChild(imagen) return container }; const mountNode = document.getElementById('imagenes'); const addboton = document.querySelector('button'); const addImage = () => { const newImage = createImageNode(); mountNode.append(newImage); registerImage(newImage); } addboton.addEventListener('click', addImage);

    . lazy.js

    const isIntersecting = (entry) =>{ return entry.isIntersecting } const loadImage = (entry) =>{ const container = entry.target; /*obtenemos la imagen a partir del contenedor y podremos acceder a dataset.src y obtener la url */ //const imagen = container.querySelector('img'); //otra forma es obteniendo el hijo con las propiedades firstChil o lastChild // que en este caso serian las imagenes que son los hijos de nuestro contenedor const imagen = container.firstChild; const url = imagen.dataset.src; //cargamos la imagen poniendo una url valida imagen.src = url; /* 1. forma En la accion le agregaremos la propiedad src a nuestra imagen Asi nos aseguramos de que solo se pondra la url real en el momento en el que se ejecuta la accion que solo pasa cuando el elemento es visible en pantalla imagen.src = `https://randomfox.ca/images/${random()}.jpg`; */ observer.unobserve(container); } const observer = new IntersectionObserver((entries) => { entries .filter(isIntersecting) .forEach(loadImage) }) export const registerImage = (imagen) => { observer.observe(imagen) }```
      Jimmy Buriticá Londoño

      Jimmy Buriticá Londoño

      student•
      hace 5 años

      Me ha servido tu código fuente, gracias por compartir.

      FELIX EVR

      FELIX EVR

      student•
      hace 5 años

      .

    Anfernee Valera

    Anfernee Valera

    student•
    hace 4 años

    Cuando conocí dataset, sabia que sería amor a primera vista♥ jjajaja. Es que piensenlo, crear tus propios atributos? Te deja oportunidad para cualquier cosa.

    JOSE GABRIEL CASTILLO MOSQUERA

    JOSE GABRIEL CASTILLO MOSQUERA

    student•
    hace 4 años

    Estudiare mas esta clase ya que es muy importante pero también difícil de entender

    Brandon Argel Verdeja Domínguez

    Brandon Argel Verdeja Domínguez

    student•
    hace 4 años

    Dataset

    Los atributos data-* son muy utilizados para guardar información, a la que después podemos acceder con JavaScript utilizando la propiedad dataset.

    También se pueden guardar desde JavaScript añadiendo propiedades como si fuera una clase.

    <!-- Desde el HTML --> <div id="nodo" data-saludo="Hola" data-saludo-dos="Hello"></div>
    // Para acceder a los datos que guardamos desde JavaScript const div = document.getElementById("nodo"); console.log(div.dataset) // DOMStringMap {saludo: 'Hola', saludoDos: 'Hello'} // Nos regresa un DOMStringMap como objeto con los datos que guardamos const saludo = div.dataset.saludo; // Hola // Si te fijas los datos que tienen más de un guión los guarda como camelcase 🐫 const saludoDos = div.dataset.saludoDos; // Hello // Agregar más valores al dataset desde JavaScript div.dataset.saludoTres = "Salut"
    Roberto Carlos Martinez Loredo

    Roberto Carlos Martinez Loredo

    student•
    hace 5 años

    Botón eliminar verificando que el mountNode tenga hijos:

    const removeButton = document.querySelector('#remove'); removeButton.className = 'text-white px-3 py-2 rounded-lg bg-red-900 focus:outline-none'; const removeImage = () => { if (mountNode.hasChildNodes()) { const container = mountNode.lastElementChild; mountNode.removeChild(container); } } removeButton.addEventListener('click', removeImage);
    Camilo Perilla

    Camilo Perilla

    student•
    hace 5 años

    Y si de inicio la imagen tiene un display de none que cambia a block cuando entre al viewport. ¿Qué approach seria mejor? Del lado del rendimiento

      Jonathan 🦑 Alvarez

      Jonathan 🦑 Alvarez

      teacher•
      hace 4 años

      Muy buena pregunta!

      Chrome ignorará las imágenes cuyo padre esté oculto, sin embargo no estaría seguro de cómo se comportan lo demás navegadores. No me sorprendería ver que no es así e igual la descargan así no hay que mostrarla.

      Así que solo para estar muy seguro no utilizaría esa opción.

      Y si dejamos eso de un lado, en términos de rendimiento la diferencia no debería ser mucha :)

    Hector Andres Erira Huertas

    Hector Andres Erira Huertas

    student•
    hace 5 años

    en mi caso yo intercepte directamente la imagen en el entry

    const isIntersecting=(entry)=>{ return entry.isIntersecting; } const loadImage=(entry)=>{ const imagen=entry.target; const url = imagen.dataset.src; //imagen.src=url; imagen.src=url; observer.unobserve(imagen) } const observer=new IntersectionObserver((entries)=>{ entries.filter(isIntersecting).forEach(loadImage); }) export const registerImage=(imagen)=>{ //IntersectionObserver-->observerImagen observer.observe(imagen); }
    fermin martin

    fermin martin

    student•
    hace 5 años

    👏👏Uau! Excelente el uso de las tabs de devTools incluyendo el debugger

      Sebastián Buitrago

      Sebastián Buitrago

      student•
      hace 5 años

      bro eso es solo un pedacito del Curso de Debugging con Chrome DevTools

    Eduardo Diaz

    Eduardo Diaz

    student•
    hace 5 años

    ¿Alguien sabe como hizo para poder editar la constante "accion" y el parametro "accion" al mismo tiempo? es algun pluggin o presionando algun comando? gracias por el dato.

      Orlando Manuel Mendoza Vargas

      Orlando Manuel Mendoza Vargas

      student•
      hace 5 años

      Que tal? No amigo, es simplemente un atajo de teclado. Al sombrear una palabrar, pongamos de ejemplo una variable llamada number, al sombrear esta variable y presionas las teclas Control + D se seleccionara automaticamente otro lugar donde esté esa misma variable.

      Puedes pulsar varias veces esta combiacion de teclas de manera que si hay 10 veces en donde aparece esa variable dentro de un mismo archivo pulsas esas teclas 10 veces y podras editar de manera automatica la misma variable en los lugares donde aparezca 👀.

      Recuerda: "Control + D"

      Jonathan 🦑 Alvarez

      Jonathan 🦑 Alvarez

      teacher•
      hace 5 años

      Hey hey! Para complementar lo que dice Orlando, aquí hay más formas de crear multi cursores en VSCode: https://tahoeninjas.blog/2019/03/30/multi-cursor-editing-in-visual-studio-code/

      Vale la pena invertir en aprender, es un boost en la productividad 🚀

    Isaac Hernandez Resendiz

    Isaac Hernandez Resendiz

    student•
    hace 4 años

    😎Mejorando workshop 1 con dataset y sweetalert.

    En el workshop anterior intente hacer algo mas. Quería que cuando hiciera click en el titulo del aguacate se mostrara un alert con la descripción de aguacate.

    Tenia claro que para mostrarlo iba a usar sweetalert para mostrar un alert nice🤗. Después sabia que podía traer un solo elemento de la API con su id.

    🤔Todo estaba claro, pero no sabía como grabar ese id en algún lugar cercano o en el mismo title del aguacate para hacer la petición con ese id. Es hasta esta clase que encontré la solución. Aquí dejo mi resultado 💚. Y invito a que intenten hacerlo.

    ![](

    swaltWihtDataset.PNG

    Juan Guillermo Perez Cardozo

    Juan Guillermo Perez Cardozo

    student•
    hace 3 años

    Este curso esta en mi top5 de los mejores que he tomado en platzi. siento que he aprendido mucho. excelente profesor

    Isaac Everaldo Molina Ponce

    Isaac Everaldo Molina Ponce

    student•
    hace 4 años

    Aquí esta mi aporte utilizando la API https://randomfox.ca/floof

    Index.js

    import {subscribeImageObserver} from './lazy' console.log('Actitud de Viernes :)') function createImageNode() { const img_container = document.createElement('div'); img_container.className="p-4"; const img = document.createElement('img'); img.className ="mx-auto"; img.width = "320"; img_container.appendChild(img); return img_container; } const mountNode = document.querySelector("#images"); const btnAgregar = document.getElementById("btnagregar"); const btnLimpiar = document.getElementById("btnlimpiar"); btnLimpiar.onclick = function(){ while(mountNode.firstChild){ mountNode.removeChild(mountNode.firstChild); } } btnAgregar.onclick = function(){ const nodo = createImageNode(); mountNode.appendChild(nodo); subscribeImageObserver(nodo); }

    Lazy.js

    const URL_RANDOMFOX = "https://randomfox.ca/floof"; async function ramdomUrlImagen(){ const request = await fetch(URL_RANDOMFOX); const response = await request.json(); return response.image; } const isIntersecting = (entry) => { return entry.isIntersecting; } const loadImage = async (entry) =>{ const nodo_container = entry.target; console.log("holis"); const url = await ramdomUrlImagen(); nodo_container.firstChild.src = url; observer.unobserve(nodo_container); } const observer = new IntersectionObserver((entries)=>{ entries.filter(isIntersecting).forEach(loadImage); }); export const subscribeImageObserver = (image) =>{ observer.observe(image); } /* Promise.allSettled([createImageNode()]).then((images)=>{ images.forEach((img) =>{ if(img.status === "fulfilled"){ mountNode.appendChild(img.value); } }); }); */
    Miguel Angel Choque Pacompia

    Miguel Angel Choque Pacompia

    student•
    hace 5 años

    Me perdi @-@

    Carlos S. Aldazosa

    Carlos S. Aldazosa

    student•
    hace 3 años

    lEl atributo loading de html hace lo mismo por detrás? O este usa otro metodo?

    Marcelo Vinicio Chavarría Ugalde

    Marcelo Vinicio Chavarría Ugalde

    student•
    hace 4 años

    ¿Cuál de las dos técnicas es mejor?

      Nilson Diaz

      Nilson Diaz

      student•
      hace 4 años

      Hey ! depende de que imagen estes renderizando, Si por ejemplo traes un grupo datos de una API y cada uno tiene su respectiva imagen lo mejor seria primero dejarla en el data-set para asi mas tarde tener acceso a la url correspondiente de esa imagen , ya que de otra forma si no guardas la url en algun lado cuando el lazy loading se aplique no vas a saber cual es la url que toca .

      En otro caso es si tienes alguna imagen que es fija en tu proyecto, tal vez la tengas en una carpeta de assets o en algun servicio de hosting , y sabes que siempre va ser esa imagen y no otra , ahi tal vez si puedes simplemente quemar la url en el codigo cuando vaya hacer lazy loading

      ya que no es dinamica como si trajeras datos de una API , es simplemente una imagen que tu sabes que va ahi.

      Espero te ayude !

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads