slavchickalpha
@slavchickalpha

Как можно определить последнюю открытую вкладку сайта в браузере, на JS?

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

Если открыть сразу несколько вкладок сайта в одном браузере, то все они будут отправлять фоновые запросы, что будет создавать лишнюю нежелательную нагрузку на сервер. Достаточно лишь, чтобы эти запросы отправлялись в последней открытой вкладке. Как средствами JS можно определить такую вкладку?
  • Вопрос задан
  • 327 просмотров
Пригласить эксперта
Ответы на вопрос 2
@rPman
Вопрос составлен ужасно, но если я верно понял - у вас высокая нагрузка на сервер из-за неправильно выбранной технологии.

Чтобы на стороне клиента мониторить события, которые им хочет сообщать сервер, вам нужны websocket или хотя бы long pooling (устаревшая технология на тот случай, если вебсокеты не доступны).

Первое очень просто - клиент держит специальное подключение к специальному websocket серверу, который вы должны поднять на сервере (реализация вебосокет есть на всех популярных языках, начиная с php).
Пример сервера - https://reactphp.org/
На клиенте - штатный https://developer.mozilla.org/en-US/docs/Web/API/W...

Второе - специальный запрос к бакенд серверу на файл, который сервер не отдает до тех пор пока ему не понадобится что то сообщить клиенту (причем каждому клиенту сервер по своему отдает это файл), это реализуется на любом языке очень просто, но не так эффективно как через вебсокет сервер.
Пример -https://github.com/panique/php-long-polling
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Вкладки в браузере имеют возможность общаться между собой. При открытии новой страницы, вам нужно просто посылать сигнал, чтобы другие вкладки с вашего сайта само-закрылись или прекратили работу. Таким образом сессия будет работать только с одной вкладки.

Но нужно понимать, что это не спасет вас, если юзер откроет ваш сайт с двух разных браузеров или устройств. На этот случайно нужно уже делать проверку на сервере и если есть сессия где-то еще, то принудительно прекращать ее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы