GoogleChromeのバックグラウンドタブからのデータ送信が遅い現象について
お世話になっております。
表題の件について相談させてください。
■現象
DataConnectionのSendの処理時間について、通常は数ミリ秒で送信されますが、GoogleChromeのバックグラウンドタブ(選択されていないタブ・または最小化状態)から送信した場合、1秒弱掛かることがあります。
また、連続でバックグラウンドタブ側からSendした場合、約1秒間隔でデータが送信されます。
※例えば、連続で3回sendした場合、通常は10ms程度で完了しますが、バックグラウンドタブからの場合2000ms~3000ms掛かります。
■検証環境
・Windows10 / macOS 10.13.3
・Chrome 64.0.3282.140
・SkyWay.js 1.1.5
■原因
私の方で調査してみたところ、ブラウザの仕様でバックグラウンドタブの「setInterval」のウエイトが最低1000msになるのが原因のようです。
skyway.js内で、データ送信する場合に「setInterval」を使用されている箇所があります。
通常は1msのポーリングでデータ送信されるですが、バックグラウンドタブの場合は 1000msでポーリングされてしまい、データ送信が遅くなってしまうようです。
■対策のお願い
ブラウザ側の仕様の問題かも知れませんが、SkyWay側での対策を検討して頂けないでしょうか?
以上、宜しくお願いします。
-
回答ありがとうございます。
またワークアラウンドについてもありがとうございます。私の方でも調査をしていて、色々と試したところ
以下のような方法でもバックグラウンドタブでも遅くならずに動作する事を確認できました。
(ただ、PC版のGoogle Chromeだけでしか検証してないです)----
WebWorkersを使用し、バックグラウンドタブの1000ms制限を無視。
※ForcedTimerというjsを使用
https://github.com/Kanasansoft/ForcedTimer/tree/master/with_webworkers上記を組み込んで
skyway.js(dataConnection.js)内の setInterval / clearInterval をそれぞれ
ForcedTimmer.setInterval / ForcedTimmer.clearInterval に変更。----
他ブラウザや、他の環境でも動作するかは未検証ではあるのですが
こういった方法でも、とりあえずChromeの場合は回避できそうでした。
Please sign in to leave a comment.
Comments
2 comments