バージョン 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)