Vóór versie 91 waren de timerresoluties in Chrome beperkt tot 5 microseconden op desktopcomputers (waar site-isolatie is ingeschakeld) en tot 100 microseconden op Android (waar dat niet is ingeschakeld).
Vanaf versie 91 beperkt Chrome, na een specificatiewijziging , de resolutie van expliciete timers ( performance.now()
, performance.timeOrigin
en andere prestatie-API's die DOMHighResTimestamps
blootstellen) tot 100 microseconden op alle platforms. Door cross-origin isolation in te schakelen, kunnen websites de beperking versoepelen tot 5 microseconden, ongeacht het platform.
Het verkrijgen van krachtigere mogelijkheden door cross-origin isolatie in te schakelen is een vergelijkbare aanpak als bij SharedArrayBuffer
. Cross-origin isolatie is een toestand waarin een webpagina geïsoleerd is van andere bronnen, behalve de bronnen die hiervoor hebben gekozen.
Moet ik er iets aan doen?
Waarschijnlijk niet. performance.now()
is in andere browsers beperkt tot aanzienlijk grovere resoluties (bijvoorbeeld 1 milliseconde = 0,001 seconde), dus u 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-origin geïsoleerd is. Dit levert u een betere resolutie op in zowel Chrome en andere Chromium-gebaseerde browsers als Firefox .
Wat hebben timers te maken met cross-origin isolatie?
Browserleveranciers besloten de timers te beperken tot grovere resoluties (en de beschikbaarheid van SharedArrayBuffers, die als impliciete timers kunnen worden gebruikt) toen Spectre werd ontdekt. Dit komt doordat Spectre, en vergelijkbare speculatieve uitvoeringsaanvallen, afhankelijk zijn van timers om de tijd te meten die bepaalde bewerkingen in beslag nemen en vervolgens de inhoud van het procesgeheugen te raden.
Hoewel speculatieve uitvoeringsaanvallen kunnen worden uitgevoerd met grove timers, kunnen timers met een hoge resolutie ze versnellen. Chrome heeft zijn site- isolatiearchitectuur en andere mechanismen gebruikt om het risico te beperken en deze functionaliteiten opnieuw ingeschakeld, maar deze functionaliteit is beperkt tot desktopplatforms en Chromium-browsers. API's die afhankelijk zijn van de onderliggende browserarchitectuur zijn niet echt ideaal.
Cross-origin-isolatie biedt de standaardbasis voor browsers om pagina's in een geïsoleerde omgeving te draaien, zodat ze geen ongewenste cross-origin-bronnen kunnen laden en daardoor 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 onveilig zijn om bloot te stellen in processen die willekeurige cross-origin-gegevens kunnen lezen.
Wilt u meer weten over de achtergrond van deze wijziging? Lees dan Waarom u "cross-origin isolatie" nodig hebt voor krachtige functies .
Coverfoto door Linda Perez Johannessen op Unsplash .