Dopasowywanie liczników czasu do ograniczeń izolowanych od zasobów z innych źródeł

W wersjach wcześniejszych niż 91 rozdzielczość licznika czasu w Chrome była ograniczona do 5 mikrosekund na komputerze (przy włączonej izolacji witryny) i do 100 mikrosekund na urządzeniach z Androidem, gdy jest inaczej.

Od wersji 91 po zmianie specyfikacji Chrome będzie ograniczać rozdzielczość jawnych liczników czasu (performance.now(), performance.timeOrigin i innych interfejsów API zwiększających wydajność, które udostępniają DOMHighResTimestamps) do 100 mikrosekund na różnych platformach. Dzięki włączeniu izolacji zasobów z innych domen witryny mogą złagodzić to ograniczenie do 5 mikrosekund niezależnie od platformy.

Podobne podejście stosujemy w SharedArrayBuffer, aby uzyskać większe możliwości dzięki włączeniu izolacji zasobów z innych domen. Izolacja zasobów z innych domen to stan, w którym strona internetowa jest izolowana od innych źródeł z wyjątkiem tych, które wyraziły na to zgodę.

Czy muszę coś z tym zrobić?

Raczej nie. W innych przeglądarkach performance.now() ma znacznie bardziej przybliżoną rozdzielczość (np.1 milisekunda = 0, 001 sekundy), więc i tak nie powinno się polegać na obecnej rozdzielczości.

Jednocześnie, jeśli chcesz korzystać z wyższej rozdzielczości liczników czasu, na przykład w celu dokładniejszego pomiaru skuteczności, upewnij się, że Twoja witryna jest izolowana od zasobów z innych domen. Zapewni to lepszą rozdzielczość zarówno w Chrome, jak i innych przeglądarkach opartych na Chromium, a także w Firefoksie.

Co liczniki czasu mają wspólnego z izolacją zasobów z innych domen?

Dostawcy przeglądarek zdecydowali się na ograniczenie liczników czasu do bardziej przybliżonej rozdzielczości (oraz do dostępności obiektów SharedArrayBuffer, które mogą być używane jako niejawne liczniki czasu), gdy wykryto Spectre. Dzieje się tak, ponieważ Spectre i podobne ataki spekulacyjne wymagają liczników czasu do mierzenia czasu potrzebnego na określone operacje, a następnie odgadnięcia zawartości pamięci tego procesu.

Choć ataki spekulacyjne można przeprowadzać z przybliżonymi licznikami czasu, liczniki czasu o wysokiej rozdzielczości mogą je przyspieszyć. Aby zniwelować ryzyko i ponownie włączyć te funkcje, Chrome zastosował architekturę izolacji witryn oraz inne mechanizmy. Działanie jest jednak dostępne tylko na komputerach i w przeglądarkach Chromium. Stosowanie interfejsów API opartych na podstawowej architekturze przeglądarki nie jest idealne.

Izolacja zasobów z innych domen stanowi standardową podstawę do uruchamiania stron w odizolowanym środowisku, przez co nie mogą one ładować niechcianych zasobów z innych domen, przez co nie są narażone na ryzyko Spectre. Dzięki izolacji zasobów z innych domen możemy teraz zezwalać stronom na dostęp do liczników czasu o wysokiej rozdzielczości, SharedArrayBuffer i innych interfejsów API, których nie można ujawnić w procesach mogących odczytywać dowolne dane z innych domen.

Więcej informacji o sytuacjach, które spowodowały tę zmianę, znajdziesz w artykule Dlaczego potrzebujesz opcji izolacji od zasobów z innych domen w przypadku zaawansowanych funkcji.

Zdjęcie na okładkę Lindy Perez Johannessen w serwisie Unsplash.