search
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
schoolTomar 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 6 años
    Jimmy Buriticá Londoño

    Jimmy Buriticá Londoño

    Estudiante
    Hace 6 años
    Orangel Gonzalez

    Orangel Gonzalez

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

Carlos Eduardo Gomez García

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

    Jimmy Buriticá Londoño

    Estudiante
    Hace 6 años
    Alexis Steven Valderrama

    Alexis Steven Valderrama

    Estudiante
    Hace 6 años
Fernando Quinteros Gutierrez

Fernando Quinteros Gutierrez

Estudiante
Hace 6 años
    Camilo Gonzalez

    Camilo Gonzalez

    Estudiante
    Hace 5 años
fermin martin

fermin martin

Estudiante
Hace 6 años
Andrés D Amelio

Andrés D Amelio

Estudiante
Hace 6 años
Daniloo Morales

Daniloo Morales

Estudiante
Hace 6 años
    Jonathan 🦑 Alvarez

    Jonathan 🦑 Alvarez

    Profesor
    Hace 6 años
Juan Gui Arenas

Juan Gui Arenas

Estudiante
Hace 5 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 6 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 6 años
Juan Esteban Velez Muñoz

Juan Esteban Velez Muñoz

Estudiante
Hace 6 años
Juan Gui Arenas

Juan Gui Arenas

Estudiante
Hace 5 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 ";"