大数跨境

科普贴 | 你就不想知道,为什么我们的朋友圈刷的这么爽、这么流畅?

科普贴 | 你就不想知道,为什么我们的朋友圈刷的这么爽、这么流畅? 经天纬地
2016-10-24
2
导读:喜刷刷~喜刷刷~~


朋友圈经常举办摄影大赛,

各种秀,热闹非凡。

朋友圈已让人欲罢不能。

有人说,早上睁眼第花式一件事情,是刷朋友圈;

晚上睡觉最后一件事情,还是刷朋友圈。



这背后是海量的信息数据和查看请求。

如此庞杂的数据,微信却做到了流畅的体验,一切井然有序,刷一下就搞定。

只要网络状况良好,再多的数据量,也能“喜刷刷”。

那么,朋友圈如何保障流畅?


▼▼▼


简单讲,朋友圈信息的处理可以分解为发表浏览两个主要环节,而它们都遵循着一个时间线(timeline的逻辑。

所谓的刷朋友圈,实际上就是刷时间线,也就是一个用户所有朋友的发布内容。

比如,有两个用户A和B,他们各自有自己的相册。现在,A上传一张图片到自己的朋友圈。这些图片的发布信息会由A的微信客户端传给服务器,这个最新发布就会被写到A的相册表里。

之后,A的最新发布会批量插入到他所有好友的时间线里。当他的好友B开始刷朋(shi)友(jian)圈(xian)的时候,B的微信客户端会把小佐发布的图片拉回本地,显示出来。

这其中,发布会稍慢,假如A有几百个好友,就需要把发布指引插入到每个好友的时间列表。而浏览却快很多,每一个用户只需要读取自己的时间线表,一个动作就好。

然而,用户每一个动作都意味着一个请求,而每个请求后面都可能涉及互相配合的多个服务。很多时候用户还会花式刷朋友圈——可能就是你——先刷到顶再刷到底,点开一篇文章刚一秒又退出来,后一秒反悔,又点进去……

海量数据×花式刷法,客户端表示有点懵,这不想点法子可不行。

为了防止被玩坏,它用了这些方法——

1

胖瘦数据分离

朋友圈包含的数据信息种类很多,文字、图片、视频、音乐,还有点赞与评论信息,提醒谁看,谁能看谁不能看等等。

为了方便处理,微信引入了“胖瘦数据”的概念,将视频、图片这些数据量大的信息称为胖数据,而文字,评论提醒(谁能可见,@信息)称为瘦数据,并将之分别处理。

瘦数据直接存储到微信后台(微信服务器端),而胖数据就要“出门左转”,在CDN中转一圈,瘦身为数据量很小的URL

这样就能一身轻松:当收到读取需求时,图片等胖数据就能直接从CDN中,依据URL来定位下载。 

2

内容分发网络(CDN)

CDN?什么是CDN?!

CDN(Content Delivery Network)也是让内容传输更快、更稳定的一大法宝。

微信朋友圈的内容分发,遵循三天时间内的图片使用CDN边缘节点下载,三天外的图片就直接回源下载原则。

CDN边缘节点是离用户最近的图片缓存服务器,比如你在广州,你下载的图片的边缘节点可能在佛山,反正是离你比较近的站点。

回源下载则是当边缘机房(OC)没有缓存你想要下载的图片,就得跑到更远的地方(核心机房DC)去下载,这里走的路多了,也就慢了。

而据统计,三天内发的图片,在边缘机房找到缓存的概率比较高,三天外发的图片,在边缘机房找到缓存的概率比较低,所以三天外的才直接回源(回去核心机房)下载了。

翻译一下就是:读取内存总比读取硬盘要快。图片等胖数据的下载按时间先后,服务器的远近来安排。这样大大缩短信息读取的等待时间。


3

快速渲染

其实,我们看到的朋友圈信息,除了内容之外,还有形式。比如,颜色,高低,字体大小,等等。这些都需要做渲染,从而得到最终的视觉效果。

所谓渲染,可以简单理解为像画画一样把展示的内容按想要的效果画出来。对于手机而言,朋友圈本质上是由一个个像素组成,一个个有不同RGB值的像素点构成了你所看到的朋友圈画面。

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

评论区优化:对于评论和点赞,以前整个评论区都是一个视图单元,展示的时候需要整个渲染一遍,相当于画一整块画板,当评论一多就有卡顿的风险。现在,每一条评论作为一个CELL单元,也就是每一条单独处理。

RichText View:包含电话、链接、表情的信息,通常字体颜色会不一样。这些信息即是富文本(RichText)。富文本如何展示地更快?

微信后台(服务器端)会预先判断信息是否属于富文本,如果不是富文本,到客户端就会简单处理,如果是富文本则会做字符切割,然后再渲染出来。

关键点来了,这个渲染的模式会被缓存起来,以后碰到相同的富文本就可以反复使用。可谓一次解析,终生受用。

图层调优:需要处理的像素越多,画起来就越耗时。微信通过使用开发工具的图层调试,去掉不必要的透明渲染,提高效率。

如上图,右边比左边清爽,处理起来也快了很多。

如果是你眼睛都识别不出来的细节,那就压缩抹去了吧。


最后,祝大家在未来的日子里,

愉快的刷,刷出境界,刷出未来~


【声明】内容源于网络
0
0
经天纬地
1234
内容 377
粉丝 0
经天纬地 1234
总阅读0
粉丝0
内容377