CursosEmpresasBlogLiveConfPrecios
Curso de Manipulación del DOM

Operaciones en lote

Curso de Manipulación del DOM

Contenido del curso

DOM y Web API

  • 1
    Y entonces nació internet...

    Y entonces nació internet...

    02:23 min
  • 2
    Accede a la versión más actualizada de este contenido

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

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

    ¿Qué es el DOM?

    02:39 min
  • 4
    Web APIs modernas

    Web APIs modernas

    03:17 min

Operaciones básicas

  • 5
    Leer nodos

    Leer nodos

    09:31 min
  • 6
    NodeLists vs Array

    NodeLists vs Array

    03:46 min
  • 7
    Crear y agregar

    Crear y agregar

    15:47 min
  • 8
    Otras formas de agregar

    Otras formas de agregar

    06:55 min
  • 9
    Atributos y propiedades

    Atributos y propiedades

    05:12 min
  • 10
    Eliminar nodos

    Eliminar nodos

    09:31 min
  • 11
    Operaciones en lote

    Operaciones en lote

    Viendo ahora

Workshop 1: Fetch

  • 12
    Presentación del proyecto

    Presentación del proyecto

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

    Descargando información y creando nodos

    18:36 min
  • 14
    Enriqueciendo la información

    Enriqueciendo la información

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

    Usando la API de internacionalización del browser

    12:14 min
  • 16
    Comparte el resultado

    Comparte el resultado

    02:18 min

Eventos

  • 17
    Reaccionar a lo que sucede en el DOM

    Reaccionar a lo que sucede en el DOM

    13:58 min
  • 18
    Event propagation

    Event propagation

    12:08 min
  • 19
    Event delegation

    Event delegation

    05:32 min

Workshop 2: Lazy loading

  • 20
    Presentación del proyecto

    Presentación del proyecto

    03:34 min
  • 21
    Nuestro propio plugin Lazy Loading

    Nuestro propio plugin Lazy Loading

    08:32 min
  • 22
    Creando las imagenes con JavaScript

    Creando las imagenes con JavaScript

    17:33 min
  • 23
    Intersection Observer

    Intersection Observer

    14:21 min
  • 24
    Aplicando Lazy loading

    Aplicando Lazy loading

    13:07 min
  • 25
    Comparte el resultado

    Comparte el resultado

    03:17 min

Workshop 3

  • 26
    Proyectos propuestos

    Proyectos propuestos

    04:17 min

Librerías relacionadas

  • 27
    ¿Y jQuery?

    ¿Y jQuery?

    03:41 min
  • 28
    ¿Y JSX?

    ¿Y JSX?

    09:40 min

Conclusiones

  • 29
    Conclusiones

    Conclusiones

    01:56 min
Tomar examen

