← Cloudflare Workers / workers / runtime-apis
Веб-стандарты
Стандарты JavaScript
Среда выполнения Cloudflare Workers построен на основе движка V8 JavaScript и WebAssembly. Среда выполнения Workers обновляется не реже одного раза в неделю до версии V8, которая используется как минимум в стабильном релизе Google Chrome. Это значит, что вы можете без опасений использовать последние возможности JavaScript, не прибегая к транспиляторам.
Все стандартные встроенные объекты ↗ поддерживаемые текущей стабильной версией Google Chrome, поддерживаются, за некоторыми заметными исключениями:
- По соображениям безопасности не допускается:
eval()new FunctionWebAssembly.compile↗WebAssembly.compileStreaming↗WebAssembly.instantiateс параметр buffer ↗WebAssembly.instantiateStreaming↗
Date.now()возвращает время последней операции ввода-вывода: оно не увеличивается во время выполнения кода.
Веб-стандарты и глобальные API
Следующие методы доступны согласно Глобальная область видимости Worker ↗:
Вспомогательные методы Base64
-
atob()
- Декодирует строку данных, закодированную с помощью кодировки base-64.
-
btoa()
- Создает ASCII-строку в кодировке base64 из строки двоичных данных.
Таймеры
-
setInterval()
- Планирует выполнение функции каждый раз по истечении заданного количества миллисекунд.
-
clearInterval()
- Отменяет повторяющееся выполнение, заданное с помощью
setInterval()↗.
- Отменяет повторяющееся выполнение, заданное с помощью
-
setTimeout()
- Планирует выполнение функции через заданный промежуток времени.
-
clearTimeout()
- Отменяет отложенное выполнение, заданное с помощью
setTimeout()↗.
- Отменяет отложенное выполнение, заданное с помощью
-
- Возвращает Promise, который разрешается по истечении заданного количества миллисекунд.
await-совместимая альтернативаsetTimeout().
- Возвращает Promise, который разрешается по истечении заданного количества миллисекунд.
performance.timeOrigin и performance.now()
-
performance.timeOrigin
- Возвращает точку отсчёта времени высокого разрешения. Workers использует эпоху UNIX в качестве точки отсчёта, что означает, что
performance.timeOriginвсегда возвращает0.
- Возвращает точку отсчёта времени высокого разрешения. Workers использует эпоху UNIX в качестве точки отсчёта, что означает, что
-
performance.now()
- Возвращает
DOMHighResTimeStampпредставляющее количество миллисекунд, прошедших сperformance.timeOrigin. Обратите внимание, что Workers намеренно снижает точностьperformance.now()так, что возвращается время последней операции ввода-вывода, и это время не увеличивается во время выполнения кода. По сути, из-за этого, а также из-за того, чтоperformance.timeOriginвсегда,0,performance.now()всегда равенDate.now(), обеспечивая согласованное представление о течении времени внутри Worker.
- Возвращает
EventTarget и Event
EventTarget ↗ и Event ↗ API позволяют объектам публиковать события и подписываться на них.
AbortController и AbortSignal
AbortController ↗ и AbortSignal ↗ API предоставляют единую модель отмены асинхронных операций.
Глобальный fetch
- fetch()
- Запускает процесс получения ресурса из сети. См. Fetch API.
Encoding API
Оба TextEncoder и TextDecoder поддерживают кодирование и декодирование UTF-8.
Дополнительную информацию см. в документации MDN ↗.
TextEncoderStream ↗ и TextDecoderStream ↗ классы также доступны.
URL API
URL API поддерживает URL-адреса, соответствующие схемам HTTP и HTTPS.
Дополнительную информацию см. в документации MDN ↗
Compression Streams
CompressionStream и DecompressionStream классы поддерживают методы сжатия deflate, deflate-raw и gzip.
Дополнительную информацию см. в документации MDN ↗
URLPattern API
URLPattern API предоставляет механизм сопоставления URL по удобному синтаксису шаблонов.
Дополнительную информацию см. в документации MDN ↗.
Intl
Intl API позволяет форматировать даты, время, числа и многое другое в формате, который использует указанная локаль (язык и регион).
Дополнительную информацию см. в документации MDN ↗.
navigator.userAgent
Если global_navigator флаг совместимости установлен, navigator.userAgent ↗ свойство доступно со значением 'Cloudflare-Workers'. Это можно использовать, например, для надёжного определения того, что код выполняется в среде Workers.
Необработанные отклонения Promise
unhandledrejection ↗ событие создаётся глобальной областью видимости, когда промис JavaScript отклоняется без прикреплённого обработчика отклонения.
rejectionhandled ↗ событие создаётся глобальной областью видимости, когда отклонение промиса JavaScript обрабатывается с опозданием (после того как обработчик отклонения прикрепляется к промису уже после unhandledrejection событие уже было создано).
addEventListener("unhandledrejection", (event) => {
console.log(event.promise); // The promise that was rejected.
console.log(event.reason); // The value or Error with which the promise was rejected.
});
addEventListener("rejectionhandled", (event) => {
console.log(event.promise); // The promise that was rejected.
console.log(event.reason); // The value or Error with which the promise was rejected.
});navigator.sendBeacon(url[, data])
Если global_navigator флаг совместимости установлен, navigator.sendBeacon(...) ↗ API доступен для отправки HTTP POST запрос с небольшим объёмом данных на веб-сервер. Этот API предназначен для асинхронной передачи аналитической или диагностической информации без гарантии доставки (в режиме best-effort).
Например, можно заменить:
const promise = fetch("https://example.com", {
method: "POST",
body: "hello world",
});
ctx.waitUntil(promise);с navigator.sendBeacon(...):
navigator.sendBeacon("https://example.com", "hello world");Web File System Access API
Если enable_web_file_system флаг совместимости установлен, Workers поддерживает Web File System Access API ↗, который позволяет читать и записывать файлы и каталоги в виртуальной файловой системе внутри среды Worker. Этот API даёт доступ к той же файловой системе в памяти, что и node:fs модуль но не требует включения совместимости с Node.js.
const root = await navigator.storage.getDirectory();
export default {
async fetch(request) {
const fileHandle = await root.getFileHandle("hello.txt", { create: true });
const writable = await fileHandle.createWritable();
await writable.write("Hello, world!");
await writable.close();
const file = await fileHandle.getFile();
const contents = await file.text();
return new Response(contents, { status: 200 });
},
};Подробности см. в документация MDN ↗ с дополнительной информацией об использовании этого API, а также node:fs документация подробнее о структуре виртуальной файловой системы и её ограничениях.