...

воскресенье, 22 февраля 2015 г.

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

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


Новая логика




Понять старую логику легко взглянув на нижеприведенный скриншот:



TabNinja предлагает новую логику поверх старой:



Вкладка с логикой (она же superMaster) всегда одна и всегда есть. Она меняется только лишь в одном случае — при закрытии этой самой вкладки. В этом случае автоматически статус superMaster переходит другой, наиболее старой вкладке из оставшихся вкладок. Проблема избыточных соединений решена.

TabNinja по сути есть одна простая функция:



window.isSuperMaster(); // при использовании вместе с duel не путайте с window.isMaster()




Вы также можете использовать TabNinja без DuelJS, в этом случае вам стоит использовать файл из репозитория с соответствующей пометкой (tabninja.without_duel.min.js)

Обзор алгоритма работы




Алгоритм TabNinja весьма прост и базируется на localStorage + sessionStorage.

1. Если localStorage недоступен — все вкладки будут являться superMaster

2. Текущая вкладка обращается к переменной контроля аварийности в sessionStorage

3. В случае если переменной нет — устанавливается переменная и удаляется стек активных вкладок

4. Текущая вкладка обращается к стеку активных вкладок через localStorage

5. Если в стеке активных вкладок пусто — создать стек и поместить туда себя

6. Если кто-либо уже присутствует в стеке активных вкладок, значит главный тот кто первый в стеке

7. При закрытии вкладки: вытащить её из стека

Полезные ссылки




Демо DuelJS без TabNinja

Демо DuelJS с TabNinja

Демо TabNinja без DuelJS

Репозиторий TabNinja на GitHub

Репозиторий DuelJS на GitHub

Краткий обзор DuelJS на сайте

Документация DuelJS на readthedocs

— Картинка топика взята с http://ift.tt/1vV07dO

Предлагайте свои идеи по улучшению библиотеки DuelJS сюда или в issues, спасибо.

Чуть не забыл: внимательно смотрите список тестируемых браузеров в README.md


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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий