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 uma resolução mais alta para seus 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 de origem cruzada?

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.