STATUS IS UPWIKI DE OPTIMIZACIÓN WEB
25Acelerar
Rendimiento y entrega / Acelerar

Rendimiento de JavaScript: Reducir el trabajo del hilo principal

Detecta el JavaScript que hace que una página tarde en responder, elimina el trabajo innecesario y protege las interacciones.

Rendimiento de JavaScript: Reducir el trabajo del hilo principal — GUÍA VISUAL
LEER
8 minutos
FUENTES
5
REVALIDAR
2027-03-27
revisado
Revisor Senior de Rendimiento Web
LA RESPUESTA BREVE

Empieza con la decisión.

Reduce el trabajo del hilo principal midiendo una página real y la interacción, y corrige el coste repetible mayor. El hilo principal ejecuta la mayor parte del JavaScript y procesa de forma secuencial el trabajo de interacción de la interfaz de la página. Una tarea de 50 milisegundos o más se considera una tarea larga, por lo que un toque, clic, desplazamiento o pintura puede quedar detrás de ella. Empieza por procesos sensibles como el checkout, búsqueda, navegación, formularios y otros recorridos críticos.

Para cada coste, elimínalo, déjalo para más tarde hasta que sea necesario, divídelo en lotes cortos o mueve el cálculo acotado a un Web Worker. Mantén la respuesta inmediata en el hilo principal, pero pospón analytics y otros trabajos de seguimiento no esenciales. Trata cada etiqueta de terceros como una dependencia con un responsable. Vuelve a probar en una CPU móvil limitada y conserva la capacidad de revertir para los flujos críticos.

GUÍA VISUAL

Ve el trabajo como un sistema.

Usa este mapa para conectar las decisiones del artículo antes de actuar sobre tácticas individuales.

SIUAcelerar
01Perfila un recorrido de cliente antes de cambiar código
02Lee el traza como una cola de trabajo
03Entrega menos código cuando importa
04Divide el trabajo para que el navegador pueda responder
01

Perfila un recorrido de cliente antes de cambiar código

Elige una ruta e interacción importantes, como abrir la navegación, filtrar resultados o enviar un formulario. Grábala en el panel Performance de Chrome DevTools desde un estado de navegador limpio. Repite la acción y captura una ejecución con CPU restringida así como una en máquina de desarrollo; los trazas de escritorio pueden ocultar trabajo que resulta disruptivo en un teléfono de baja potencia.

Usa el traza para probar una hipótesis concreta, no para culpar a un componente a partir de un informe de bundle. En el gráfico de llamas Main, las barras más anchas duran más y las barras apiladas muestran la pila de llamadas. Un triángulo rojo en una tarea identifica una posible tarea larga; selecciónala y sigue el enlace al código que la inició. Guarda trazas de antes y después para cambios significativos.

Captura el momento

Graba justo antes de la acción y detén después del resultado visible.

Usa un caso repetible

Mantén consistente la ruta, el estado de la cuenta y la secuencia de acciones.

Nombra un responsable

Asigna cada coste principal al equipo o proveedor capaz de cambiarlo.

02

Lee el traza como una cola de trabajo

Una tarea larga es un umbral para investigar, no un diagnóstico completo. La especificación W3C Long Tasks informa sobre tareas que duran 50 milisegundos o más. Mira debajo de una tarea para ver evaluación de JavaScript, un manejador de eventos, recálculo de estilos, layout o paint. La pila de llamadas indica por dónde empezar; los tiempos muestran si el problema es código, renderizado o un frame de terceros.

Prioriza el coste que se repite durante una interacción valiosa. Un manejador corto todavía puede parecer lento cuando desencadena layout o espera detrás de trabajo anterior. El traza es una medición de laboratorio, así que confirma la corrección en dispositivos representativos y, cuando esté disponible, con telemetría de campo respetuosa con la privacidad.

Separa momentos

El análisis del código durante el arranque requiere una solución distinta de la de un controlador de eventos activado después de un toque.

Inspecciona el renderizado

Encuentra patrones repetidos de escritura de estilos y lectura de layout antes de refactorizar.

Mantén una línea base

Adjunta el traza, el escenario y los costes principales al elemento de trabajo.

03

Entrega menos código cuando importa

Haz inventario de scripts por ruta y propósito. Elimina paquetes no usados, duplicados, experimentos retirados y código de funcionalidades terminadas. Luego separa las características específicas de ruta o poco usadas para que se carguen cuando sean necesarias en lugar de en la ruta inicial. La carga dinámica puede reducir el trabajo de arranque, pero puede crear un retardo visible cuando el usuario necesita la función de inmediato.

Pregúntate si un componente necesita un framework completo en el cliente, si una utilidad duplica una capacidad existente o si bastan HTML estático y una pequeña mejora. Prueba el estado alternativo de un módulo que se carga con retraso. La página debe permitir aplazar una funcionalidad opcional sin degradar la experiencia, en lugar de mostrar un control inoperante.

Define un presupuesto por ruta

Documenta qué scripts están permitidos en una ruta y por qué.

Carga por intención

