在 91 版之前,在未啟用網站隔離的情況下,Chrome 的計時器解析度上限為 5 微秒;如果不支援,Android 的計時器解析度同樣為 100 微秒。
自 91 版起,Chrome 將於規格變更之後,將跨平台的明確計時器 (performance.now()
、performance.timeOrigin
和其他效能 API) 解析度限制在 100 微秒內。DOMHighResTimestamps
啟用跨來源隔離後,無論平台為何,網站都能將限制放寬為 5 毫秒。
在 SharedArrayBuffer
上啟用跨來源隔離功能也可以取得更強大的功能。跨來源隔離是一種狀態,表示網頁與其他來源隔離,但已選擇啟用的網頁除外。
我需要採取行動嗎?
別緊張。在其他瀏覽器中,performance.now()
已大幅限制了較不精確的解析度 (例如 1 毫秒 = 0.001 秒),因此即使目前的解析度,也不應完全仰賴目前的解析度。
同時,如果您想享有較高的計時器解析度 (例如取得更準確的效能測量結果),必須確認您的網站跨來源隔離。如此一來,無論使用 Chrome 和其他以 Chromium 為基礎的瀏覽器,以及 Firefox 都能提供更高的解析度。
計時器與跨來源隔離功能的作用是什麼?
瀏覽器供應商決定在發現 Spectre 時,將計時器限制在較不精確的解析度 (以及可使用 SharedArrayBuffers 的隱式計時器)。這是因為 Spectre 和類似的推測執行攻擊會利用計時器,測量特定作業花費的時間,然後猜測程序記憶體的內容。
雖然推測執行攻擊可以使用粗略的計時器執行,但高解析度計時器可加快這類攻擊的速度。Chrome 使用了其網站隔離架構和其他機制來降低風險並重新啟用這些功能,但僅限於電腦平台和 Chromium 瀏覽器。將 API 依賴基礎瀏覽器架構並非理想的做法。
跨來源隔離是瀏覽器在隔離的環境中執行網頁的標準基準。這樣一來,瀏覽器就無法載入不需要的跨來源資源,因此不會對 Spectre 造成風險。透過跨來源隔離,我們現在可以允許頁面存取高解析度計時器、SharedArrayBuffer
和其他不安全的 API,以免在可讀取任意跨來源資料的程序中公開。
如要進一步瞭解這項變更的背景,請參閱「為什麼需要「跨來源隔離」才能使用強大功能。
Linda Perez Johannessen 在 Unsplash 上提供的封面相片。