La configuración de innerHTML es sincrónica, al igual que la mayoría de los cambios que puede realizar en el DOM. Sin embargo, renderizar la página web es una historia diferente.
(Recuerde, DOM significa "Document Object Model". Es solo un "modelo", una representación de datos. Lo que el usuario ve en su pantalla es una imagen de cómo debería verse ese modelo. Por lo tanto, cambiar el modelo no es instantáneo cambiar la imagen; la actualización lleva algún tiempo).
La ejecución de JavaScript y la representación de la página web en realidad ocurren por separado. Para decirlo de manera simplista, primero se ejecuta todo el JavaScript en la página (desde el bucle de eventos; vea este excelente video para obtener más detalles) y luego, después de eso, el navegador muestra cualquier cambio en la página web para que el usuario lo vea. Esta es la razón por la que "bloquear" es tan importante: ejecutar código computacionalmente intensivo evita que el navegador pase del paso "ejecutar JS" y entre en el paso "renderizar la página", lo que hace que la página se congele o tartamudee.
La canalización de Chrome se ve así:
Como puede ver, todo el JavaScript ocurre primero. Luego, la página recibe estilo, diseño, pintura y composición: el "render". No toda esta canalización ejecutará todos los marcos. Depende de los elementos de la página que hayan cambiado, si es que hubo alguno, y de cómo deben volver a reproducirse.
Nota: alert()
también es síncrono y se ejecuta durante el paso de JavaScript, por lo que el cuadro de diálogo de alerta aparece antes de que vea los cambios en la página web.
Ahora podría preguntar "Espera, ¿qué se ejecuta exactamente en ese paso de 'JavaScript' en la canalización? ¿Todo mi código se ejecuta 60 veces por segundo?" La respuesta es "no", y se remonta a cómo funciona el bucle de eventos JS. El código JS solo se ejecuta si está en la pila, desde elementos como detectores de eventos, tiempos de espera, lo que sea. Ver video anterior (de verdad).
https://developers.google.com/web/fundamentals/performance/rendering/