app優化之流量節省

前言:「客戶端上傳時間戳」的玩法,你玩過麼?一塊兒聊聊時間戳的奇技淫巧!,其實這個相似於數據版本號的東西。服務器

緣起:無線時代,流量敏感。APP在登陸後,每每要向服務器同步很是多的數據,很費流量,技術上有沒有節省流量的方法呢?這是本文要討論的問題。微信

問題一:APP登陸時須要拉取什麼數據?
答:APP登錄時,通常要拉取兩類數據,一類是「id列表型數據」,一類是「信息詳情型數據」,以微信爲例,須要拉取
(1)好友列表List<user-id>,即全部好友的id(id+name)
user_frined{uid, friend-uid, friend-name}
(2)羣組列表List<group-id>,即全部加入羣的id(id+name)
(3)羣友列表Map<group-id, List<group-user-id>>,全部羣友的id(id+name)
(4)好友詳情Map<user-id, User>,全部好友的詳情(暱稱,備註,標籤,地區,相冊等)
user{uid, nick-name, memo, locate, tag}
(5)羣組詳情Map<group-id, Group>,全部羣組的詳情(二維碼,公告,是否免打擾等)
(6)羣友詳情Map<group-id, Map<user-id, User>>,全部羣友的詳情(暱稱,備註,標籤,地區,相冊等)
(7)其餘,例如離線消息…網絡

問題二:能不能在登陸的過程當中不拉取這些數據,而在登陸後拉取?
答:若是登陸時不拉取,登錄後刷好友列表,刷羣列表,羣成員會很慢。
若是登陸時拉取,登錄過程可能會很慢(微信的「大月亮背景」要等多長時間?QQ登陸要等30s?)。
爲了保證登陸後的體驗,通常是在登陸過程當中拉取。less

問題三:能不能直接複用客戶端本地的數據?
答:不能直接複用客戶端本地的數據,由於不能確保本地的數據是最新的。優化

核心問題:每次登陸都須要拉取,太費流量了,有沒有優化方法?
答:經常使用優化方法有兩種
(1)延遲拉取,按需拉取
(2)時間戳ui

問題五:延遲拉取,按需拉取爲何有效?爲何可以減小拉取流量?
答:用戶在使用APP的過程當中,有些數據是必定會使用到的,有些數據是不必定會使用到的。對於必定會使用到的數據,登陸時拉取能夠提高後續用戶體驗。對於不必定會使用到的數據,登陸時拉取可能浪費流量,這些數據若是進行「延遲拉取」,能夠節省流量。同步

問題六:哪些數據不登陸後不必定會使用,能夠延遲拉取?
答:這個問題的答案和業務緊密相關,以微信爲例
必定會使用到的數據:好友列表(主頁面要展現user-name),羣組列表(主界面要展現group-name)
不必定會使用到的數據:好友詳情,羣組詳情,羣友列表,羣友詳情
故,對於微信,登陸時只須要拉取好友列表(id+name)與羣組列表(id+name)便可,而其餘數據,等用戶真正點擊和使用時再拉取便可,這樣就能夠大大減小拉取流量。登錄

問題七:時間戳爲何有效?爲何可以減小拉取流量?
答:本地數據不能直接使用的緣由是,不肯定數據是否最新,拉取服務器時間戳與本地時間戳進行比對,若是本地是最新的數據,就能避免從新拉取。id列表數據的變化頻度是比較低的(增長id,減小id),時間戳機制很是的有效。用戶體驗

問題八:加入時間戳機制後,數據拉取流程有什麼變化?
答:假設有100個好友,以好友詳情數據的拉取爲例,沒有時間戳以前,直接向服務器拉取這100個好友的詳情數據。
在有了時間戳以後,數據拉取流程變爲:
(1)先拉取100個好友的時間戳
(2)客戶端將100個好友的時間戳與本地時間戳對比,找出差別,假設有10個好友的信息發生了變化,時間戳改變了
(3)拉取10個有變化的好友的信息
優勢是:大大減小了數據傳輸量(由拉取100個好友,下降到拉取10個好友)
缺點是:增長了一次網絡交互(原來直接拉取,如今須要分別拉取時間戳與差別數據)List

問題九:使用時間戳的同時,可否下降網絡交互次數呢?
答:能夠!
客戶端對時間戳的使用,每每採起「客戶端拉取時間戳」+「客戶端比對時間戳」+「客戶端再次拉取差別數據」的方式進行,「時間戳比對」的的CPU計算髮生在客戶端,其實,這個計算能夠轉嫁到服務器,步驟爲:
(1)客戶端上傳100個好友的時間戳
(2)服務端收到客戶端上傳的時間戳,與最新時間戳對比,找出差別,假設有10個好友的信息發生了變化,服務端能夠直接將有差別的10個好友的數據返回
優勢是:客戶端減小了一次網絡請求
缺點是:比對時間戳差別的CPU計算由「端」轉嫁到了「雲」

問題十:你怎麼知道微信是這麼作的?
答:我不知道微信是怎麼作的,微信比較出名,因此標題黨了一把,抱歉。「客戶端上傳時間戳」的方法,58幫幫APP是這麼作的,但願對業界同仁有啓示做用。

 轉自:http://www.habadog.com/2015/10/23/wechat-use-less-data/

相關文章
相關標籤/搜索