Background Work API: надёжные фоновые задачи в Chrome

Background Work API: надёжные фоновые задачи в Chrome

Команда Chrome PerformanceAPIs предлагает новый API, который позволит веб-приложениям объявлять критические фоновые задачи, освобождая их от агрессивного троттлинга и заморозки вкладок. Всё, что мы знаем на данный момент, и как подготовиться.

Олег Максимов 4 июня 2026 12 мин чтения

Введение

Вы загружаете большое видео в ваше веб-приложение. Индикатор прогресса показывает 80%. Затем вы переключаетесь на другую вкладку — проверить почту. Когда возвращаетесь — загрузка не удалась. Браузер заморозил вкладку, оборвал соединение, и ваши данные никуда не попали.

Этот сценарий до боли знаком каждому, кто создаёт сложные веб-приложения. Современные браузеры агрессивно троттлят фоновые вкладки для экономии батареи и памяти, но они не различают видео на YouTube, играющее в фоне, и критическую синхронизацию состояния в коллаборативном редакторе.

Background Work API — предложенный командой Chrome PerformanceAPIs в мае 2026 года — призван решить эту проблему. Он предоставляет структурированный способ для веб-приложений объявлять критические фоновые задачи и запрашивать временное освобождение от агрессивного троттлинга. В этой статье я расскажу, что мы знаем об этом новом API, какие проблемы он решает, как он соотносится с существующими фоновыми API и как подготовить ваши приложения уже сегодня.

Проблема троттлинга фоновых вкладок

Чтобы понять, почему Background Work API важен, нужно разобраться, как Chrome обрабатывает скрытые вкладки.

Как Chrome троттлит фоновые вкладки

Когда вкладка становится скрытой (пользователь переключается на другую вкладку или сворачивает окно), Chrome применяет всё более агрессивные ограничения ресурсов:

Почему существующие обходные пути не работают

Разработчики прибегают к креативным — и хрупким — обходным решениям:

Эти обходные пути существуют, потому что нет легитимного, поддерживаемого браузером способа сказать: «Эй, браузер, я делаю что-то важное — пожалуйста, не замораживай мою вкладку следующие 30 секунд». Background Work API заполняет именно этот пробел.

💡 Суть проблемы: Браузеры не могут отличить критическую фоновую работу от некритической активности. Страница, играющая фоновую музыку, и страница, загружающая снимок МРТ в медицинскую панель, выглядят одинаково для механизма троттлинга. Background Work API даёт приложениям способ сообщить о намерениях.

Знакомство с Background Work API

Background Work API был зарегистрирован на панели Chrome Platform Status 28 мая 2026 года участником [email protected] из команды Blink > PerformanceAPIs. Сейчас он находится на самой ранней из возможных стадий — запись о функции без спецификации, прототипа или Origin Trial.

Что делает API

Согласно описанию в Chrome Status:

«Позволяет веб-приложениям объявлять намерение выполнять критические, непрерывные задачи, когда страница находится в фоне. Предоставляет разработчикам структурированный способ запроса временного освобождения от агрессивного троттлинга для важных операций, таких как завершение загрузки больших фотографий, обработка данных или синхронизация сложного состояния приложения.»

API нацелен на обеспечение надёжного фонового выполнения без необходимости прибегать к ресурсоёмким обходным путям для предотвращения приостановки или выгрузки вкладки браузером.

Концептуальная поверхность 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 явно помечает все этапы разработки как «пустые» — это самая ранняя из возможных стадий.

Связанные инициативы: Progress Notification API

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

Сценарии использования: что этот API даст

Background Work API нацелен на три основных сценария, описанных в записи Chrome Status:

1. Загрузка больших фото и видео

Самый наглядный пример. Пользователь начинает загрузку большого файла, переключается на другую вкладку, а вернувшись, обнаруживает, что загрузка не удалась — вкладка была заморожена в середине передачи. С 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);
  }
}

2. Фоновая обработка данных

Веб-IDE, аналитические панели и редакторы изображений/видео часто обрабатывают большие объёмы данных в фоне. Линтинг, компиляция, агрегация данных и обработка изображений требуют процессорного времени, которое браузер сейчас троттлит, когда вкладка скрыта.

3. Синхронизация сложного состояния приложения

Самый архитектурно интересный сценарий. Приложения, использующие CRDT-коллаборацию (Yjs, Automerge), WebSocket-соединения или синхронизацию в реальном времени, должны продолжать работу, когда вкладка в фоне. Сейчас WebSocket-соединения в скрытых вкладках могут разрываться по таймауту из-за троттлинга браузера.

💡 Реальный эффект: В инструментах совместного редактирования (таких как Google Docs, Notion или Figma) пользователь с несколькими открытыми вкладками может обнаружить, что его изменения не синхронизировались после возврата к замёрзшей вкладке редактора. Background Work API позволил бы таким приложениям поддерживать синхронизацию в реальном времени в фоне.

Сравнение с существующими фоновыми 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 Отслеживание переходов видимости/заморозки Нет Все современные браузеры

Что делает Background Work API особенным?

Ключевое отличие — контекст выполнения. Существующие фоновые API требуют сервис-воркера — они переносят работу в отдельный процесс, работающий независимо от страницы. Background Work API нацелен на контекст самой страницы, предотвращая троттлинг или заморозку активного выполнения страницы. Это принципиально иное решение:

