Comments 16

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

Синхронизация в ВК, например, при запуске музыки. Если в одной вкладке играет Мелодия1, а в другой запускается Мелодия2, то, чтобы они не звучали одновременно, Мелодия1 останавливается.

А, вот оно, не знал. А данную технологию нельзя ли совместить с push'ами?

Вероятнее всего можно. Более того, ВК давно использует сокеты, таким образом тоже можно было бы синхронизировать состояния.

Преимущество синхронизации через браузерный storage в том, что тут нет необходимости использовать бэк. Т.е. Каждая синхронизация вроде как дешевле на два запроса. (Первый на сервер от вкладки где что-то поменялось, второй от бэка к другой вкладке, которая должна синхронизироваться с первой.)
Более того. Такая синхронизация может быть использована для того чтоб все открытые вкладки использовали одно общее вебсокет соединение. Тогда человек открывший более одной вкладки по прежнему с сервером поддерживает одно соединение.
Для меня хороший пример синхронизации вкладок — это login / logout.
А насчет выгружаемых вкладок предположу следующее. Если вкладка выгружена, в ней ничего не происходит и беспокоиться о ней не надо. Когда вкладка становится активной, она проверяет, что за события произошли и обновляется соответственно.
Это только мои предположения.
Да, я тоже так думаю.
При выгрузке она усыпляется и не будет синхронизироваться, но когда станет активной — подхватит текущее состояние
Собственно, если вкладка фоновая, то она не видна и смысла синхронизации нет. Особенно если вкладка выгружается.
А серверная синхронизация вообще имеет смысл только, если идет серверный пуш.
Это уже зависит от задачи, в фоновой вкладке пользователь может слушать музыку.
А выгрузка — это личное дело пользователя, не каждый ее юзает.
Если там играет музыка или видео, она вроде как не выгрузится из памяти.
например, при включении музыки во второй вкладке в 1 она останавливается
Спасибо за статью!

Даже про мою поделку четырёхлетней давности вспомнили (__SE__), про которую тогда писал на хабре.

Сейчас глянул исходники:
 // It is not obvious, but the next line it is a point, where the application execution starts... :-)
__SE__.Sync = __SE__.Sync;

… всплакнул %)
Лет 10 назад делали такое в проекте, только тогда localstorage был слабораспространенной фичей.

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

Хорошо что больше нет необходимости так извращаться :)
Only those users with full accounts are able to leave comments. Log in, please.
Information
Location

Россия

Employees

1,001–5,000 employees

Registered

22 April 2015