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 no computador, em que o isolamento de sites estava ativado, e a 100 microssegundos no Android, quando não estava.

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

Conseguir recursos mais avançados ativando o isolamento de origem cruzada é uma abordagem semelhante aplicada em SharedArrayBuffer (link em inglês). O isolamento de origem cruzada é um estado em que uma página da Web é isolada de outras origens, exceto as que foram ativadas.

Preciso fazer algo a respeito?

Provavelmente não. O performance.now() foi limitado a resoluções muito mais aproximadas em outros navegadores (por exemplo, 1 milissegundo = 0,001 segundo). Por isso, você não precisa depender da resolução atual.

Ao mesmo tempo, se você quiser aproveitar uma resolução maior para seus timers, por exemplo, para medições de desempenho mais precisas, será necessário garantir que seu site seja isolado de origem cruzada. Isso proporciona melhor resolução no Chrome e em outros navegadores baseados no Chromium, assim como no Firefox.

O que os timers têm a ver com o isolamento de origem cruzada?

Os fornecedores de navegadores decidiram limitar os timers a resoluções mais amplas (bem como a disponibilidade de SharedArrayBuffers, que pode ser usado como timers implícitos) quando o Spectre era 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, adivinhar o conteúdo da memória do processo.

Embora ataques de execução especulativa possam ser executados com timers aproximados, temporários de alta resolução podem acelerá-los. O Chrome usou a arquitetura de isolamento de sites, assim como outros mecanismos, para reduzir o risco e reativar essas funcionalidades, mas está limitado apenas a plataformas de computadores e navegadores Chromium. Ter APIs que dependem da arquitetura do navegador não é o ideal.

O isolamento de origem cruzada fornece o valor de referência padrão para que os navegadores executem páginas em um ambiente isolado, de modo que eles não possam carregar recursos de origem cruzada não autorizados e, portanto, não correm risco para o Spectre. Com o isolamento de origem cruzada, agora podemos permitir que as páginas acessem timers de alta resolução, SharedArrayBuffer e outras APIs que não são seguras para serem expostas em processos que podem ler dados arbitrários de origem cruzada.

Para saber mais sobre o histórico por trás dessa mudança, leia Por que você precisa de "isolamento de origem cruzada" para recursos avançados.

Foto da capa de Linda Perez Johannessen no Unsplash.