Стратегия fallback: многоуровневое использование существующих 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 ещё не доступен, есть конкретные шаги, которые можно предпринять уже сейчас:

1. Аудит фоновой работы

Определите все операции в вашем приложении, которые продолжаются после скрытия вкладки. Классифицируйте их по критичности: какие должны завершиться (загрузки, синхронизация), а какие можно приостановить (анимации, опросы, некритичные таймеры).

2. Внедрите Page Lifecycle 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();
});

3. Используйте существующие fallback API

// 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());
  }
});

4. Минимизируйте использование CPU в фоновых вкладках

Браузеры с большей вероятностью троттлят вкладки, потребляющие избыточный CPU. Будьте добросовестным гражданином:

5. Следите за анонсами Origin Trial

Самый быстрый путь к раннему доступу — это Chrome Origin Trial. Отслеживайте:

Ограничения и соображения

Хотя Background Work API обещает решить реальную проблему, важно понимать его ограничения — как текущие, так и вероятные будущие:

Заключение

Background Work API знаменует собой важный сдвиг в том, как браузеры обрабатывают фоновые вкладки. Вместо того чтобы относиться ко всей фоновой активности одинаково, он даёт веб-приложениям структурированный способ сообщить о намерениях и запросить более качественную обработку критических операций.

Ключевые выводы:

Веб-платформе давно был нужен способ для приложений сказать «эта вкладка важна». Background Work API — под каким бы именем он в итоге ни вышел — первый конкретный шаг к решению этой проблемы.

Подробнее о современных веб-API читайте в моих руководствах: CSS View Transitions, Deno 28 и ES2026: новые возможности JavaScript.

FAQ

Что такое Background Work API?
Background Work API — это предложенный Chrome API, который позволяет веб-приложениям объявлять критические, непрерывные фоновые задачи. Он запрашивает временное освобождение от агрессивного троттлинга для операций вроде загрузки больших файлов, обработки данных и синхронизации состояния. Находится на ранней стадии предложения (запись Chrome Status создана в мае 2026).
Чем Background Work API отличается от Background Sync?
Background Sync предназначен для одноразовых задач, ожидающих подключения к сети, и работает внутри сервис-воркера. Background Work API работает из контекста самой страницы, запрашивая освобождение от троттлинга для текущей вкладки — без необходимости сервис-воркера. Они выполняют взаимодополняющие роли: Background Sync для отложенных сетевых операций, Background Work API для операций реального времени, которые должны продолжаться, когда вкладка скрыта.
Какие браузеры поддерживают Background Work API?
По состоянию на июнь 2026 года Background Work API находится на самой ранней стадии предложения — запись в Chrome Status создана 28 мая 2026 года командой Chrome PerformanceAPIs. Ни спецификации, ни прототипа, ни Origin Trial не существует. Другие производители браузеров (Firefox, Safari) не проявляли интереса. Оценка: 2027 год или позже, если предложение продвинется.
Что происходит с моим приложением в фоновых вкладках сегодня?
Chrome агрессивно троттлит фоновые вкладки, особенно в режиме Energy Saver (Chrome 133+). Скрытые вкладки могут быть полностью заморожены — JavaScript останавливается, таймеры приостанавливаются, WebSocket-соединения разрываются по таймауту. Page Lifecycle API (события visibilitychange, freeze, resume) позволяет отслеживать эти переходы, но на данный момент нет способа предотвратить заморозку без обходных путей вроде AudioContext-хакеров или крошечных видеоэлементов.
Какие fallback-механизмы существуют, если Background Work API недоступен?
Можно использовать три существующих API в качестве fallback: (1) Background Sync API для одноразовых сетевых задач — широко поддерживается во всех браузерах; (2) Periodic Background Sync для периодического обновления контента — только Chromium, требует установки PWA; (3) Background Fetch API для загрузки больших файлов — только Chromium с системным UI прогресса. Рекомендуемая стратегия — использовать Background Work API, когда он доступен, с понижением до этих API в зависимости от типа задачи.
Могу ли я подготовить своё приложение к Background Work API уже сегодня?
Да. (1) Реорганизуйте критические фоновые операции в самодостаточные задачи с понятной длительностью и целью; (2) Внедрите Page Lifecycle API для отслеживания изменений видимости; (3) Используйте существующие fallback API (Background Sync, Background Fetch) для отложенных операций; (4) Минимизируйте использование CPU в фоновых вкладках — троттлите анимации, приостанавливайте некритичную работу, используйте requestIdleCallback; (5) Следите за списком рассылки blink-dev и Chrome Status в ожидании анонсов Origin Trial.
Background Work API и Progress Notification API — это одно и то же?
Скорее всего, это связанные инициативы. В статье блога Chrome «Freezing on Energy Saver» (январь 2025) упоминался будущий «Progress Notification API» для объявления важной фоновой работы. Запись Background Work API в Chrome Status (май 2026) служит той же цели — предотвращение агрессивного троттлинга для критических операций. Возможно, это разные названия одной и той же инициативы команды Chrome PerformanceAPIs.

Создаёте веб-приложение, которому нужна надёжная фоновая работа? Я занимаюсь фронтенд-архитектурой и оптимизацией производительности. Посмотреть услуги или связаться со мной.

Контакты

Создаёте надёжное веб-приложение?

Помогаю командам создавать производительные и надёжные веб-приложения с современными API и стратегиями прогрессивного улучшения. Обсудим ваш проект — бесплатная консультация.