コンテンツにスキップ

パフォーマンスとタイマー

背景

Workers ランタイムは、タイミングとパフォーマンス、サブリクエストやその他の操作のタイミングを測定するために使用される Performance API のサブセットをサポートしています。

performance.now()

performance.now() メソッド は、performance.timeOrigin から経過した時間をミリ秒単位で表すタイムスタンプを返します。

Workers が Cloudflare にデプロイされると、セキュリティ対策として Spectre 攻撃に対する緩和策 として、performance.now()Date.now() を含むタイマーを返す API は、I/O が発生した後のみ進行または増加します。以下の例を考えてみましょう:

時間は凍結されている — start は end と全く同じ値になります。
const start = performance.now();
for (let i = 0; i < 1e6; i++) {
// 高コストの作業を行う
}
const end = performance.now();
const timing = end - start; // 0
時間が進む、なぜなら start と end の間にサブリクエストが発生したからです。
const start = performance.now();
const response = await fetch("https://developers.cloudflare.com/");
const end = performance.now();
const timing = end - start; // developers.cloudflare.com へのサブリクエストの期間

サブリクエストを performance.now() または Date.now() API の呼び出しでラップすることで、KV からのキーの取得、R2 からのオブジェクトの取得、または Worker 内の他の形式の I/O のタイミングを測定できます。

ただし、ローカル開発では、I/O が発生するかどうかに関係なくタイマーは増加します。これは、I/O を伴わない CPU 集中型のコードのタイミングを測定する必要がある場合、オープンソースの Workers ランタイム workerd を使用する Wrangler を介してローカルで Worker を実行できることを意味します。これは、Cloudflare にデプロイされたときに Worker が実行されるランタイムと同じです。

performance.timeOrigin

performance.timeOrigin API は、他の測定の基準となるタイムスタンプを返す読み取り専用プロパティです。

Workers ランタイムでは、timeOrigin プロパティは 0 を返します。