微信朋友圈能这么流畅你可知道为什么?

刚刚过去的国庆微信朋友圈摄影大赛,各种花式秀,热闹非凡。这背后是海量的信息数据和查看请求。如此庞杂的数据,微信却做到了流畅的体验,一切井然有序,刷一下就搞定。只要网络状况良好,再多的数据量,也能“喜刷刷”。

 

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

 

▼▼▼

 

让我们先以一个上帝视角, 来看看你天天都刷的朋友圈,是如何处理发布信息和浏览信息

 

 

好吧,如果觉得图比较复杂,可以不用细看,直接看这里。

 

简单讲,朋友圈信息的处理可以分解为发表与浏览两个主要环节,而它们都遵循着一个时间线(timeline)的逻辑。所谓的刷朋友圈,实际上就是刷时间线,也就是一个用户所有朋友的发布内容。

 

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

 

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

 

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

 

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

 

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

 

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

 

胖瘦数据分离:胖子给我闪一边

 

 

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

 

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

 

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

 

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

 

 

 

内容分发网络(CDN):走得路少了,也就快了。

 

 

CDN?什么是CDN?!

 

对的,派爷告诉你,CDN(Content Delivery Network)也是让内容传输更快、更稳定的一大法宝。

 

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

 

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

 

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

 

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

 

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

 

快速渲染:旧瓶装新酒

 

 

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

 

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

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

 

除了上面的几个大招,还有很多小优化,来保障朋友圈更好、更流畅的体验。比如:

 

预下载:当你打开朋友圈,微信会帮你预下载排前面的十张图片。

 

小视频优化:当你不点击放大朋友圈小视频,其以静音播放时,其实你看到的是一个图片GIF的模式,通过微信程序猿们自己写的视频解码器来播放。

 

作为一项重磅更新,在朋友圈发布的时候,版式很多,用A-Z来编号都不够,最终达到34个版本。

 

这么多版本当然只是为了更好的体验。在流畅上的努力,也只是微信追求用户体验的一种表现而已。另一方面,朋友圈也同时在做关闭红点提醒,不看他(她)的朋友圈……

 

就是这样,微信团队努力做到让你用得更爽,但同时不打扰你,用完即走。

 

好了,防止卡顿,保证流畅,就上面这些法子。具体效果嘛,你也看到了。

说完这个,还有几个朋友圈的小秘密,派爷也当做福利送给大家。

 

1

当文字太多,达到八行以上,就会展示全文按钮;

2

评论时你可能不会注意格式,中间会有很多空格,但最终显示出来,这些评论时的空白行会被自动过滤;

3

你不断下刷,出现“正在加载”字样,不代表卡顿了,而是微信正帮你调取新页面。也就是说,朋友圈你每向下刷一次,会显示40条朋友圈消息;

4

如果,你一直不停往下刷,理论上你刷50次就到底了,因为朋友圈实际只保存一段时间内的2000条信息。

 

 开盒子 

你也来说说,刷朋友圈时都有什么良(qi)好(pa)习惯吧?你刷到底过么?

时间: 2024-10-03 05:53:55

微信朋友圈能这么流畅你可知道为什么?的相关文章

dns劫持-通过微信朋友圈和QQ浏览器打开的页面是如何避免被dns或arp攻击的?

问题描述 通过微信朋友圈和QQ浏览器打开的页面是如何避免被dns或arp攻击的? 用手机浏览器或app打开页面,有时会出现一个漂浮或别的广告,非应用本身推送的广告,而是dns或arp攻击,但是微信朋友圈和QQ浏览器打开的网页不会出现这种有浮层的干扰广告.求问这个是怎么实现的,是不是app定义了dns,就像360浏览器自己定义的域名寻址?

酷狗音乐怎么分享到微信朋友圈?

  酷狗音乐分享到微信朋友圈一些有名的歌手可以分享,自己的录音就不行,我试了很多次,刚刚快要崩溃了. 把你要的歌曲下载到酷狗音乐里的,打开歌词那一页,按住,就会跳出来很多按键,选择分享就可以分享到朋友圈! 播放一首你想要分享的歌,然后上微信,去摇一摇,摇一摇的右上角有一个音符,点一下,它会变绿.并跑到中间的位置,然后就可以摇了,摇了之后,它会自动搜索你正在播放的音乐,搜索到后,点右上角的那个长方形的,里面有一个是分享到朋友圈,点一下就可以了. 1.打开手机酷狗菜单栏 2.进入到本地音乐中,就可以

