有效的网络访问优化下载

来源:互联网 发布:securecrt for mac 编辑:程序博客网 时间:2024/04/30 06:05

使用无线电波(wireless radio)进行数据传输可能是应用最耗电的操作之一。为了降低网络连接的电量消耗,清楚的理解连接模型(connectivity model)如何影响底层的无线通讯硬件设备,显得尤为重要。

这节课介绍了无线电波状态机(wireless radio state machine),并解释了应用的连接模型(connectivity model)是如何与之交互的。进而我们会提出一些建议和方法去优化数据连接,使用预取策略(use prefetching),捆绑传输,最终达到降低数据传输的电量消耗的目的。

无线电状态机


一个完全活动的无线电会消耗非常大的电量,因此我们需要让它在不同的能量状态之间切换,在非使用状态时保存电量,在启用时最小化延迟。

典型的3G无线电网络状态机包含三种能量状态:

全功耗状态(** Full power** ): 当无线连接被激活时,允许设备以最大的传输速率进行数据传输。

低功耗状态(** Low power** ): 一种中间状态,相当于全功耗状态(Full power)50%左右的功耗。

空闲状态(** Standby** ): 最低功耗状态,通常表示网络连接未激活或者无需网络连接的情况。

在低功耗或者空闲状态时,电量消耗相对来说是较少的。顺便介绍一下网络请求的延迟机制。 从low status切换到full status大约需要1.5秒,从idle status切换到full status需要2秒。 为了最小化延迟,状态机使用了一种延后过渡到更低能量状态的机制。下图是一个应用典型3G无线电波状态机的定时器,出自AT&T公司。

图1. 典型3G无线电波状态机

在每一台设备上的无线状态机,特别是相关联的延迟时间和建立延迟的过程,都会根据无线电波的制式(2G,3G,LTE等)而改变,并且由设备本身所使用的网络进行定义与配置。

这节课描述了一种典型的3G无线电波状态机,数据来源于AT&T公司这些原理经过实验证明是通用的最好的,适用于所有无线电波。

这种方法在典型的网络浏览时特别有效,利用它人们浏览网页时可以避免烦人的网络延迟。相对较低的后期处理时间同时保证了一旦一个session结束,无线电波就可以切换到一个较低的能量状态.

不幸的是,这种方法在现代智能机比如Android上的应用效率低下,因为应用本身可以同时运行在前台(此时应特别关注如何避免延迟阻塞)和后台(此时应特别关注电量消耗)。

看应用如何影响无线状态机


每一次新创建一个网络连接,无线电波就切换到full power状态。在上面典型的3G无线电波状态机情况下,无线电波会在传输数据时保持在full power的状态,结束之后会有一个附加的5秒时间切换到low power,再之后会经过12秒进入到low energy的状态。因此对于典型的3G设备,每一次数据传输的会话都会引起无线电波持续消耗大概20秒的能量。

实际上,这意味着一个app传递1秒钟的unbundled data会使得无线电波持续活动18秒[18=1秒的传输数据+5秒切换到low power的时间+12秒切换到standby的时间]。因此每一分钟,状态机有18秒处于high power状态,42秒处于low power状态。

比较而言,同样的应用每分钟持续传输3秒bundled data时, 在high power状态仅需8秒,在low power状态仅需12秒。 上面第二种传输方式每分钟节省了40秒的时间,大大的降低了电量消耗。

图2 无线电bundled和unbundled数据传输对比图

预取数据


预取(Prefetching)数据是一种减少独立数据传输会话数量的有效方法。预取技术允许你通过一次连接,最大限度的下载到给定时间内单次操作所需的所有数据。

通过预先加载传输,可以减少下载数据所需的无线电的数量。从而不仅维持了电量,而且改善了延迟,降低了带宽占用,减少了下载次数。

预取技术降低了在操作行为和浏览数据之前因等待数据下载完成而带来的延迟,从而很好的提升了用户体验。 然而,预取技术使用过度,不仅仅会导致电量消耗和带宽占用快速增长,还有可能预取到一些并不需要的数据。 同样,确保应用不会因为等待预取数据而延迟启动是非常重要的。

实际上,我们可以逐步处理数据,或者按照一定的优先级来进行数据传输,比如优先下载应用启动所需要的数据。 如何适度使用预取技术,取决于将要下载的数据的大小以及其将来被使用的可能性。

大概的策略就是,基于以上所述的状态机,如果此数据在当前的用户会话中有50%的机率被用到,那么我们可以预取大约6秒左右的数据量(大约1-2Mb),保持这样规模的数据量,可以满足潜在需要使用的数据量。

一般来说,我们仅仅只需要每隔2-5分钟开始另一段下载保持1-5MB的数据量。 根据这个原理,大数据的下载,比如视频文件,应该每隔2-5秒开始另一段下载,这样能有效的预取到几分钟预览数据。 值得注意的是,优化的下载的数据应该是bundled形式的。



分批传输和连接

每次初始化一个连接——不管数据传送的大小——当使用3G,可能会引起电波耗电20s左右。
应用每过20s会发心跳包给服务器,告诉服务器这个应用正在运行,但是这会保持电波一直在耗电,即使没有数据传送也会导致很大的电量消耗。
所以要把数据打包并创建预传输队列。这样就可以把几个传输放在一起,同时进行,保证电波耗电时间尽量短。
在每个传输的时间片段里,尽可能的多传输数据,这样就可以减少需要的时间片段。
所以要延迟传送,把数据排成队列放在一起,进行成批传输。在需要时一起执行。通常预更新和预取应该发起预传输队列的执行。









0 0
原创粉丝点击