Перейти к содержимому
Все статьи
РазработкаХостинг и серверы

Несколько вкладок опрашивают сервер: как оставить одну

·27 октября 2026 г.· 7 мин чтения
Сколько будет стоить ваш проект?Рассчитать стоимость

Чтобы несколько вкладок не выполняли одинаковый опрос сервера, выделите одного исполнителя через Web Locks API, а результаты передавайте остальным через BroadcastChannel. Это две разные задачи: блокировка координирует работу, канал доставляет сообщения. Отдельно нужны начальная синхронизация новой вкладки и поведение при остановке исполнителя.

Какую работу действительно можно сделать общей

Объединять стоит чтение одинакового набора данных в одном пользовательском контексте. Если вкладки открыли разные организации, фильтры или записи, один результат может им не подходить. Перед выбором API опишите ключ общей задачи: что читаем, с какими условиями и для кого.

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

Блокировка живёт столько, сколько выполняется задача

В описании Web Locks API на MDN показано получение именованной блокировки и её освобождение после завершения задачи. API доступен в поддерживающих его безопасных контекстах. Это локальная координация браузерных контекстов, а не блокировка серверного ресурса на всех устройствах.

Для длительного опроса недостаточно получить lock, запустить отдельный таймер и сразу завершить callback. В таком устройстве программы право на общую работу освобождается раньше самой работы. Жизненный цикл callback должен охватывать выбранный период исполнения и его корректное завершение.

В спецификации Web Locks описаны запросы и выдача блокировок. Для приложения поверх этого механизма всё равно нужны собственные решения: имя задачи, начало опроса, условия остановки и обработка ошибок. Наличие lock не устанавливает их автоматически.

Канал сообщений не заменяет выбор исполнителя

BroadcastChannel позволяет подходящим браузерным контекстам обмениваться сообщениями. MDN отдельно уточняет ограничение общей storage partition. Поэтому нельзя обещать связь любых страниц только на основании похожего адреса или одного названия канала.

Само сообщение «я исполнитель» не даёт исключительного права выполнять опрос. Две вкладки могут начать работу одновременно, если ваше правило выбора на этом заканчивается. Используйте отдельный механизм координации и отдельный протокол обмена результатами, не приписывая каналу функции блокировки.

Учебный жизненный цикл трёх вкладок

Предположим, вкладки А и Б показывают один список задач. Затем открывается В, а А штатно прекращает общую работу. Это вымышленная схема для проектирования и приёмки, а не измерение производительности конкретного продукта. Интервал опроса здесь намеренно не задан как универсальная норма.

СостояниеКто опрашиваетЧто получают остальныеЧто важно проверить
А получила право, Б ожидаетА, пока держит нужную блокировкуПодтверждённые результаты для общего ключаБ не запускает параллельный такой же цикл
Открылась новая ВПрежний исполнительВ запрашивает текущий снимок или получает его предусмотренным способомВ не ждёт бесконечно неизвестную прошлую рассылку
Пришла ошибка чтенияТекущий исполнитель по правилу повторовСостояние ошибки и известная актуальность прежних данныхНет мгновенного самостоятельного опроса из всех вкладок
А штатно завершила работуСледующая получившая право вкладкаНовый подтверждённый результатСтарый цикл остановлен до появления второго
Исполнитель не отвечает после фонового переходаОпределяется предусмотренным сценарием деградацииЯвный статус неподтверждённой свежестиОтсутствие сообщения не принято за доказанное освобождение lock

Как новая вкладка узнаёт текущее состояние

Рассылка результата не равна хранилищу истории. Не проектируйте новую вкладку так, будто она обязана получить сообщение, отправленное до её подключения. Определите отдельный запрос текущего снимка или начальное чтение по согласованному правилу.

Ответ должен содержать ключ набора данных и признак версии либо другой выбранный способ проверки актуальности. Получатель сверяет, что результат относится к его текущей рабочей области. Локальное время отправки удобно для наблюдения, но не обязано задавать порядок изменений серверной записи.

Решите, как обрабатывается совпадение начального чтения и очередной рассылки. Если поздно пришёл более старый снимок, он не должен молча затереть подтверждённое новое состояние. Сам формат сообщения и правило сравнения версий нужно определить в приложении.

Что происходит при ошибке и уходе вкладки

Разделите сетевой отказ, штатную остановку и отсутствие активности исполнителя. В первом случае может требоваться ограниченный повтор, во втором — освобождение ресурсов, в третьем — диагностика. Эти состояния нельзя свести к правилу «нет сообщений — всем немедленно начать опрос».

Не обещайте точный интервал фоновой работы только потому, что таймер создан. Для состояния без подтверждённой свежести задайте видимое поведение: оставить прежние данные с отметкой, предложить обновление или ограничить зависящее от актуальности действие. Выбор зависит от задачи продукта.

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

Как проверить решение без обманчивого счётчика

  1. Выберите одинаковый набор данных и подпишите ключ общей задачи.
  2. Откройте несколько вкладок и проверьте, какая получила право опроса и когда оно заканчивается.
  3. Сверьте серверные запросы и получение одного результата остальными вкладками.
  4. Добавьте новую вкладку между рассылками и проверьте получение текущего состояния.
  5. Завершите исполнителя, затем проверьте сетевую ошибку и фоновый переход отдельно.
  6. Проверьте смену пользователя, рабочей области и неподдерживаемый API в согласованных браузерах.

Сравнивать нужно не только количество запросов, но и корректность экрана. Один запрос на все вкладки бесполезен, если новая вкладка остаётся пустой или получает результат другой организации. План проверки выше нужно выполнить в тестовой среде; готовых измерений вашего приложения в статье нет.

Что такое решение не защищает

Другой браузер и другое устройство имеют собственную работу. Проверка прав, лимиты и допустимость изменений остаются на сервере. Клиентская блокировка чтения не заменяет серверную защиту от повторного проведения бизнес-операции.

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

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

Вопросы и ответы

Что такое Web Locks API в задаче нескольких вкладок?

Это браузерный механизм координации доступа к именованной работе или ресурсу в его области действия. Для общего опроса приложение должно удерживать право в течение самой работы, а не только при запуске таймера.

Чем BroadcastChannel отличается от Web Locks?

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

Как проверить поддержку Web Locks в Safari и других браузерах?

Сверьте совместимость для используемых версий и проверьте наличие API в своей среде. Затем выполните сценарии получения права, остановки и деградации; одно наличие свойства не подтверждает корректность вашей схемы.

Нужна помощь с проектом?

Обсудим задачу и предложим решение — от сайта до SaaS и защиты.

Связаться