Antes de la versión 91, las resoluciones del temporizador en Chrome se limitaban a 5 microsegundos en computadoras, donde está habilitado el aislamiento de sitios, y a 100 microsegundos en Android, donde no lo está.
A partir de la versión 91, después de un cambio en las especificaciones, Chrome restringirá la resolución de cronómetros explícitos (performance.now()
, performance.timeOrigin
y otras APIs de rendimiento que exponen DOMHighResTimestamps
) a 100 microsegundos en todas las plataformas.
Si habilitas el aislamiento entre orígenes, los sitios web pueden relajar la restricción a 5 microsegundos, independientemente de la plataforma.
Obtener capacidades más potentes habilitando el aislamiento de origen cruzado es un enfoque similar al que se plantea en SharedArrayBuffer
.
El aislamiento de origen cruzado es un estado en el que una página web está aislada de otros orígenes, excepto de los que habilitaron esta opción.
¿Debo hacer algo al respecto?
Probablemente no. performance.now()
se limitó a resoluciones mucho más gruesas en otros navegadores (por ejemplo, 1 milisegundo = 0.001 segundos), por lo que no deberías haber dependido de la resolución actual.
Al mismo tiempo, si deseas beneficiarte de una resolución más alta para tus temporizadores, por ejemplo, para obtener mediciones de rendimiento más precisas, deberás asegurarte de que tu sitio esté aislado de varios orígenes. Esto te brindaría una mejor resolución en Chrome y otros navegadores basados en Chromium, así como en Firefox.
¿Qué tienen que ver los temporizadores con el aislamiento de origen cruzado?
Los proveedores de navegadores decidieron limitar los temporizadores a resoluciones más gruesas (así como la disponibilidad de SharedArrayBuffers que se pueden usar como temporizadores implícitos) cuando se descubrió Spectre. Esto se debe a que Spectre, y ataques de ejecución especulativa similares, dependen de temporizadores para medir el tiempo que tardan ciertas operaciones y, luego, adivinar el contenido de la memoria del proceso.
Si bien los ataques de ejecución especulativa se pueden ejecutar con temporizadores aproximados, los temporizadores de alta resolución pueden acelerarlos. Chrome usó su arquitectura de aislamiento de sitios, así como otros mecanismos, para mitigar el riesgo y volver a habilitar esas funciones, pero se limita solo a las plataformas de escritorio y a los navegadores de Chromium. Tener APIs que dependen de la arquitectura subyacente del navegador no es lo ideal.
El aislamiento de origen cruzado proporciona el modelo de referencia estándar para que los navegadores ejecuten páginas en un entorno aislado de modo que no puedan cargar recursos de origen cruzado no deseados y, por lo tanto, no estén en riesgo de Spectre.
Con el aislamiento de origen cruzado, ahora podemos permitir que las páginas accedan a temporizadores de alta resolución, SharedArrayBuffer
y otras APIs que no son seguras para exponerse en procesos que pueden leer datos arbitrarios de origen cruzado.
Para obtener más información sobre los antecedentes de este cambio, lee Por qué necesitas "aislamiento entre orígenes" para funciones potentes.
Foto de portada de Linda Perez Johannessen en Unsplash.