5

私は携帯電話で実行する Web アプリケーションを持っています。このアプリケーションを開くと、継続的にデータが生成され (設定に応じて数秒ごとまたは数分ごとに数キロバイト)、リアルタイムでサーバーにプッシュする必要があります。サーバーからブラウザにデータが送信されることはありません。

私の主な関心事は、このサブミッションのバッテリーを効率的にすることです。数秒の遅延はまったく問題ありません。

私は2つの解決策を想定しました:

  1. データを使用してサーバーに定期的にPOSTを実行します (永続的な接続を維持することを避けるため)。
  2. WebSocketを開き、定期的にメッセージを送信します (http 要求の重みを回避するため)。

バッテリーの効率が良いのはどれ?私が見逃している他の戦略はありますか?


実際、私のアプリはwebsockets をまだサポートしていないheroku でホストされるため、ポーリングに時間がかかるため、当面はオンデマンドで POST する方が良いと思いますが、将来的にはオプションになるかどうか疑問に思っています(または、この仮定が間違っている可能性があります)。

4

1 に答える 1

2

アンドロイド

Androidデバイスでは、ドキュメントに記載されているように、 3つの異なるネットワーク無線状態があります。

一般的な3Gネットワ​​ーク無線のステートマシンは、次の3つのエネルギー状態で構成されます。

  1. フルパワー:接続がアクティブなときに使用され、デバイスが可能な限り最高の速度でデータを転送できるようにします。

  2. 低電力:フル状態でバッテリー電力の約50%を使用する中間状態。

  3. スタンバイ:ネットワーク接続がアクティブまたは不要な最小エネルギー状態。

ロー状態とアイドル状態では、バッテリーの消耗が大幅に少なくなりますが、ネットワーク要求にかなりの遅延が発生します。ロー状態からフルパワーに戻るには約1.5秒かかりますが、アイドル状態からフルパワーに戻るには2秒以上かかる場合があります。

デバイスは、5秒のアイドル時間後にフルからローに変わり、さらに12秒後にローからスタンバイに変わります。

上記のリンクは、Websocketについて具体的なことは何も述べていませんが、バッテリーに優しい接続のいくつかのベストプラクティスもカバーしています。

iOS

iOSデバイスでそのような特定のドキュメントを見つけることができませんでしたが、モデルは同様の方法で適用されるようです:

セルラー無線とWi-Fi無線は、アクティビティがないときに電源を切るように設計されています。ただし、ラジオによっては、数秒かかる場合があります。アプリが数秒ごとにデータの小さなバーストを送信する場合、実際には何もしていない場合でも、無線機の電源が入ったままになり、電力を消費し続ける可能性があります。少量のデータをより頻繁に送信するよりも、大量のデータを1回または比較的大きな間隔で送信する方が適切です。

だから何?

一般に、短いPOST要求を使用し、データをできるだけ送信しないようにする必要があります。そうすれば、その間に無線の電源を切ることができます。

于 2012-10-31T14:37:27.200 に答える