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

Веб-стандарты

Стандарты JavaScript

Среда выполнения Cloudflare Workers построен на основе движка V8 JavaScript и WebAssembly. Среда выполнения Workers обновляется не реже одного раза в неделю до версии V8, которая используется как минимум в стабильном релизе Google Chrome. Это значит, что вы можете без опасений использовать последние возможности JavaScript, не прибегая к транспиляторам.

Все стандартные встроенные объекты поддерживаемые текущей стабильной версией Google Chrome, поддерживаются, за некоторыми заметными исключениями:


Веб-стандарты и глобальные API

Следующие методы доступны согласно Глобальная область видимости Worker:

Вспомогательные методы Base64

Таймеры

performance.timeOrigin и performance.now()

EventTarget и Event

EventTarget и Event API позволяют объектам публиковать события и подписываться на них.

AbortController и AbortSignal

AbortController и AbortSignal API предоставляют единую модель отмены асинхронных операций.

Глобальный fetch


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.


Если global_navigator флаг совместимости установлен, navigator.userAgent свойство доступно со значением 'Cloudflare-Workers'. Это можно использовать, например, для надёжного определения того, что код выполняется в среде Workers.

Необработанные отклонения Promise

unhandledrejection событие создаётся глобальной областью видимости, когда промис JavaScript отклоняется без прикреплённого обработчика отклонения.

rejectionhandled событие создаётся глобальной областью видимости, когда отклонение промиса JavaScript обрабатывается с опозданием (после того как обработчик отклонения прикрепляется к промису уже после unhandledrejection событие уже было создано).

worker.js
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.
});

Если 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 документация подробнее о структуре виртуальной файловой системы и её ограничениях.