酷狗音乐盒2015怎么分享到微信朋友圈

  首先打开我们手机上的酷狗音乐.点击左上方的图标,弹出菜单中,选择本地音乐.如图 进入到本地音乐中,就可以看到你手机上面的所有音乐了,然后找到你想要分享的音乐,比如下图,我就选择了一首"独家记忆"点击播放 点击播放之后进入到歌曲页面,如图所示. 之后点击空白处,就会弹出分享层,点击分享按钮,会弹出菜单,让你选择分享到哪里,目前旧版的酷狗音乐支持分享到 QQ QQ空间 微信 新浪微博 和朋友圈,但新版的好像屏蔽了分享的朋友圈的权限 接下来你可以选择分享到朋友圈,如图所示,点击之后会进入

天天动听怎么分享音乐到微信朋友圈

  天天动听无法分享微信原因: 别告诉我你不知道腾讯和阿里巴巴一直处于撕逼状态,年初微信和支付宝就不断的在撕逼,让用户在分享红包的过正中不断受阻. 当红包封杀告一段落后,便轮到了阿里巴巴旗下的虾米和天天动听.当你尝试将歌曲分享到微信好友或朋友圈时,微信则会提示:由于当前你分享的内容存在安全隐患,无法分享到微信. 这就是天天动听无法分享到微信的原因!!不过近期好像有网友说可以分享到微信朋友圈了~ 小编没有测试过,也不知道是真是假,不过有图为证,大家可以试一试.

微信朋友圈的图片上传,多图上传怎么去撸才合适?我们一起来实现吧!

微信朋友圈的图片上传,多图上传怎么去撸才合适?我们一起来实现吧! 图片上传是非常常见的功能,而多图上传在大多数应用中也是非常常见的,比如微信的朋友圈,微博的动态,都是有九宫格图片的,那这里肯定涉及了多图上传,所以今天我们来一起撸一下,怎么去思考这个实现逻辑! 这里我想到的思路是比较简单的,首先,我们有一个按钮,按钮是上传图片,点击之后弹出某个界面进行图片的选择,一般是九张图片或者十二张,选完之后就直接上传了,大致的流程应该是这个样子,那我们首先来写个按钮 activity_main.xml <?

Android 如何获取微信朋友圈数据

问题描述 Android 如何获取微信朋友圈数据 最近有个项目,要实现获取微信朋友圈的数据!看了微信开放平台,目前还想没有需提供相应的接口! 有没有什么好的实现方式? 望提供一下解决思路,谢谢大家! 解决方案 微信开放平台目前未开放朋友圈数据,目前无法取到数据,或者你可以试试抓包和解包

微信朋友圈最新赚钱模式“本地生活信息分享”

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 微信赚钱大家应该不再陌生了,最常见的就是微信朋友圈卖面膜,化妆品了.一个上万块钱的诱惑吸引了不少人.当然,也有好多都知道这只是变形的"传销"自拍,自夸,自打款的方式来欺骗别人加盟.卖的不是产品,只是为了收下线.不管微信卖什么,大多用的都是用这种模式.今天邵连虎博客就给大家分享一个利用分享本地生活信息挣钱的案例. 前段时间,

评论回复布局-类似微信朋友圈的评论布局问题

问题描述 类似微信朋友圈的评论布局问题 要实现类似微信朋友圈的评论回复功能,目前通过嵌套listview已经基本实现了布局的显示功能,现在要实现点击某条评论,弹出输入框和输入法,且输入框的位置正好在点击的评论的正下方,毛事要动态的移动listview里面item的位置.看了下微信朋友圈和手机QQ的空间都是如此实现的,想问问,有没有有具体点的思路. 目前想到的难点如下: 1.listview里面的刚好占满一个屏幕,点击最后的一个item,如何将该item提升到输入法和输入框的上面,listview

微信朋友圈评论点赞-android 类似微信朋友圈点赞,评论功能怎么实现?

问题描述 android 类似微信朋友圈点赞,评论功能怎么实现? @Override public int getCount() { return 5; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public int getItemViewType(int positio