INTEGRITY Документация

Производительность и таймеры

Контекст

Среда выполнения Workers поддерживает подмножество Performance API, используется для измерения времени и производительности, а также времени подзапросов и других операций.

performance.now()

performance.now() метод возвращает временную метку в миллисекундах, показывающую время, прошедшее с performance.timeOrigin.

При развертывании Workers в Cloudflare в целях безопасности, чтобы защита от атак Spectre, API, возвращающие таймеры, включая performance.now() и Date.now(), продвигаются или увеличиваются только после выполнения операций ввода-вывода. Рассмотрим следующие примеры:

Time is frozen, start will have the exact same value as end.
const start = performance.now();
for (let i = 0; i < 1e6; i++) {
  // do expensive work
}
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; // duration of the subrequest to developers.cloudflare.com

Обернув подзапрос в вызовы performance.now() или Date.now() API можно измерять время выполнения подзапроса, получения ключа из KV, объекта из R2 или любой другой операции ввода-вывода в вашем Worker.

При локальной разработке таймеры, однако, увеличиваются независимо от того, происходит ли ввод-вывод. Это значит, что если вам нужно замерить время выполнения кода, интенсивно использующего процессор и не связанного с вводом-выводом, вы можете запустить Worker локально через Wrangler, который использует Workers runtime с открытым исходным кодом, workerd : та же среда выполнения, в которой работает ваш Worker после развёртывания на Cloudflare.

performance.timeOrigin

performance.timeOrigin API это доступное только для чтения свойство, которое возвращает базовую временную метку для последующих измерений.

В среде выполнения Workers timeOrigin свойство возвращает 0.