Operaciones en lote

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

      Comentarios44

      Alex Maldonado

      Alex Maldonado

      Estudiante
      Hace 5 años
        Jimmy Buriticá Londoño

        Jimmy Buriticá Londoño

        Estudiante
        Hace 5 años
        Orangel Gonzalez

        Orangel Gonzalez

        Estudiante
        Hace 4 años
      Carlos Eduardo Gomez García

      Carlos Eduardo Gomez García

      Profesor
      Hace 5 años
        Jimmy Buriticá Londoño

        Jimmy Buriticá Londoño

        Estudiante
        Hace 5 años
        Alexis Steven Valderrama

        Alexis Steven Valderrama

        Estudiante
        Hace 5 años
      Fernando Quinteros Gutierrez

      Fernando Quinteros Gutierrez

      Estudiante
      Hace 5 años
        Camilo Gonzalez

        Camilo Gonzalez

        Estudiante
        Hace 5 años
      fermin martin

      fermin martin

      Estudiante
      Hace 5 años
      Andrés D Amelio

      Andrés D Amelio

      Estudiante
      Hace 5 años
      Daniloo Morales

      Daniloo Morales

      Estudiante
      Hace 5 años
        Jonathan 🦑 Alvarez

        Jonathan 🦑 Alvarez

        Profesor
        Hace 5 años
      Juan Gui Arenas

      Juan Gui Arenas

      Estudiante
      Hace 4 años
        Luis Fernando Rodriguez Boett

        Luis Fernando Rodriguez Boett

        Estudiante
        Hace 4 años
      Carlos Esteban León Pinilla

      Carlos Esteban León Pinilla

      Estudiante
      Hace 5 años
      Alfonso Aguilar Grimaldo

      Alfonso Aguilar Grimaldo

      Estudiante
      Hace 5 años
        Jonathan 🦑 Alvarez

        Jonathan 🦑 Alvarez

        Profesor
        Hace 5 años
        Alfonso Aguilar Grimaldo

        Alfonso Aguilar Grimaldo

        Estudiante
        Hace 5 años
      Sebastian Gonzalez

      Sebastian Gonzalez

      Estudiante
      Hace 5 años
      Juan Esteban Velez Muñoz

      Juan Esteban Velez Muñoz

      Estudiante
      Hace 5 años
      Juan Gui Arenas

      Juan Gui Arenas

      Estudiante
      Hace 4 años
      Santiago Reynoso Dunjo

      Santiago Reynoso Dunjo

      Estudiante
      Hace 5 años
      FELIX MIRANDA TERAN

      FELIX MIRANDA TERAN

      Estudiante
      Hace 5 años
        Nilson Diaz

        Nilson Diaz

        Estudiante
        Hace 5 años
        Gabriel Gomez

        Gabriel Gomez

        Estudiante
        Hace 5 años
      Sebastián Buitrago

      Sebastián Buitrago

      Estudiante
      Hace 5 años
        Jonathan 🦑 Alvarez

        Jonathan 🦑 Alvarez

        Profesor
        Hace 5 años
        Sebastián Buitrago

        Sebastián Buitrago

        Estudiante
        Hace 5 años
      Carlos Rubén Díaz Gutiérrez

      Carlos Rubén Díaz Gutiérrez

      Estudiante
      Hace 4 años
        Edgardo Andres Vargas Saenz

        Edgardo Andres Vargas Saenz

        Estudiante
        Hace 4 años
      Miguel Angel Reyes Moreno

      Miguel Angel Reyes Moreno

      Estudiante
      Hace 5 años
      Luis Fernando Rodriguez Boett

      Luis Fernando Rodriguez Boett

      Estudiante
      Hace 4 años
      Jesús David Mejía Orozco

      Jesús David Mejía Orozco

      Estudiante
      Hace 4 años
        Luis Alberto Ramirez Salas

        Luis Alberto Ramirez Salas

        Estudiante
        Hace 3 años
      Carlos Rodríguez

      Carlos Rodríguez

      Estudiante
      Hace 5 años
        Carlos Rafael Córdova Flores

        Carlos Rafael Córdova Flores

        Estudiante
        Hace 4 años
        Carlos Rodríguez

        Carlos Rodríguez

        Estudiante
        Hace 4 años

      Más info sobre Spread Operator (Operador de propagación)

      https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Spread_operator

      Ee3PlLlUMAARqT5.jpg

      Super este resumen del Spread Operator

      Con esto ahora si q entiendo mucho mas ...spread operator. Gracias por el aporte 👍🏻

      ¿Qué es el Spread Operator?

      Si te causa duda esto, no te preocupes, aquí te lo explico:

      El spread operator trabaja con arreglos y objetos, cuando lo pasamos en la llamada a una función, lo que hará es deconstruir ese arreglo y lo pasará como parámetros individuales para la función... aquí un ejemplo para que me entiendas:

      function funcionQueRecibeTresParametros(param1, param2, param3) { // code... } // La forma normal de llamarla sería: funcionQueRecibeTresParametros(1, 2, 3) // Pero, ¿qué pasa si tengo un arreglo que contiene esos 3 parámetros? const arregloDeParametros = [1, 2, 3] // Bueno, pues el spread operator puede deconstruir ese arreglo y poner cada elemento en donde irían mis parámetros :D! funcionQueRecibeTresParametros(...arregloDeParametros) // Eso sería equivalente a esto: funcionQueRecibeTresParametros(arregloDeParametros[0], arregloDeParametros[1], arregloDeParametros[2])

      Esto es muy útil cuando tenemos demasiados valores, recuerda, mientras menos modifiques el DOM, más eficiente será tu programa, y recordemos que tenemos a append() que nos permite insertar múltiples elementos en el DOM en una sola llamada, ¡aprovechémoslo! . Dato curioso: . En algunos frameworks de JavaScript como Vue, existe una cosa llamada el Virtual DOM, no es más que un objeto JavaScript que simula al DOM real, al menos en Vue, esto tiene un proxy que está observando por cambios en ese Virtual DOM para reaccionar y renderizar solo una pequeña parte en el DOM (en lugar de reescribirlo completamente)

      Muy buena explicación, me ha quedado claro. Gracias.

      Wow excelente resumen, y dato interesante, en el curso de Fundamentos de JS se menciona que el spread operator lo que hace es duplicar ese objeto o array para evitar modificar los valores que están en el array que se usó. Este tema es muy importante, ya que en frameworks como React, casi nunca queremos modificar el array u objeto original, sino que queremos dejar sus valores por default y trabajar con el duplicado. :)

      ⏩ Operaciones en lote

      Apuntes

      • Realizar mutaciones en el DOM tiene un costo
      • Cuando usamos frameworks y liberáis lo que más cuesta en estas librerías es estar haciendo operaciones en el DOM
      • Entre menos operaciones realicemos en el DOM especialmente escribir y eliminar cosas más rápidas sera el website

      Ejemplo: Escribir 100 inputs


      🙅‍♂️ No optimo

      for(let i = 0; i < 100; i++){ const node = document.createElement("input"); document.body.appendChild(node); // Modificamos 100 veces }

      👨‍💻 Optimo

      const nodes = []; for(let i = 0; i < 100; i++){ const node = document.createElement("input"); nodes.push(nodes) } document.body.append(...nodes); // Modificamos 1 sola vez

      RESUMEN: Mientras menos modificaciones hagamos en el DOM mayor sera el rendimiento del website

      Gracias por el aporte. Se te fue una s de mas en el parentesis del push, seria

      nodes.push(node)

      Hola! 😃 Un pequeño tip: Para hacer un salto de línea cuando estás en la consola del navegador: Shift + Intro

      Operaciones en lote

      Si bien podemos manipular el DOM siempre que podamos, operaciones que conlleven a creación, modificación o eliminación de nodos generan un costo en el rendimiento de nuestro sitio web, por lo que mientas menos operaciones hagamos en el DOM nuestro sitio responderá de forma más rápida. Un ejemplo claro es cuando queremos insertar muchos elementos en nuestro DOM, supongamos que tenemos una lista de registros y queremos agregar 100 items nuevos, veamos como podríamos realizarlo

      // Obtenemos la tabla const lista = document.querySelector(".items"); //Insertamos 100 registros for(let iter=1; iter<=100; iter++) { const item = document.createElement("li"); item.textContent = `Item ${iter}`; lista.appendChild(item); }

      Como ven obtuvimos la lista que mutaremos, luego realizamos el ciclo donde en cada iteración iremos creando un nuevo elemento li, que iremos insertando inmediatamente a la lista. Esto en términos de sintaxis, lógica y sentido esta bien, pero hay un pequeño detalle y son la cantidad de operaciones que se están realizando en el DOM, cuando ejecutamos appendChild obligamos al DOM a que se actualice, y cuando son muchos registros afecta la carga. Pero esto lo podemos solucionar de una forma más óptima donde haremos lo mismo pero haciendo una única actualización en el DOM, veamos como

      // Obtenemos la tabla const lista = document.querySelector(".items"); // creamos un auxiliar para guardar los elementos creados let items = []; //Insertamos 100 registros for(let iter=1; iter<=100; iter++) { const item = document.createElement("li"); item.textContent = `Item ${iter}`; // Insertamos el item en el auxiliar items.push(item); } // Ahora realizamos la actualización en el DOM lista.append(...items);

      Veamos el tiempo que tarda en ejecutarse cada fragmento de código, para esto usaremos el console.time y console.timeEnd que nos permite cronometrar el tiempo que tarda en ejecutarse ciertas instrucciones.


      appendChild


      appendChild.png

      append


      append.png

      Como podemos ver, usando appendChild obtuvimos un mayor tiempo de ejecución, esto quizás parece poco, pero ¿Que pasaría si son 10 mil elementos los que tenemos que agregar? ahí si se empiezan a notar diferencias considerables, y siempre hay que tomar en cuenta que mientras menos tarde es muchísimo mejor.

      La regla de oro Reducir al máximo las operaciones con el DOM, con métodos que involucren escribir, modificar y eliminar. así tendremos un mejor performance de nuestra aplicación! ⭐⭐⭐⭐⭐

      Exacto!

      Mi mente despues de esta clase :O :O

      mente.png

      Literalmente xD

      super! Sin embargo se me hizo extraño que no hablara de los document fragments. Estos nos permiten crear los nodos en memoria guardandolos todos en un document fragment y al final insertando el document fragment con todos los nodos, por ejemplo:

      te.png

      Esto me renderiza 150 párrafos con una sola modificación en el DOM.

      He visto el curso y hasta aquí me surge la duda, ¿cuál es el propósito de manipular el DOM en un caso práctico o un caso de la vida laboral?

      Hola @PongoAG

      Una muy buena duda!

      Acá hay unos ejemplos reales:

      • Cuando estás en Facebook, haces scroll hasta el final y puff se carga más contenido.
      • Cuando estás chateando y sin refrescar la página, puff aparece un nuevo mensaje.

      Eso es manipulación del DOM.

      En general: Todo lo dinámico, todo el movimiento que sucede en una página es porque el DOM se manipula de una forma u otra.

      Gracias Jona, ahora entiendo el funcionamiento y la importancia sobre aprender del DOM

      Para tener una buena optimizacion de la pagina "en especial si hay mucho contenido" lo mejor es manipular el DOM lo menos posible, podemos usar alternativas como usar arrays u objetos para que con pocas "llamadas" al DOM tengamos el mismo resultado que haciendo miles de llamadas, esto nos da mayor rendimiento y optimizacion

      Tambien podria hacerse con map

      const n = 100 const nodos = [...Array(n).keys()] const mapNodes = nodos.map(x => document.createElement('input')) document.body.append(...mapNodes)

      Spread Operator tambein sirve para unir 2 o mas objetos, Array y para traer solo los datos que necesitemos del Objeto o Array

      Es muy poderoso :D

      Algo interesante de leer es la Web Api Document Fragment. Cuando modificamos al documento insertándole nodos, por ejemplo agregándole 100 inputs, estamos recargando el árbol del DOM 100 veces. Si utilizamos esta Web Api, básicamente creamos un pedacito de documento al cual podemos agregarle todos los nodos que queramos y todo esto sin afectar al documento original. Luego, una vez finalizadas las operaciones, podemos agregar este fragmento directamente al DOM. Ejemplo MDN: HTML

      <ul id="list"></ul>

      JavaScript

      const list = document.querySelector('#list') const fruits = ['Apple', 'Orange', 'Banana', 'Melon'] //Creamos un nuevo fragmento de documento const fragment = new DocumentFragment() fruits.forEach((fruit) => { let li = document.createElement('li') li.innerHTML = fruit //Agregamos las frutas al fragmento creado fragment.appendChild(li) }) //Agregamos el fragmento al Document Object Model, lo recargamos 1 vez. list.appendChild(fragment)

      Pregunta inocente: ¿como pasar a la siguiente linea en la consola sin ejecutar el codigo y mantener la identación?

      Hey ! Puedes hacerlo presionando shift+ Enter , aunque en la consola tendras que indentar tu mismo

      Hola, eso lo puedes hacer con shift + enter. O al menos eso me sirve a mí en google chrome.

      hablando de que manipular el dom afecta el rendimiento, cuanto mas lo afecta crear uno virtual ya que normalmente los frameworks trabajan asi, y aunque no entiendo porque los frameworks no manipulan el dom directamente

      Buenísima pregunta @jasba24!

      Precisamente por eso se utiliza la estrategia del Virtual DOM.

      Como hacer operaciones en el DOM es tan costoso, lo que hace el Virtual DOM es recopilar todas las actualizaciones posibles (batch update) para encontrar el número mínimo de operaciones que logran ese resultado.

      De esa forma se garantiza que cada que se manipula el DOM, el framework/ librería lo hace de la forma más óptima posible.

      Gracias por responder profe,

      ¿Por qué en el primer ejemplo se usa appendChild y en el segundo append?

      Hola carlosrubendg, recordemos que hay una diferencia entre appendChild y append.

      • appendChild es una función del DOM, mientas que append en una función de JavaScript Para que entiendas mejor, imagina que quieres insertar algo dentro de un div desde tu HTML.
      document.getElementById("div").append("Hello");
      • Ahora que pasa si intentas hacer eso mismo, pero con appendChild
      document.getElementById("div").appendChild("Hello");
      • Tu consola mostrara: Uncaught TypeError: Failed to execute ‘appendChild’ on ‘Node’: parameter 1 is not of type ‘Node’.
      • ¿Por qué? Porque la función appendChild necesita un elemento como parámetro.
      • Tú no puedes hacer esto
      document.getElementById("div").appendChild("<p></p>");
      • Pero tu si puedes hacer esto
      const p = document.createElement("p"); document.getElementById("div").appendChild(p);

      Operaciones en lote

      Hacer operaciones en el DOM es algo muy costoso. Entre menos operaciones hagamos en el DOM especialmente escribir y eliminar , más rápida será nuestra operación.

      Ejemplo, agregar 100 inputs al final de body.

      Forma NO óptima: (modificamos el DOM 100 veces)

      for (let i = 0; i<100; i++){ const node = document.createElement('input') document.body.appendChild(node) }

      Mejor forma: (modificamos el DOM 1 vez)

      const nodos = [] for (let i = 0; i<100; i++){ const node = document.createElement('input') nodos.push(node) } document.body.append(...nodos)

      Documentación de operador de propagación

      Sabia que modificar muchas veces en el DOM tenia un precio, pero nunca imaginé que el costo podría ser alto

      Agradezco mucho esta clase porque ayuda a aprender más sobre rendimiento y optimización :star2:.

      Spread Operator

      Vamos a ver el uso del spread operator para pasar un array a una lista de argumentos. Esto puede ser muy útil en casos donde tenemos que pasar una lista de argumentos (no un array) a un método/función.

      Antes de comenzar es importante resaltar el spread operator fue incluido en la nueva versión de Javascript ES6 y ya funciona en todos los navegadores.

      let numeros = [4, 16, 25, 2, 45, 8]; let numeroMayor = Math.max(numeros); console.log(numeroMayor); // NaN

      Observamos que el valor de la variable numeroMayor es NAN, esto es porque el método max() puede recibir una lista de argumentos y no le podemos pasar un array.

      Entonces podríamos hacer los siguiente:

      let numeroMayor = Math.max(4, 16, 25, 2, 45, 8); console.log(numeroMayor); // 45

      Ahora sí podemos acceder al número más alto de la lista de argumentos. De todos modos podemos mejorar este código gracias al spread operator.

      Veamos cómo hacerlo!

      let numeros = [4, 16, 25, 2, 45, 8]; let numeroMayor = Math.max(...numeros); console.log(numeroMayor); // 45

      Al anteponer los tres puntos que representan al spread operator transformamos la variable numeros (que en el ejemplo representa un array con números) en una lista de argumentos, y es por ello que podemos acceder al número mayor del array numeros. Es como si le quitáramos los corchetes ( “[]” ) al array.

      Me encanto tu aporte !

      Lo u'nico que no me gusta del profe es que no utiliza ";" punto y coma al finalizar la línea en js!

      Cuál es el inconveniente ? 😮

      @carloscdev es algo subjetivo! A mi me gusta los ";"