Как стать автором
Обновить

Комментарии 20

Только недавно обсуждали варианты реализации, Ваш хорош лаконичностью и альтернативными механизмами (передача данных через кукизы и использованием событий закрытия вкладок/окон), но есть и минусы: если вкладки виснут, или залипают на время (что не редкость) то мастеров станет несколько, поэтому без heartbeat для каждой вкладки не обойтись. Надеюсь, кто-то слепит все вместе, уже почти-почти.
Буду благодарен если подскажете, как мне воспроизвести это залипание.
А почему не использовать WebWorkers? Почему не «сбросить тяжелую логику» в отдельный thread?
Это не поменяет смысла. Идея в том, что когда открыто 10 вкладок одного сайта — можно обрабатывать логику только в одном из потоков. Можно сделать этот поток на веб воркере, но это не принципиально и зависит только от того как реализован конкретный проект.
Для этого есть SharedWebWorkers и тогда решения с localStorage уходят в прошлое — не нужно никаких костылей. Но поддержка их браузерами к сожалению пока не радует: caniuse.com/#feat=sharedworkers
Что такое «10 вкладок одного сайта»?

Это 10 instances одного приложения или одно приложение открывает 10 страниц?
Если второе то почему это не SPA?
Я открыл gmail, нажал Ctrl+T, в открывшейся новой вкладке руками вписал plus.google.com, потом переключился обратно на первую страницу и перелогинился. Plus в этот момент должен меня тоже перелогинить.

Как вы это в SPA запихнете?

«Plus в этот момент должен меня тоже перелогинить.» это еще зачем? В смысле спорный вопрос.
Я например хотел бы видеть две tabs с моими gmail ящиками.

А вообще это вопрос взаимодействия двух приложений. Решаемо банальным повешением observers на localStorage.
Если они часть одной suite то должны отдаваться с одного URL.

Ну да ладно, вопрос то был в другом: зачем для тяжелой логики отдельное окно?
Как это «вопрос был в другом»?

Для тяжелой логики gmail — одно окно, для тяжелой логики plus — второе. А пользователь один. Он один и в Гугле, и в Яндексе; иначе все запросы, которые должны пройти через passport офигеют. Или мы окажемся недалеко от отсылки пароля плейнтекстом.

Подгружать логику плюса (и всего остального) в почту — не вариант, вы же понимаете.
Я не очень понял, откуда в посте вдруг всплыла «тяжёлая логика», но изначально там было вполне разумное условие: есть соединение по вебсокету, есть туча вкладок сайта — вполне естественно не открывать по соединению на каждую вкладку, а держать только одно соединение, в какой-то одной вкладке, а с остальными общаться внутри браузера.
Слышал, будто браузеры понижают приоритет неактивных вкладок.
Подтверждаю, есть такое. Правда на cross-window общение это не сильно влияет, в основном на таймеры.
Но влияет на скорость работы супер-мастера. Может, имеет смысл супер-мастером делать активное окно, когда оно есть?
То что вы описали было у меня по умолчанию (в проекте dueljs). Я предложил философию (о которой ведется речь в статье) в качестве эксперимента. Я сам лично тоже придерживаюсь вашей точки зрения.
Писать в тексте «ложить» ещё до ката — это очень, очень плохая идея :)
Ну, коли это поправили, так добавьте запятую (а лучше — тире) после слова «класть», потому что иначе предложение воспринимается как:
  1. вкладка активна => держать
  2. вкладка неактивна => класть является не продуктивным
Что используется в качестве идентификатора вкладки?
Конкретно в TabNinja — цифра, а в DuelJS генерируется рандомная строка.
github.com/studentIvan/tabninja/blob/master/public/lib/tabninja.js#L42 — генерация цифры

Почему в DuelJS используется именно строка, а не цифра — потому что там нет стека вкладок.
github.com/studentIvan/dueljs/blob/master/public/lib/duel.js#L169
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории