少し前に、マスター(アクティブ)またはスレーブ(非アクティブ)タブのステータスを判断するための便利なインターフェイスを提供するDuelJSライブラリの開発を開始しました。 ただし、後でWebソケットの接続を最適化するための提案を受け取り始めました。 DuelJSアプローチ:タブがアクティブな場合->接続を維持し、非アクティブな場合-> put-生産的ではありません。 TabNinja拡張機能が役に立ちます。

新しいロジック
以下のスクリーンショットを見れば、古いロジックを簡単に理解できます。

TabNinjaは、古いロジックに加えて新しいロジックを提供します。
ロジックのタブ (別名superMaster)は常に同じであり、常に同じです。 このタブ自体を閉じると、1つの場合にのみ変更されます。 この場合、superMasterのステータスは、残りのタブから最も古い別のタブに自動的に変更されます。 過剰な接続の問題は解決されました。
TabNinjaには基本的に1つの単純な関数があります。
window.isSuperMaster();
DuelJSなしでTabNinjaを使用することもできます。この場合、対応するマーク(tabninja.without_duel.min.js)が付いたリポジトリのファイルを使用する必要があります
アルゴリズムの概要
TabNinjaアルゴリズムは非常に単純で、localStorage + sessionStorageに基づいています。
1. localStorageが使用できない場合-すべてのタブがsuperMasterになります
2.現在のタブは、sessionStorageの事故制御変数を参照します
3.変数がない場合-変数が設定され、アクティブなタブのスタックが削除されます
4.現在のタブは、localStorageを介してアクティブなタブのスタックにアクセスします
5.アクティブなタブのスタックが空の場合-スタックを作成してそこに自分を置きます
6.誰かがすでにアクティブなタブのスタックにいる場合、メインのタブがスタックの最初のタブになります。
7.タブを閉じるとき:スタックから引き出します
便利なリンク
-TabNinjaなしのDuelJSデモ-TabNinjaを使用したDuelJSデモ-DuelJSを使用しないTabNinjaデモ-GitHubのTabNinjaリポジトリ-GitHubのDuelJSリポジトリ-
サイト上のDuelJSの簡単な概要-readthedocsのDuelJSドキュメント-people.howstuffworks.com/ninja.htmから撮影したトピックの写真
DuelJSライブラリを改善するためのアイデアをここまたは問題で送信してください、ありがとう。
私はほとんど忘れていました:README.mdでテストされたブラウザのリストを注意深く見てください
PS:現在、Internet Explorer 11でTabNinjaのパフォーマンスの改善に取り組んでいます-tabNinjaの動作を破壊する不適切な動作が発生することがあります。