SkyBeje開発記

SkyWayを使ったブラウザ間通信アプリを開発しています

SkyWayでChromeのバックグラウンドタブからのデータ送信が遅くなる現象について

はじめに

 表題の件について、現象は以前から認識していたのですが、ブラウザ側の問題と認識していて保留にしてました。

 TK (@TK11235)さんが開発している、ユドナリウムでもデータ送信速度が遅くなる現象が発生する様子で、ちょっと気になったので原因を調査してみました。

検証環境

Windows 10
Chrome 64
・SkyWay.js 1.1.5

データ送信(DataConnectionのsend)が遅くなる原因について

 ブラウザ側の仕様で、バックグラウンドタブの「setInterval」のウエイトが、最低1000msになるのが原因のようです。

 参考サイト:モダンブラウザのタイマー処理の制限をWebSocketを使って突破する(WebWorkersについて追記あり) (Kanasansoft Web Lab.)


 skyway.js内でデータ送信する際に「setInterval」を使用している箇所があります。
 ウェイトは1msを指定しているようなので、通常は数ミリ秒で送信されますが、バックグラウンドタブからの場合に、1秒間に1回しかデータがsendされないようです。

 そのため連続sendした場合にデータが溜まり、重くなるようです。

現象が発生する具体的なケース

 ユドナリウムの場合、プレイヤー間でPeer接続する場合に各種データを送信しあうと思うのですが、Peer接続される側のバックグラウンドタブ(または最小化状態)の場合、データ取得が少し遅れるようです。
 
 実際にユドナリウムを2つ開いて接続する事で、現象を確認できます。
(接続される側に、画像やチャットメッセージを少し登録して試すと体感できます)

 2つともフォアグラウンドタブの場合
 すぐに相手側のチャットメッセージが表示されると思います。

f:id:iwatendo:20180207230149p:plain

 

 接続される側(右側)がバックグラウンドタブ(または最小化状態)の場合
 チャットや画像が接続元(左側)に表示されるまで、約2~3秒掛かります。

f:id:iwatendo:20180207230931p:plain

 

 秒数的に、左側から右側のタブへ3回程sendしていると思われます。

 ちなみに私が作っているサービスでは、もっと遅延を発生させる事ができるのですがPC1台で再現させる手順が若干複雑なので省略します。

解決策案について

 SkyWay側の問題というより、ブラウザの仕様の問題とは思うのですが、skyway.js側で、なんらかの対策を入れて貰うと嬉しいので、対策を開発者コミュニティの方にお願いしてみたいと思います。

 

追記:
 SkyWayの開発者コミュニティでお願いした所、回答を頂けました。SkyWay側でサポートするのは難しいとの事ですが、対策方法等を教えて頂けました。また、私が実施した対策も書いてあるので、この問題で困った場合は、以下も参考にしてみてください。

support.skyway.io