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.