Vor Version 91 waren die Timer-Auflösungen in Chrome auf Computern auf 5 Mikrosekunden beschränkt, wenn die Website-Isolierung aktiviert war, und auf 100 Mikrosekunden auf Android, wo dies nicht der Fall war.
Ab Version 91 wird die Auflösung expliziter Timer (performance.now()
, performance.timeOrigin
und andere Performance APIs, die DOMHighResTimestamps
verfügbar machen) in Chrome aufgrund einer Spezifikationsänderung auf 100 Mikrosekunden auf allen Plattformen begrenzt.
Mit der ursprungsübergreifenden Isolierung können Websites diese Einschränkung unabhängig von der Plattform auf 5 Mikrosekunden lockern.
Die Leistungssteigerung durch Aktivieren der ursprungsübergreifenden Isolierung ist ein ähnlicher Ansatz für SharedArrayBuffer
.
Die ursprungsübergreifende Isolierung bezeichnet einen Status, in dem eine Webseite von anderen Ursprüngen isoliert ist, die nicht aktiviert wurden.
Muss ich etwas dagegen tun?
Nicht unbedingt. performance.now()
konnte in anderen Browsern auf deutlich grobere Auflösungen beschränkt werden (z. B. 1 Millisekunde = 0, 001 Sekunden), sodass Sie sich ohnehin nicht auf die aktuelle Auflösung verlassen sollten.
Wenn du jedoch von einer höheren Auflösung für deine Timer profitieren möchtest (z. B. für genauere Leistungsmessungen), musst du dafür sorgen, dass deine Website ursprungsübergreifend isoliert ist. Dadurch erhalten Sie eine bessere Auflösung sowohl in Chrome als auch in anderen Chromium-basierten Browsern sowie Firefox.
Was haben Timer bei der ursprungsübergreifenden Isolierung zu tun?
Browseranbieter haben beschlossen, die Timer auf niedrigere Auflösungen zu beschränken und die Verfügbarkeit von SharedArrayBuffers, das als implizite Timer verwendet werden kann, zu beschränken, als Spectre entdeckt wurde. Dies liegt daran, dass Spectre und ähnliche spekulative Ausführungsangriffe auf Timer angewiesen sind, um die Zeit bestimmter Vorgänge zu messen und dann den Inhalt des Prozessspeichers zu erraten.
Spekulative Ausführungsangriffe können zwar mit groben Timern ausgeführt werden, aber hochauflösende Timer können sie beschleunigen. Chrome nutzte die Website-Isolierung-Architektur und andere Mechanismen, um das Risiko zu verringern, und aktivierte diese Funktionen wieder. Sie ist jedoch auf Desktop-Plattformen und Chromium-Browser beschränkt. Es ist nicht ideal, wenn APIs auf der zugrunde liegenden Browserarchitektur basieren.
Die ursprungsübergreifende Isolierung stellt die Standardreferenz für Browser zum Ausführen von Seiten in einer isolierten Umgebung dar, sodass sie keine unabsichtlichen ursprungsübergreifenden Ressourcen laden können und daher kein Risiko für Spectre darstellen.
Mit der ursprungsübergreifenden Isolierung können Seiten jetzt auf hochauflösende Timer, SharedArrayBuffer
und andere APIs zugreifen, deren Offenlegung in Prozessen, die beliebige ursprungsübergreifende Daten lesen können, nicht sicher ist.
Weitere Informationen zu den Hintergründen dieser Änderung finden Sie unter Warum Sie für leistungsstarke Funktionen eine ursprungsübergreifende Isolierung verwenden.
Titelbild von Linda Perez Johannessen auf Unsplash