Решение задачи сброса тяжелой логики на одну из множества открытых вкладок

Не так давно я начал разрабатывать библиотеку DuelJS, которая предоставила удобный интерфейс для определения состояния вкладки Master (активная) или Slave (неактивная). Однако позже мне начали поступать предложения для оптимизации соединений по веб-сокетам. Подход DuelJS: если вкладка активна → держать соединение, если неактивна → ложить является не продуктивным. На помощь приходит расширение TabNinja.04ce7dc4f40c46bea023987a93774819.jpg

Новая логикаПонять старую логику легко взглянув на нижеприведенный скриншот: 409198916fee40f8b175e8ba706f2211.pngTabNinja предлагает новую логику поверх старой: e38a4da46c9d4d1a9acc156907151335.pngВкладка с логикой (она же superMaster) всегда одна и всегда есть. Она меняется только лишь в одном случае — при закрытии этой самой вкладки. В этом случае автоматически статус superMaster переходит другой, наиболее старой вкладке из оставшихся вкладок. Проблема избыточных соединений решена.TabNinja по сути есть одна простая функция:

window.isSuperMaster (); // при использовании вместе с duel не путайте с window.isMaster () Вы также можете использовать TabNinja без DuelJS, в этом случае вам стоит использовать файл из репозитория с соответствующей пометкой (tabninja.without_duel.min.js)Обзор алгоритма работы Алгоритм TabNinja весьма прост и базируется на localStorage + sessionStorage.1. Если localStorage недоступен — все вкладки будут являться superMaster2. Текущая вкладка обращается к переменной контроля аварийности в sessionStorage3. В случае если переменной нет — устанавливается переменная и удаляется стек активных вкладок4. Текущая вкладка обращается к стеку активных вкладок через localStorage5. Если в стеке активных вкладок пусто — создать стек и поместить туда себя6. Если кто-либо уже присутствует в стеке активных вкладок, значит главный тот кто первый в стеке7. При закрытии вкладки: вытащить её из стекаПолезные ссылки  — Демо DuelJS без TabNinja— Демо DuelJS с TabNinja— Демо TabNinja без DuelJS— Репозиторий TabNinja на GitHub— Репозиторий DuelJS на GitHub— Краткий обзор DuelJS на сайте— Документация DuelJS на readthedocs— Картинка топика взята с people.howstuffworks.com/ninja.htmПредлагайте свои идеи по улучшению библиотеки DuelJS сюда или в issues, спасибо.Чуть не забыл: внимательно смотрите список тестируемых браузеров в README.md

P.S: Сейчас работаю над улучшением работы TabNinja в Internet Explorer 11 — иногда происходит неадекватное поведение, которое рушит работу tabNinja.

© Habrahabr.ru