標籤:

移動網路下的性能優化之省電篇

隨著3G和4G網路的普及,用戶使用APP的場景更多地集中在移動網路下。同時也帶來了手機電量消耗更快和網路延遲更高的問題。想開發出用戶體驗更好的應用,就需要對移動網路有更深入的了解。本系列文章分為上下兩篇,分別介紹如何開發出更省電和網路延遲更低的移動應用程序。本篇文章主要介紹移動網路的一些基本工作原理以及降低手機耗電的優化方案。

初窺2G,3G,4G網路

說起移動網路我們不得不提香農定理。香農定理是所有通信制式最基本的原理,它描述了有限帶寬、有隨機熱雜訊信道的最大傳輸速率與信道帶寬、信號雜訊功率比之間的關係。其用公式可表示為:

C = B lb(1+S/N)

其中:C是信道支持的最大速度或者叫信道容量;B是信道的帶寬;S是平均信號功率;N是平均雜訊功率;S/N即信噪比。

移動網路技術的發展也無法跳出這個公式。從最初的1G網路技術到現在的4G網路技術,都是在利用這個公式提高速度。要麼讓頻段資源得到充分的利用,要麼提高整體帶寬。但是無論如何改進,頻段資源都是有限的。在擁擠的城市或者人扎堆的地方,很容易分配不到無線資源。即使分配到資源,也會因為使用人數過多而導致速度變慢。所以不得不制定出更優秀的策略來提高資源的有效利用。這就是我們下面要講的無線資源控制(RRC)。

無線資源控制 (RRC)

什麼是無線資源控制協議呢?我們先來看看手機發送一條信息的通信過程。

欲通信,先同步。手機在空閑狀態下是無法通信的,當有通信需求時,手機會自動搜索信號,直到它搜到一個「信號非常強的全0序列」,就完成了鎖定某個頻道的過程。鎖定頻道之後,手機接下來就需要和通信系統校準時間,這就是同步過程。

欲接入,先申請。取得了頻率和時間上的同步後,手機向控制平台發送通信請求,控制平台收到請求後,會找到空閑的時隙資源(時分多址技術中術語)分配給手機,並將手機切換到Active狀態,這樣手機就可以通信了。通信完成後,過一段時間,控制平台又會回收手機佔用的通信資源,進入低耗能模式或者空閑模式。整個這一通信過程就是RRC所做的事情。

移動網路耗電的原因

前面提到了控制平台下不同模式的切換,下面是它的具體工作原理:手機在不傳輸數據的情況下一般處於空閑狀態(Idle),當有發送數據需求時必須向控制平台發送申請。只有將手機切換到Active狀態,也就是高耗能模式下才能進行通信。這一切換過程在4G網路下需要花費100ms的時間。通信完成後,手機不會一直處於高耗能模式下等待數據傳輸,它會切換到低耗能模式(Short sleep)。如果手機處於低耗能模式時接到數據發送請求,那麼它又會切換到高耗能模式來發送數據。在頻繁的數據請求中,它會在低耗能模式和高耗能模式不斷的切換,而在不發送數據時,在10s後會再次進入空閑模式下。它會周期性的切換模式來確保資源的有效利用。

為什麼存在耗能模式切換呢?因為無線資源是相對短缺的資源,在沒有數據請求時就要對無線資源進行回收。

移動網路只有在處於DCH(高耗能模式)和 FACH(低耗能模式)下才會消耗手機電量。從上圖可以看出,一次耗能模式切換大概需要花費10s,而且不管你傳輸的數據大小,它都會觸發一次耗電周期,消耗10s的電量。

假如一個手機有5Wh(18000 J)總電量,手機完成一次從空閑模式切換到高耗能模式,再到低耗能模式,再到空閑模式的循環大概需要10J能量。如果每分鐘切換一次,那麼一個小時需要消耗60*10J = 600J電量,也就相當於總電量的3%。如果一個APP在後台每分鐘發送一個請求,那麼手機處於待機狀態下一天就耗掉了3%* 24 = 72%的電。這就是為什麼智能手機即使在待機狀態下耗電量也非常大的原因。

如何省電

下面是我們根據上面提到的原因給出的五個可行的優化方案:

  • 合併請求

在移動通信中,無論傳輸數據大小,每次數據傳輸都會觸發一次大約10s的耗電。合併請求不僅能減少 DNS請求時間、伺服器壓力和HTTP請求,而且能夠大大減少移動網路下手機電量的消耗。

  • 預取數據

和合併請求原理一樣,預取數據能讓手機快速切換到空閑模式,並且在這個狀態下保持更長的時間,以達到省電的目的。

  • 避免輪詢

輪詢是指不管伺服器端有沒有更新,客戶端都定時的發送請求進行查詢。輪詢可能會返回更新的信息,也可能會返回空的信息。輪詢不僅增加了服務負擔,而且會使手機長期處於高耗能模式,在幾小時內就耗盡電池。

  • 重連機制優化

一般重連機制都有幾個重要參數:心跳時間間隔、重連超時時間及重連次數。其中心跳包每天會將手機從空閑模式喚醒近300次,一般的Android手機每天有超過15-20%的電量被消耗在發送過度頻繁的心跳上。另外如果手機連不上伺服器而不斷的重試,在幾小時內就會耗光電池。所以心跳時間不宜過短,據測試微信心跳時間為300s,可以作為一個參考。同樣也不能永無休止的重連,重連幾次還連不上,可以直接把問題拋給用戶,由用戶決定是否繼續重連。

  • 數據緩存

最省電的方式就是不使用移動網路,數據緩存能夠大大減少網路請求的次數,達到省電的效果。

閱讀原文 作者:王, 軍鵬

weixin.qq.com/r/VjuLk3D (二維碼自動識別)


推薦閱讀:

UWA 六月直播季 | 6.22 Unity中動畫系統性能優化方案回顧
20 行 python 代碼實現函數的 cache 功能
IT故障頻繁造成飛機延誤 雲智慧透視寶快速故障溯源有效降低業務損失

TAG:性能优化 |