Vóór versie 91 waren timerresoluties in Chrome beperkt tot 5 microseconden op desktop, waar site-isolatie is ingeschakeld, en tot 100 microseconden op Android, waar dit niet het geval is.
Vanaf versie 91 beperkt Chrome, na een specificatiewijziging , de resolutie van expliciete timers ( performance.now()
, performance.timeOrigin
en andere prestatie-API's die DOMHighResTimestamps
blootleggen) tot 100 microseconden op alle platforms. Door cross-origin-isolatie in te schakelen, kunnen websites de beperking versoepelen tot 5 microseconden, ongeacht het platform.
Het verkrijgen van krachtigere mogelijkheden door cross-origin-isolatie mogelijk te maken is een vergelijkbare aanpak die wordt gehanteerd bij SharedArrayBuffer
. Cross-origin-isolatie is een toestand waarin een webpagina wordt geïsoleerd van andere origines, behalve degene waarvoor u zich heeft aangemeld.
Moet ik er iets aan doen?
Waarschijnlijk niet. performance.now()
is beperkt tot aanzienlijk grovere resoluties in andere browsers (bijvoorbeeld 1 milliseconde = 0,001 seconden), dus je had sowieso niet op de huidige resolutie moeten vertrouwen.
Als u tegelijkertijd wilt profiteren van een hogere resolutie voor uw timers, bijvoorbeeld voor nauwkeurigere prestatiemetingen, moet u ervoor zorgen dat uw site cross-origineel geïsoleerd is. Dat zou u een betere resolutie bieden, zowel in Chrome en andere op Chromium gebaseerde browsers, als in Firefox .
Wat hebben timers te maken met cross-origin-isolatie?
Browserleveranciers besloten de timers te beperken tot grovere resoluties (evenals de beschikbaarheid van SharedArrayBuffers die als impliciete timers kunnen worden gebruikt) toen Spectre werd ontdekt. Dit komt omdat Spectre en soortgelijke speculatieve uitvoeringsaanvallen afhankelijk zijn van timers om de tijd te meten die bepaalde bewerkingen duren en vervolgens de inhoud van het procesgeheugen te raden.
Terwijl speculatieve executieaanvallen kunnen worden uitgevoerd met grove timers, kunnen timers met hoge resolutie deze versnellen. Chrome gebruikte zijn site-isolatiearchitectuur en andere mechanismen om het risico te beperken en deze functionaliteiten opnieuw in te schakelen, maar dit is alleen beperkt tot desktopplatforms en Chromium-browsers. Het is niet echt ideaal om API's te hebben die afhankelijk zijn van de onderliggende browserarchitectuur.
Cross-origin-isolatie biedt de standaardbasislijn voor browsers om pagina's in een geïsoleerde omgeving uit te voeren, zodat ze niet in staat zijn onwillige cross-origin-bronnen te laden en daarom geen risico lopen voor Spectre. Met cross-origin-isolatie kunnen we pagina's nu toegang geven tot timers met hoge resolutie, SharedArrayBuffer
en andere API's die niet veilig kunnen worden blootgesteld in processen die willekeurige cross-origin-gegevens kunnen lezen.
Voor meer informatie over de achtergrond achter deze wijziging leest u Waarom u 'cross-origin geïsoleerd' nodig heeft voor krachtige functies .
Omslagfoto door Linda Perez Johannessen op Unsplash .