5

我有一个要在手机上运行的 Web 应用程序,当它打开时会连续生成数据(根据设置,每隔几秒或每隔几分钟生成几千字节),并且需要将其实时推送到服务器。从来没有数据从服务器发送到浏览器。

我主要关心的是让这个提交电池高效,延迟几秒钟是完全可以的。

我设想了两种解决方案:

  1. 定期使用数据对服务器进行POST(以避免需要维护永久连接)
  2. 有一个打开的websocket并定期发送消息(以避免 http 请求的重量)

哪一种对电池最有效?我还缺少其他策略吗?


实际上我的应用程序将托管在不支持 websockets的 heroku 上,导致长时间轮询,因此目前我认为按需发布更好,但我想知道它是否可以成为未来的选择(或者这个假设可能是错误的)。

4

1 回答 1

2

安卓

如文档所述,在 Android 设备上,存在三种不同的网络无线电状态:

典型 3G 网络无线电的状态机由三种能量状态组成:

  1. 全功率:在连接处于活动状态时使用,允许设备以尽可能高的速率传输数据。

  2. 低功耗:一种中间状态,在完全状态下使用大约 50% 的电池电量。

  3. 待机:没有网络连接处于活动状态或不需要网络连接的最低能量状态。

虽然低状态和空闲状态消耗的电量显着减少,但它们也会给网络请求带来显着的延迟。从低状态恢复到全功率大约需要 1.5 秒,而从空闲到全功率可能需要 2 秒以上。

设备在 5 秒的空闲时间后从 Full 变为 Low,然后再过 12 秒后从 Low 变为 Standby。

上面的链接还涵盖了一些电池友好连接的最佳实践,尽管它没有具体说明 Websockets。

iOS

我在 iOS 设备上找不到这样的特定文档,但该模型似乎以类似的方式应用

蜂窝和 Wi-Fi 无线电设计为在没有活动时关闭。但是,根据收音机的不同,这样做可能需要几秒钟。如果您的应用程序每隔几秒钟传输一次小数据突发,那么无线电可能会保持通电并继续消耗电力,即使它们实际上并没有做任何事情。与其更频繁地传输少量数据,不如一次或以相对较大的间隔传输大量数据。

所以呢?

一般来说,您应该使用较短的 POST 请求并尽可能少地发送数据,以便无线电可以在这两者之间关闭。

于 2012-10-31T14:37:27.200 回答