當你喜刷刷時,你可知爲何朋友圈能這麼流暢?

本文轉載自科技獵

剛剛過去的國慶朋友圈攝影大賽,各種花式秀,熱鬧非凡。

朋友圈已讓人欲罷不能。有人說,早上睜眼第一件事情,是刷朋友圈;晚上睡覺最後一件事情,還是刷朋友圈。

這背後是海量的信息數據和查看請求。如此龐雜的數據,微信卻做到了流暢的體驗,一切井然有序,刷一下就搞定。只要網絡狀況良好,再多的數據量,也能“喜刷刷”。

  那麼,朋友圈如何保障流暢?

  讓我們先以一個上帝視角, 來看看你天天都刷的朋友圈,是如何處理髮布信息和瀏覽信息

  當你喜刷刷時,你可知爲何朋友圈能這麼流暢?

好吧,如果覺得圖比較複雜,可以不用細看,直接看這裏。

  簡單講,朋友圈信息的處理可以分解爲發表與瀏覽兩個主要環節,而它們都遵循着一個時間線(timeline)的邏輯。所謂的刷朋友圈,實際上就是刷時間線,也就是一個用戶所有朋友的發佈內容。

比如,有兩個用戶小佐和小倩,他們各自有自己的相冊。現在,小佐上傳一張圖片到自己的朋友圈。這些圖片的發佈信息會由小佐的微信客戶端傳給服務器,這個最新發布就會被寫到小佐的相冊表裏。

之後,小佐的最新發佈會批量插入到他所有好友的時間線裏。當他的好友小倩開始刷朋(shi)友(jian)圈(xian)的時候,小倩的微信客戶端會把小佐發佈的圖片拉回本地,顯示出來。

這其中,發佈會稍慢,假如小佐有幾百個好友,就需要把發佈指引插入到每個好友的時間列表。而瀏覽卻快很多,每一個用戶只需要讀取自己的時間線表,一個動作就好。

然而,用戶每一個動作都意味着一個請求,而每個請求後面都可能涉及互相配合的多個服務。很多時候用戶還會花式刷朋友圈――可能就是你――先刷到頂再刷到底,點開一篇文章剛一秒又退出來,後一秒反悔,又點進去……

海量數據×花式刷法,客戶端表示有點懵,這不想點法子可不行。

爲了防止被玩壞,它用了這些方法--

  1、胖瘦數據分離:胖子給我閃一邊

  當你喜刷刷時,你可知爲何朋友圈能這麼流暢?

朋友圈包含的數據信息種類很多,文字、圖片、視頻、音樂,還有點贊與評論信息,提醒誰看,誰能看誰不能看等等。

  爲了方便處理,微信引入了“胖瘦數據”的概念,將視頻、圖片這些數據量大的信息稱爲胖數據,而文字,評論提醒(誰能可見,@信息)稱爲瘦數據,並將之分別處理。

瘦數據直接存儲到微信後臺(微信服務器端),而胖數據就要“出門左轉”,在CDN中轉一圈,瘦身爲數據量很小的URL。

這樣就能一身輕鬆:當收到讀取需求時,圖片等胖數據就能直接從CDN中,依據URL來定位下載。

  當你喜刷刷時,你可知爲何朋友圈能這麼流暢?

  2、內容分發網絡(CDN):走得路少了,也就快了。

  當你喜刷刷時,你可知爲何朋友圈能這麼流暢?

CDN?什麼是CDN?!

  對的,派爺告訴你,CDN(Content Delivery Network)也是讓內容傳輸更快、更穩定的一大法寶。

微信朋友圈的內容分發,遵循三天時間內的圖片使用CDN邊緣節點下載,三天外的圖片就直接回源下載原則。

CDN邊緣節點是離用戶最近的圖片緩存服務器,比如你在廣州,你下載的圖片的邊緣節點可能在佛山,反正是離你比較近的站點。