Considera esto para editores opcionales, mapas, reproductores o vistas de informes.

Protege las rutas críticas

Prueba autenticación, accesibilidad, pagos y completado de formularios; busca revisión cualificada cuando los controles se vean afectados.

04

Divide el trabajo para que el navegador pueda responder

Dividir el código en funciones más pequeñas no crea tareas independientes del navegador si se ejecutan de forma síncrona. Para un bucle largo, procesa el trabajo por lotes, actualiza de inmediato el estado visible para el usuario y cede el control antes de continuar. Así el navegador puede procesar la entrada y el renderizado entre lotes.

Donde esté soportado, scheduler.yield() cede al hilo principal y luego continúa el trabajo; detecta la característica y usa una alternativa para navegadores no soportados. No cedas después de cada operación mínima: tiene sobrecoste y puede aumentar el tiempo de finalización. Elige límites a partir de mediciones, preserva la cancelación y evita que resultados obsoletos reemplacen estado más reciente.

Prioriza la interfaz

Muestra aceptación o progreso antes de trabajo de seguimiento no visible.

Agrupa por tiempo transcurrido

Cede antes de que el trabajo medido se vuelva largo, en vez de hacerlo por cada ítem.

Evita atajos obsoletos

La guía actual de web.dev no recomienda una nueva estrategia basada en isInputPending().

05

Mueve el cálculo, no la interfaz, a un worker

Un Web Worker ejecuta un script en un hilo de fondo separado del hilo principal de ejecución. Es adecuado para parseo costoso, transformación de datos, indexado de búsqueda y otros cálculos que no necesitan acceso directo a la interfaz. Envía una entrada definida, devuelve un resultado definido y deja el renderizado y cambios visibles en el hilo principal.

Los workers no son universales. No pueden manipular directamente el DOM ni usar Window, y la comunicación por mensajes copia datos. La creación de workers, el movimiento de datos y la coordinación de errores pueden superar una pequeña operación. Mide la interacción completa, termina workers innecesarios y diseña una alternativa si el trabajo del worker falla.

Elige trabajo aislado

Empieza con un cálculo cuyo entrada y salida puedan serializarse y probarse.

Versiona los mensajes

Descarta resultados creados para un filtro, ruta o acción anterior.

Preserva la accesibilidad

Comunica progreso significativo mediante la interfaz habitual.

06

Gobierna el JavaScript de terceros como una dependencia de producción

Analytics, publicidad, experimentos, embeds sociales, reproductores de vídeo y widgets de soporte pueden añadir peticiones, evaluación de JavaScript, iframes y dependencias. Un script de proveedor puede ser necesario, pero está fuera del control directo del equipo de la aplicación y puede afectar rendimiento, privacidad, seguridad y continuidad. Haz inventario de su propósito, rutas, condición de carga, aprobador, requisito de consentimiento y responsable de eliminación.

Cuando las condiciones y los contratos lo permitan, compara una página representativa con y sin un origen de terceros. Las herramientas de rendimiento pueden revelar evaluaciones costosas, cargas útiles y atribución de tareas largas. Conserva una integración ligera o cargada de forma diferida solo cuando su valor documentado justifique el coste medido. Comprueba que el contenido principal y la transacción primaria sigan funcionando cuando una dependencia opcional sea lenta o no esté disponible.

Limita el radio de impacto

Carga una etiqueta solo en rutas y condiciones que la necesiten.

Revisa el control de cambios

Incluye cambios en el tag manager en la revisión de rendimiento, privacidad, seguridad y reversión.

Mantén un interruptor de eliminación

Documenta y prueba cómo desactivar una integración no crítica.

07

Haz de la capacidad de respuesta una salvaguarda de lanzamiento

Convierte la traza de referencia en una pequeña comprobación de regresión para el recorrido importante. Define las interacciones cubiertas, el dispositivo o la restricción de CPU, la respuesta esperada y quién la revisará. Combínala con una revisión de los paquetes de código y del inventario de terceros para que un paquete o etiqueta nuevos no puedan reintroducir silenciosamente trabajo en el hilo principal.

Status Is UP usa esta evidencia para optimización proactiva y remediación segura, no para reemplazar la monitorización de disponibilidad en vivo. Antes de un cambio de alto riesgo, prepara la reversión y verifica el flujo crítico tras el despliegue. Los resultados varían según dispositivo, red, navegador, contenido y estado de cuenta; trata los umbrales como protecciones, no como garantías.

Bloquea cambios significativos

Requiere trazas de antes y después para navegación compartida, checkout, búsqueda o bundles grandes.

Practica la reversión

Conoce el feature flag, la configuración de la etiqueta o la versión de despliegue que restaura el comportamiento conocido como bueno.

Revisita regularmente

Vuelve a perfilar después de lanzamientos mayores, cambios de proveedores o variaciones en la mezcla de dispositivos.

ACCIÓN / VERIFICAR

