← Cloudflare Workers / workers / runtime-apis
Производительность и таймеры
Контекст
Среда выполнения Workers поддерживает подмножество Performance API ↗, используется для измерения времени и производительности, а также времени подзапросов и других операций.
performance.now()
performance.now() метод ↗ возвращает временную метку в миллисекундах, показывающую время, прошедшее с performance.timeOrigin.
При развертывании Workers в Cloudflare в целях безопасности, чтобы защита от атак Spectre, API, возвращающие таймеры, включая performance.now() ↗ и Date.now() ↗, продвигаются или увеличиваются только после выполнения операций ввода-вывода. Рассмотрим следующие примеры:
const start = performance.now();
for (let i = 0; i < 1e6; i++) {
// do expensive work
}
const end = performance.now();
const timing = end - start; // 0const 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.