Comments 54
Полезность вашего решения я не отрицаю, разумеется.
Но лично я не отказался бы и просто выгружать вкладки, которые не были активны в течение суток. Еще можно детектировать наличие фокуса на текстовых полях и тд.
Как опцию или фичу — можно
Можно хранить массив из времени создания всех вкладок, но это более ресурсоемкая задача — гонять массивы
Неужели юзеры и правда открывают так много вкладок, что это становится проблемой? #янерепрезантативен
Либо нужно очень мощное железо, что дорого, либо подобное решение)
Да нет, я понял, какую проблему вы решаете:)
Я просто не понимаю, зачем юзеры открывают по две вкладки с одним и тем же.
Допустим, это twitch. У меня открыта главная страница со списком стримов, вторая на втором мониторе с активным стоимость, который я смотрю и ещё одна на фоне, я просто хочу посмотреть, что там происходит.
Или же это сайт-биржа. Я слежу сразу за несколькими котировками валюты в реалтайме
… с активным стримом...
P.S. да, сработает лишь в ряде случаев, т.к. оперативно обновлятся фоновая вкладка не будет.
Это решение породит куда больше проблем. В браузерах есть событие о том, что пользователь сделала вкладку аквтивной или ушел с нее. Т.е. мы можем открывать и закрывать соединения, а вот на сервере активные клиенты все равно будут какое-то время существовать и им будет все отдаваться в сокеты. Они будут умирать через некое время, что в моменте может порождать большое количество мертвых, но активных соединений. Это же даёт возможность при переключении их вкладки во вкладку быстро положить даже самый сильный бекенд
В моем случае — хабр можно заменить и например на Gitlab.com/СИ/Goodreads…
github.com/logux/logux-client/blob/master/cross-tab-client.js
Именно для этого мы здесь и собрались, чтобы находить лучшие решения)
Содержимое вкладки при этом стирается и заменяется «пустой» вкладкой.
github.com/klerick/fs-socket-io
function now() {
return new Date().getTime();
}
Лучше заменить на
function now() {
return Date.now();
}
А не логичнее ли в современных реалиях вынести общий коннект в ServiceWorker? Он будет гарантированно один на все вкладки одного сайта. Так же из плюсов вижу, что браузер его прибьет сам (а с ним и коннект) при длительном отсутствии активности во всех подключившихся к воркеру вкладок.
А почему бы не сделать так:
- Открываем вкладку, спрашиваем, кто главный, если тишина — становимся главным, иначе говорим главному свой ид
- в beforeunload для слейвов отправляем главному свой ID и говорим прощай
- в beforeunload для главного посмотреть список слейвов, и явно указать кто будет следующим главным.
Думаю будет меньше плясок с рандомами...
Решаем проблему миллиона открытых вкладок или «помогаем железу выживать»