Команда Chrome PerformanceAPIs предлагает новый API, который позволит веб-приложениям объявлять критические фоновые задачи, освобождая их от агрессивного троттлинга и заморозки вкладок. Всё, что мы знаем на данный момент, и как подготовиться.
Вы загружаете большое видео в ваше веб-приложение. Индикатор прогресса показывает 80%. Затем вы переключаетесь на другую вкладку — проверить почту. Когда возвращаетесь — загрузка не удалась. Браузер заморозил вкладку, оборвал соединение, и ваши данные никуда не попали.
Этот сценарий до боли знаком каждому, кто создаёт сложные веб-приложения. Современные браузеры агрессивно троттлят фоновые вкладки для экономии батареи и памяти, но они не различают видео на YouTube, играющее в фоне, и критическую синхронизацию состояния в коллаборативном редакторе.
Background Work API — предложенный командой Chrome PerformanceAPIs в мае 2026 года — призван решить эту проблему. Он предоставляет структурированный способ для веб-приложений объявлять критические фоновые задачи и запрашивать временное освобождение от агрессивного троттлинга. В этой статье я расскажу, что мы знаем об этом новом API, какие проблемы он решает, как он соотносится с существующими фоновыми API и как подготовить ваши приложения уже сегодня.
Чтобы понять, почему Background Work API важен, нужно разобраться, как Chrome обрабатывает скрытые вкладки.
Когда вкладка становится скрытой (пользователь переключается на другую вкладку или сворачивает окно), Chrome применяет всё более агрессивные ограничения ресурсов:
setTimeout и setInterval
ограничиваются минимумом в 1 секунду (и более) в скрытых вкладкахrequestAnimationFrame
полностью прекращает срабатывать, когда вкладка скрытаРазработчики прибегают к креативным — и хрупким — обходным решениям:
Эти обходные пути существуют, потому что нет легитимного, поддерживаемого браузером способа сказать: «Эй, браузер, я делаю что-то важное — пожалуйста, не замораживай мою вкладку следующие 30 секунд». Background Work API заполняет именно этот пробел.
💡 Суть проблемы: Браузеры не могут отличить критическую фоновую работу от некритической активности. Страница, играющая фоновую музыку, и страница, загружающая снимок МРТ в медицинскую панель, выглядят одинаково для механизма троттлинга. Background Work API даёт приложениям способ сообщить о намерениях.
Background Work API был зарегистрирован на панели Chrome Platform Status 28 мая 2026 года участником [email protected] из команды Blink > PerformanceAPIs. Сейчас он находится на самой ранней из возможных стадий — запись о функции без спецификации, прототипа или Origin Trial.
Согласно описанию в Chrome Status:
«Позволяет веб-приложениям объявлять намерение выполнять критические, непрерывные задачи, когда страница находится в фоне. Предоставляет разработчикам структурированный способ запроса временного освобождения от агрессивного троттлинга для важных операций, таких как завершение загрузки больших фотографий, обработка данных или синхронизация сложного состояния приложения.»
API нацелен на обеспечение надёжного фонового выполнения без необходимости прибегать к ресурсоёмким обходным путям для предотвращения приостановки или выгрузки вкладки браузером.
Основываясь на описании Chrome Status и паттернах из существующих API возможностей (таких как Permissions API и Page Lifecycle API), Background Work API, вероятно, будет следовать паттерну запроса разрешения:
// Pattern 1: Feature Detection
if ('requestWorkPermission' in navigator) {
// The Background Work API is available
console.log('Background Work API supported');
} else {
// Fall back to existing APIs
console.log('Falling back to Background Sync / Fetch');
}
// Pattern 2: Requesting Background Work Time (conceptual)
navigator.requestWorkPermission({
type: 'data-sync',
estimatedDuration: 30000, // 30 seconds
reason: 'Syncing application state'
}).then(status => {
if (status === 'granted') {
// Perform background work — browser won't freeze
performCriticalSync();
} else {
// Permission denied, use fallback
registerBackgroundSyncFallback();
}
}).catch(err => {
// API not supported or permission request failed
console.warn('Background Work API error:', err);
});
Обратите внимание: это концептуальная поверхность API. Фактические названия методов, параметры и модель разрешений будут определены на этапах спецификации и прототипирования. Запись Chrome Status явно помечает все этапы разработки как «пустые» — это самая ранняя из возможных стадий.
В статье блога Chrome за январь 2025 года «Freezing on Energy Saver» упоминался будущий Progress Notification API как замена истекающему эксперименту PageFreezeOptOut:
«Этот эксперимент [BackgroundPageFreezeOptOut] будет прекращён после выпуска новых API для объявления важной фоновой работы (например, Progress Notification API).»
Background Work API и Progress Notification API, вероятнее всего, являются одной и той же инициативой — или, по крайней мере, связанными усилиями одной команды. Запись Background Work API в Chrome Status — первый конкретный публичный сигнал о том, что эта работа активно ведётся.
Background Work API нацелен на три основных сценария, описанных в записи Chrome Status:
Самый наглядный пример. Пользователь начинает загрузку большого файла, переключается на другую вкладку, а вернувшись, обнаруживает, что загрузка не удалась — вкладка была заморожена в середине передачи. С Background Work API приложение объявляет загрузку критической работой, и браузер сохраняет сетевое соединение активным.
// Upload with Background Work protection (conceptual)
async function uploadWithBackgroundProtection(file) {
// Request background work permission
const status = await navigator.requestWorkPermission({
type: 'upload',
estimatedDuration: file.size / 1000000 * 1000, // rough estimate
reason: 'Uploading user content'
});
if (status === 'granted') {
// Perform the upload — protected from throttling
const response = await fetch('/upload', {
method: 'POST',
body: file
});
return response.json();
} else {
// Use service worker fallback
return uploadViaServiceWorker(file);
}
}
Веб-IDE, аналитические панели и редакторы изображений/видео часто обрабатывают большие объёмы данных в фоне. Линтинг, компиляция, агрегация данных и обработка изображений требуют процессорного времени, которое браузер сейчас троттлит, когда вкладка скрыта.
Самый архитектурно интересный сценарий. Приложения, использующие CRDT-коллаборацию (Yjs, Automerge), WebSocket-соединения или синхронизацию в реальном времени, должны продолжать работу, когда вкладка в фоне. Сейчас WebSocket-соединения в скрытых вкладках могут разрываться по таймауту из-за троттлинга браузера.
💡 Реальный эффект: В инструментах совместного редактирования (таких как Google Docs, Notion или Figma) пользователь с несколькими открытыми вкладками может обнаружить, что его изменения не синхронизировались после возврата к замёрзшей вкладке редактора. Background Work API позволил бы таким приложениям поддерживать синхронизацию в реальном времени в фоне.
Background Work API существует не в вакууме. В Chrome уже есть несколько API для фоновой работы — каждое с разными компромиссами. Понимание их различий необходимо для построения правильной стратегии fallback.
| API | Назначение | Требует Service Worker | Поддержка браузеров |
|---|---|---|---|
| Background Work API | Объявить критическую работу, запросить освобождение от троттлинга (предложение) | Нет (контекст страницы) | Предложение Chrome (2026) |
| Background Sync | Отложить одноразовые задачи до появления сети | Да | Chrome 49+, Firefox 44+, Edge 79+, Safari iOS 26.4+ |
| Periodic Background Sync | Периодическое обновление контента (новости, погода) | Да (требуется PWA) | Только Chrome 149+, Edge 149+ |
| Background Fetch | Загрузка больших файлов с системным UI прогресса | Да | Только Chrome 149+, Edge 149+ |
| Page Lifecycle API | Отслеживание переходов видимости/заморозки | Нет | Все современные браузеры |
Ключевое отличие — контекст выполнения. Существующие фоновые API требуют сервис-воркера — они переносят работу в отдельный процесс, работающий независимо от страницы. Background Work API нацелен на контекст самой страницы, предотвращая троттлинг или заморозку активного выполнения страницы. Это принципиально иное решение:
До выхода Background Work API вы можете реализовать многоуровневую стратегию fallback с использованием существующих API. Этот подход гарантирует, что ваше приложение работает сегодня и бесшовно обновится, когда API станет доступен:
// Three-layer fallback strategy (conceptual)
async function performCriticalTask(task) {
// Layer 1: Background Work API (future, best case)
if ('requestWorkPermission' in navigator) {
const status = await navigator.requestWorkPermission({
type: task.type,
estimatedDuration: task.duration,
reason: task.description
});
if (status === 'granted') return task.execute();
}
// Layer 2: Background Sync (for network-dependent tasks)
if ('sync' in registration) {
await registration.sync.register(task.tag);
return { status: 'deferred', api: 'background-sync' };
}
// Layer 3: Regular fetch (no protection, best effort)
try {
return await task.execute();
} catch (err) {
console.warn('Task failed, will retry:', err);
return { status: 'failed', error: err };
}
}
По состоянию на июнь 2026 года Background Work API существует исключительно как запись в Chrome Status (создана 28 мая 2026 года). Вот полная разбивка по этапам разработки:
| Этап | Статус |
|---|---|
| Начало инкубации | Не начат |
| Начало прототипирования | Не начат |
| Dev trials | Не начат |
| Оценка готовности | Не начат |
| Origin Trial | Не начат |
| Подготовка к релизу | Не начат |
Хотя официальных сроков нет, можно оценить на основе типичных паттернов инкубации Chrome API:
Сигналы от вендоров: Firefox и Safari не проявляли намерения внедрять API. Он может остаться эксклюзивом Chromium на некоторое время, как Periodic Background Sync и Background Fetch.
Даже несмотря на то, что API ещё не доступен, есть конкретные шаги, которые можно предпринять уже сейчас:
Определите все операции в вашем приложении, которые продолжаются после скрытия вкладки. Классифицируйте их по критичности: какие должны завершиться (загрузки, синхронизация), а какие можно приостановить (анимации, опросы, некритичные таймеры).
// Detect tab visibility and freeze state
document.addEventListener('visibilitychange', () => {
if (document.hidden) {
// Tab was hidden — slow down non-critical work
pauseNonCriticalOperations();
} else {
resumeOperations();
}
});
document.addEventListener('freeze', () => {
// Tab is about to freeze — save critical state
saveCriticalState();
});
document.addEventListener('resume', () => {
// Tab was unfrozen — check if operations completed
verifyTaskCompletion();
});
// Register a background sync as fallback
async function registerSyncFallback(tag) {
const registration = await navigator.serviceWorker.ready;
await registration.sync.register(tag);
}
// In your service worker:
self.addEventListener('sync', event => {
if (event.tag === 'sync-critical-data') {
event.waitUntil(syncCriticalData());
}
});
Браузеры с большей вероятностью троттлят вкладки, потребляющие избыточный CPU. Будьте добросовестным гражданином:
requestIdleCallback для некритичной работыСамый быстрый путь к раннему доступу — это Chrome Origin Trial. Отслеживайте:
Хотя Background Work API обещает решить реальную проблему, важно понимать его ограничения — как текущие, так и вероятные будущие:
Background Work API знаменует собой важный сдвиг в том, как браузеры обрабатывают фоновые вкладки. Вместо того чтобы относиться ко всей фоновой активности одинаково, он даёт веб-приложениям структурированный способ сообщить о намерениях и запросить более качественную обработку критических операций.
Ключевые выводы:
Веб-платформе давно был нужен способ для приложений сказать «эта вкладка важна». Background Work API — под каким бы именем он в итоге ни вышел — первый конкретный шаг к решению этой проблемы.
Подробнее о современных веб-API читайте в моих руководствах: CSS View Transitions, Deno 28 и ES2026: новые возможности JavaScript.
Создаёте веб-приложение, которому нужна надёжная фоновая работа? Я занимаюсь фронтенд-архитектурой и оптимизацией производительности. Посмотреть услуги или связаться со мной.
Помогаю командам создавать производительные и надёжные веб-приложения с современными API и стратегиями прогрессивного улучшения. Обсудим ваш проект — бесплатная консультация.