Como alinhar timers com restrições de isolamento de origem cruzada

Antes da versão 91, as resoluções de timer no Chrome eram restritas a 5 microssegundos em computadores, onde o isolamento de sites está ativado, e a 100 microssegundos no Android, onde ele não está.

A partir da versão 91, após uma mudança de especificação, o Chrome vai restringir a resolução de timers explícitos (performance.now(), performance.timeOrigin e outras APIs de performance que expõem DOMHighResTimestamps) a 100 microssegundos em todas as plataformas. Ao ativar o isolamento entre origens, os sites podem relaxar a restrição para 5 microssegundos, independentemente da plataforma.

Ganhar mais recursos ativando o isolamento de origem cruzada é uma abordagem semelhante apresentada em SharedArrayBuffer. O isolamento entre origens é um estado em que uma página da Web fica isolada de outras origens, exceto daquelas que ativaram o recurso.

Preciso fazer algo a respeito?

Provavelmente não. O performance.now() foi limitado a resoluções muito mais grossas em outros navegadores (por exemplo, 1 milissegundo = 0,001 segundos), então você não deveria confiar na resolução atual.

Ao mesmo tempo, se você quiser aproveitar a resolução mais alta dos timers, por exemplo, para medições de desempenho mais precisas, é necessário garantir que seu site esteja isolado entre origens. Isso vai melhorar a resolução no Chrome e em outros navegadores baseados no Chromium, assim como no Firefox.

Qual é a relação entre os timers e o isolamento entre origens?

Os fornecedores de navegadores decidiram limitar os timers a resoluções mais grosseiras (bem como a disponibilidade de SharedArrayBuffers que podem ser usados como timers implícitos) quando o Spectre foi descoberto. Isso ocorre porque o Spectre e ataques de execução especulativa semelhantes dependem de timers para medir o tempo que determinadas operações levam e, em seguida, adivinham o conteúdo da memória do processo.

Embora os ataques de execução especulativa possam ser executados com timers grosseiros, os timers de alta resolução podem acelerar o processo. O Chrome usou a arquitetura de isolamento de site, assim como outros mecanismos, para reduzir o risco e reativar essas funcionalidades. No entanto, isso é limitado apenas a plataformas de área de trabalho e navegadores Chromium. Não é ideal ter APIs que dependem da arquitetura do navegador.

O isolamento entre origens fornece a referência padrão para que os navegadores executem páginas em um ambiente isolado para que não carreguem recursos entre origens indesejados e, portanto, não estejam em risco para Spectre. Com o isolamento entre origens, agora podemos permitir que as páginas acessem timers de alta resolução, SharedArrayBuffer e outras APIs que não são seguras para exposição em processos que podem ler dados arbitrários entre origens.

Para saber mais sobre o contexto dessa mudança, leia Por que você precisa de "isolamento entre origens" para recursos poderosos.

Foto da capa por Linda Perez Johannessen no Unsplash.