回源下載則是當邊緣機房(OC)沒有緩存你想要下載的圖片,就得跑到更遠的地方(核心機房DC)去下載,這裏走的路多了,也就慢了。

而據統計,三天內發的圖片,在邊緣機房找到緩存的概率比較高,三天外發的圖片,在邊緣機房找到緩存的概率比較低,所以三天外的才直接回源(回去核心機房)下載了。

翻譯一下就是:讀取內存總比讀取硬盤要快。圖片等胖數據的下載按時間先後,服務器的遠近來安排。這樣大大縮短信息讀取的等待時間。

  3、快速渲染:舊瓶裝新酒

  當你喜刷刷時,你可知爲何朋友圈能這麼流暢?

  其實,我們看到的朋友圈信息,除了內容之外,還有形式。比如,顏色,高低,字體大小,等等。這些都需要做渲染,從而得到最終的視覺效果。

所謂渲染,可以簡單理解爲像畫畫一樣把展示的內容按想要的效果畫出來。對於手機而言,朋友圈本質上是由一個個像素組成,一個個有不同RGB值的像素點構成了你所看到的朋友圈畫面。

  So,如果渲染效率提升,那麼展示的速度也就能更快。微信用了下面這些方法:

  評論區優化:對於評論和點贊,以前整個評論區都是一個視圖單元,展示的時候需要整個渲染一遍,相當於畫一整塊畫板,當評論一多就有卡頓的風險。現在,每一條評論作爲一個CELL單元,也就是每一條單獨處理。

  RichText View:包含電話、鏈接、表情的信息,通常字體顏色會不一樣。這些信息即是富文本(RichText)。富文本如何展示地更快?

  當你喜刷刷時,你可知爲何朋友圈能這麼流暢?

微信後臺(服務器端)會預先判斷信息是否屬於富文本,如果不是富文本,到客戶端就會簡單處理,如果是富文本則會做字符切割,然後再渲染出來。

關鍵點來了,這個渲染的模式會被緩存起來,以後碰到相同的富文本就可以反覆使用。可謂一次解析,終生受用。

  圖層調優:需要處理的像素越多,畫起來就越耗時。微信通過使用開發工具的圖層調試,去掉不必要的透明渲染,提高效率。

  當你喜刷刷時,你可知爲何朋友圈能這麼流暢?

如上圖,右邊比左邊清爽,處理起來也快了很多。

如果是你眼睛都識別不出來的細節,那就壓縮抹去了吧。

除了上面的幾個大招,還有很多小優化,來保障朋友圈更好、更流暢的體驗。比如:

  預下載:當你打開朋友圈,微信會幫你預下載排前面的十張圖片。

  小視頻優化:當你不點擊放大朋友圈小視頻,其以靜音播放時,其實你看到的是一個圖片GIF的模式,通過微信程序猿們自己寫的視頻解碼器來播放。

作爲一項重磅更新,在朋友圈發佈的時候,版式很多,用A-Z來編號都不夠,最終達到34個版本。

這麼多版本當然只是爲了更好的體驗。在流暢上的努力,也只是微信追求用戶體驗的一種表現而已。另一方面,朋友圈也同時在做關閉紅點提醒,不看他(她)的朋友圈……

就是這樣,微信團隊努力做到讓你用得更爽,但同時不打擾你,用完即走。

好了,防止卡頓,保證流暢,就上面這些法子。具體效果嘛,你也看到了。

說完這個,還有幾個朋友圈的小祕密,派爺也當做福利送給大家。

  1.當文字太多,達到八行以上,就會展示全文按鈕;

  2.評論時你可能不會注意格式,中間會有很多空格,但最終顯示出來,這些評論時的空白行會被自動過濾;

  3.你不斷下刷,出現“正在加載”字樣,不代表卡頓了,而是微信正幫你調取新頁面。也就是說,朋友圈你每向下刷一次,會顯示40條朋友圈消息;

  4.如果,你一直不停往下刷,理論上你刷50次就到底了,因爲朋友圈實際只保存一段時間內的2000條信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章