Tu guía práctica de tareas.

  1. 01

    Selecciona una interacción crítica

    Nombra la ruta, acción, respuesta esperada e impacto en el cliente.

    VERIFICAR: Una nota de prueba registra ruta, estado de cuenta, acción, navegador y configuración de dispositivo o CPU.
  2. 02

    Graba una línea base

    Graba la interacción en DevTools Performance desde un estado limpio.

    VERIFICAR: El equipo puede revisar un traza con el gráfico de llamas Main.
  3. 03

    Encuentra trabajo bloqueante

    Inspecciona tareas largas, pilas de llamadas, renderizado y actividad de terceros.

    VERIFICAR: Cada coste principal tiene duración, origen, ruta y responsable.
  4. 04

    Elimina scripts innecesarios

    Borra paquetes no usados, experimentos retirados, duplicados y código de ruta no necesario.

    VERIFICAR: La compilación y el recorrido crítico funcionan tras la eliminación.
  5. 05

    Retrasa funcionalidades opcionales

    Carga la capacidad opcional más tarde solo cuando su estado retrasado siga siendo usable.

    VERIFICAR: Una prueba con una página cargada desde cero cubre los casos de carga, fallo y alternativa de respaldo.
  6. 06

    Divide tareas largas

    Procesa en lotes y cede tras la respuesta inmediata de la interfaz.

    VERIFICAR: Un nuevo traza elimina la tarea larga comparable en la ruta de interacción y preserva resultados correctos.
  7. 07

    Evalúa un worker

    Mueve solo cálculos acotados con mensajes definidos.

    VERIFICAR: Prueba tiempos de extremo a extremo, errores, resultados obsoletos y limpieza.
  8. 08

    Audita terceros

    Registra propósito, responsable, condición, consentimiento, coste y procedimiento de desactivación.

    VERIFICAR: Cada etiqueta de ruta crítica tiene una decisión de mantener, limitar, retrasar o eliminar.
  9. 09

    Prueba en condiciones limitadas

    Repite con CPU restringida y navegadores o dispositivos representativos cuando sea posible.

    VERIFICAR: La comparación usa el mismo escenario y anota diferencias materiales.
  10. 10

    Lanza con reversión

    Adjunta el traza, la comprobación de aceptación y la instrucción de reversión al despliegue.

    VERIFICAR: Un responsable nombrado puede restaurar el comportamiento conocido como bueno sin una búsqueda no documentada.
TEMAS DE DISCUSIÓN

Compara las ventajas y desventajas; no compartas datos privados.

Usa estas preguntas con tu equipo o la comunidad de propietarios del sitio. Comparte métodos y lecciones, pero nunca pegues credenciales, registros de clientes ni detalles de infraestructura no públicos.

  1. 01

    ¿Qué interacción parecía aceptable en un informe de carga pero resultó lenta cuando perfilaste un toque o clic real?

  2. 02

    ¿Cómo decides si una funcionalidad de terceros justifica su coste medido en el hilo principal?

  3. 03

    ¿Qué mecanismo de reversión facilita más invertir una regresión de rendimiento sin interrumpir un recorrido crítico?

RECURSOS POPULARES / DE REFERENCIA

Consulta el material fuente.

web.devOptimize long tasks ↗

Explica tareas largas, ceder, scheduler.yield(), alternativas y el sobrecoste de ceder.

Revisado 2026-09-27
Chrome for DevelopersAnalyze runtime performance ↗

Muestra cómo grabar, analizar el gráfico de llamas, identificar tareas largas e investigar la fuente.

Revisado 2026-09-27
MDN Web DocsWeb Workers API ↗

Define workers, comunicación por mensajes y la limitación de acceso directo al DOM.

Revisado 2026-09-27
web.devLoad Third-Party JavaScript ↗

Proporciona orientación para auditoría y medición de scripts de terceros.

Revisado 2026-09-27
W3CLong Tasks API ↗

Define tareas largas, el umbral y la atribución.

Revisado 2026-09-27

Política de fuentes. Este artículo usa documentación oficial de navegadores, estándares y la plataforma web consultada por el equipo editorial. Distingue medición de garantías y omite afirmaciones no respaldadas.

ACLARACIONES RÁPIDAS

Preguntas comunes.

¿Qué se considera una tarea larga de JavaScript?

La especificación W3C Long Tasks usa 50 milisegundos o más como umbral de reporte. Es una señal para investigar, no la prueba de que tareas más cortas sean inofensivas. Confirma la causa en un traza.

¿Partir el código (code splitting) siempre mejora el rendimiento de JavaScript?

No. Dividir puede reducir el trabajo de inicio pero añadir retardo en el primer uso. Úsalo para código específico de ruta u opcional y prueba esa funcionalidad en condiciones restringidas.

¿Debería ejecutar cada función costosa en un Web Worker?

No. Los workers son adecuados para cálculos aislados y con mucha CPU que usan mensajes definidos. No pueden cambiar directamente el DOM, la transferencia de datos lleva tiempo y las tareas pequeñas pueden completarse antes en el hilo principal.

Status Is UP Editorial Team · Editores de Habilitación de Disponibilidad

Revisado por Revisor Senior de Rendimiento Web. Publicado 2026-09-27; actualizado 2026-09-30.