#javascript #nodejs
Как проверить, во скольких вкладках открыт сайт? Чтобы можно было избежать высокой нагрузки на сервер, если например на сайте каждые пару секунд идут несколько запросов на сервер. Скажем у человека открыто 10 вкладок, но пользуется только 1. А в итоге еще 9 отправляют 5 запросов на сервер каждые 2 секунды, хотя толку от этого нет.
Ответы
Ответ 1
В современных браузерах неактивные вкладки способны практически замораживаться. Например, в хроме прекращается обработка таймеров, прекращается requestAnimationFrame. Если отвечать в общем на вопрос, проверьте для начала какой нибудь статистикой какой процент аудитории открывает несколько вкладок, иначе все дальнейшие оптимизации будут крайне несущественными.Ответ 2
Некогда делали так. Ставим интервал, каждый раз увеличивая счетчик. Если счетчик достиг определенного значения, запросы на сервер не отправляем. Если на странице происходят какие-то шевеления (события ниже), то счетчик обнуляем, если нужно, запускаем отправку запросов по новой. window.onscroll - прокрутка страницы window.onmousemove - движение мыши window.onfocus - переход во вкладку window.onkeydown - нажатие клавиш window.onclick - нажатие на кнопки мыши Можно сделать проще и следить только за onfocus/onblur. Но если пользователь ждет какого-то события с сайта и решил во время ожидания посмотреть что-то иное, открыв рядом второе окно, то от сайта он ничего не дождется.Ответ 3
Из комментариев нашел наиболее правильное решение для моей задачи. Использование Page Visibility API document.hidden Если вкладка видна, то следует выполнять обновление страницы, если не видна то нет смысла в обновлении. Количество вкладок значение не имеет. Это подходит для онлайн редактора, когда нужно регулярно проверять не изменил ли кто нибудь документ который ты сейчас редактируешь, но важно не посылать по 20 запросов с 20 открытых вкладок. Решения на базе onfocus и onblur имеют много недостатков. Один из них это например работа с 2 мониторами, мы открыли вкладку, переключились в другое окно, но всё еще видим нашу вкладку, однако потеряв фокус она перестала обновляться, хотя всё еще видна, и не факт что содержит самые последние сведения. Если надо и видимую вкладку замораживать, то тут уже придется вешать разные события, чтобы точно убедиться в "активности" пользователя.
Комментариев нет:
Отправить комментарий