W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
答:APP登陸時(shí),一般要拉取兩類(lèi)數(shù)據(jù),一類(lèi)是“id列表型數(shù)據(jù)”,一類(lèi)是“信息詳情型數(shù)據(jù)”,以微信為例,需要拉取
(1)好友列表List<user-id>,即所有好友的id(id+name)
(2)群組列表List<group-id>,即所有加入群的id(id+name)
(3)群友列表Map<group-id, List<group-user-id>>,所有群友的id(id+name)
(4)好友詳情Map<user-id, User>,所有好友的詳情(昵稱(chēng),備注,標(biāo)簽,地區(qū),相冊(cè)等)
(5)群組詳情Map<group-id, Group>,所有群組的詳情(二維碼,公告,是否免打擾等)
(6)群友詳情Map<group-id, Map<user-id, User>>,所有群友的詳情(昵稱(chēng),備注,標(biāo)簽,地區(qū),相冊(cè)等)
(7)其他,例如離線(xiàn)消息…
問(wèn)題二:能不能在登錄的過(guò)程中不拉取這些數(shù)據(jù),而在登錄后拉取?
答:如果登錄時(shí)不拉取,登陸后刷好友列表,刷群列表,群成員會(huì)很慢。
如果登錄時(shí)拉取,登陸過(guò)程可能會(huì)很慢(微信的“大月亮背景”要等多長(zhǎng)時(shí)間?QQ登錄要等30s?)。
為了保證登錄后的體驗(yàn),一般是在登錄過(guò)程中拉取。
問(wèn)題三:能不能直接復(fù)用客戶(hù)端本地的數(shù)據(jù)?
答:不能直接復(fù)用客戶(hù)端本地的數(shù)據(jù),因?yàn)?/span>不能確保本地的數(shù)據(jù)是最新的。
核心問(wèn)題:每次登錄都需要拉取,太費(fèi)流量了,有沒(méi)有優(yōu)化方法?
答:常用優(yōu)化方法有兩種
(1)延遲拉取,按需拉取
(2)時(shí)間戳
問(wèn)題五:延遲拉取,按需拉取為什么有效?為什么能夠減少拉取流量?
答:用戶(hù)在使用APP的過(guò)程中,有些數(shù)據(jù)是一定會(huì)使用到的,有些數(shù)據(jù)是不一定會(huì)使用到的。對(duì)于一定會(huì)使用到的數(shù)據(jù),登錄時(shí)拉取可以提升后續(xù)用戶(hù)體驗(yàn)。對(duì)于不一定會(huì)使用到的數(shù)據(jù),登錄時(shí)拉取可能浪費(fèi)流量,這些數(shù)據(jù)如果進(jìn)行“延遲拉取”,可以節(jié)省流量。
問(wèn)題六:哪些數(shù)據(jù)不登錄后不一定會(huì)使用,可以延遲拉取?
答:這個(gè)問(wèn)題的答案和業(yè)務(wù)緊密相關(guān),以微信為例
一定會(huì)使用到的數(shù)據(jù):好友列表(主頁(yè)面要展示user-name),群組列表(主界面要展示group-name)
不一定會(huì)使用到的數(shù)據(jù):好友詳情,群組詳情,群友列表,群友詳情
故,對(duì)于微信,登錄時(shí)只需要拉取好友列表(id+name)與群組列表(id+name)即可,而其他數(shù)據(jù),等用戶(hù)真正點(diǎn)擊和使用時(shí)再拉取即可,這樣就可以大大減少拉取流量。
問(wèn)題七:時(shí)間戳為什么有效?為什么能夠減少拉取流量?
答:本地?cái)?shù)據(jù)不能直接使用的原因是,不確定數(shù)據(jù)是否最新,拉取服務(wù)器時(shí)間戳與本地時(shí)間戳進(jìn)行比對(duì),如果本地是最新的數(shù)據(jù),就能避免重新拉取。id列表數(shù)據(jù)的變化頻度是比較低的(增加id,減少id),時(shí)間戳機(jī)制非常的有效。
問(wèn)題八:加入時(shí)間戳機(jī)制后,數(shù)據(jù)拉取流程有什么變化?
答:假設(shè)有100個(gè)好友,以好友詳情數(shù)據(jù)的拉取為例,沒(méi)有時(shí)間戳之前,直接向服務(wù)器拉取這100個(gè)好友的詳情數(shù)據(jù)。
在有了時(shí)間戳之后,數(shù)據(jù)拉取流程變?yōu)椋?/span>
(1)先拉取100個(gè)好友的時(shí)間戳
(2)客戶(hù)端將100個(gè)好友的時(shí)間戳與本地時(shí)間戳對(duì)比,找出差異,假設(shè)有10個(gè)好友的信息發(fā)生了變化,時(shí)間戳改變了
(3)拉取有變化的10個(gè)好友的信息
優(yōu)點(diǎn)是:大大減少了數(shù)據(jù)傳輸量(由拉取100個(gè)好友,降低到拉取10個(gè)好友)
缺點(diǎn)是:增加了一次網(wǎng)絡(luò)交互(原來(lái)直接拉取,現(xiàn)在需要分別拉取時(shí)間戳與差異數(shù)據(jù))
問(wèn)題九:使用時(shí)間戳的同時(shí),能否降低網(wǎng)絡(luò)交互次數(shù)呢?
答:可以!
客戶(hù)端對(duì)時(shí)間戳的使用,往往采取“客戶(hù)端拉取時(shí)間戳”+“客戶(hù)端比對(duì)時(shí)間戳”+“客戶(hù)端再次拉取差異數(shù)據(jù)”的方式進(jìn)行,“時(shí)間戳比對(duì)”的的CPU計(jì)算發(fā)生在客戶(hù)端,其實(shí),這個(gè)計(jì)算可以轉(zhuǎn)嫁到服務(wù)器,步驟為:
(1)客戶(hù)端上傳100個(gè)好友的時(shí)間戳
(2)“服務(wù)端”收到客戶(hù)端上傳的時(shí)間戳,與最新時(shí)間戳對(duì)比,找出差異,假設(shè)有10個(gè)好友的信息發(fā)生了變化,服務(wù)端可以直接將有差異的10個(gè)好友的數(shù)據(jù)返回
優(yōu)點(diǎn)是:客戶(hù)端減少了一次網(wǎng)絡(luò)請(qǐng)求
缺點(diǎn)是:比對(duì)時(shí)間戳差異的CPU計(jì)算由“端”轉(zhuǎn)嫁到了“云”
問(wèn)題十:你怎么知道微信是這么做的?
答:...不知道,運(yùn)營(yíng)需要,故...
但是,“客戶(hù)端上傳時(shí)間戳”的方法,我們?cè)?jīng)是這么做的,希望對(duì)業(yè)界同仁有啟示作用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: