在 91 版之前,Chrome 中的計時器解析度在啟用網站隔離的電腦上限制為 5 微秒,在未啟用這項功能的 Android 上則限制為 100 微秒。
自 91 版起,Chrome 會根據規格變更,將明確的計時器 (performance.now()
、performance.timeOrigin
和其他公開 DOMHighResTimestamps
的效能 API) 的解析度限制在各平台的 100 微秒。啟用跨來源隔離功能後,無論平台為何,網站都能將限制放寬至 5 微秒。
在 SharedArrayBuffer
上提出的類似做法,就是透過啟用跨來源隔離功能來獲得更強大的功能。跨來源隔離是指網頁與其他來源隔離的狀態,但已選擇加入的來源除外。
我需要採取什麼行動嗎?
別緊張。performance.now()
在其他瀏覽器中已限制為更粗略的解析度 (例如 1 毫秒 = 0.001 秒),因此您不應依賴目前的解析度。
同時,如果您希望使用更高解析度的計時器,例如更準確地評估成效,請務必確保網站跨來源隔離。這樣一來,您在 Chrome 和其他採用 Chromium 的瀏覽器,以及 Firefox 中,都能獲得更佳的解析度。
計時器與跨來源隔離有何關?
瀏覽器供應商在發現Spectre 後,決定將計時器限制在較粗略的解析度 (以及可用於隱含計時器的 SharedArrayBuffers)。這是因為 Spectre 和類似的預測執行攻擊會依賴計時器來測量特定作業所需的時間,然後猜測處理程序記憶體的內容。
雖然預測執行攻擊可透過粗略計時器執行,但高解析度計時器可加快攻擊速度。Chrome 使用網站隔離架構和其他機制來降低風險,並重新啟用這些功能,但僅限於電腦平台和 Chromium 瀏覽器。讓 API 依賴底層瀏覽器架構並非理想做法。
跨來源隔離功能可為瀏覽器提供標準基準,讓瀏覽器在隔離環境中執行網頁,這樣一來,瀏覽器就無法載入不願意的跨來源資源,因此不會有 Spectre 的風險。有了跨原點隔離功能,我們現在可以允許網頁存取高解析度計時器、SharedArrayBuffer
和其他 API,這些 API 在可讀取任意跨原點資料的程序中公開是不安全的。
如要進一步瞭解這項變更的背景,請參閱「為何需要『跨來源隔離』功能才能使用強大功能」。
封面相片由 Linda Perez Johannessen 提供,取自 Unsplash。