随着移动互联网的快速发展,大多数人已经习惯用手机获取各类信息。但信息量的不断增大,各种低质重复信息正严重影响着用户体验。所谓信息流性能优化,就是利用“大数据+人工”的方式在信息的数量和质量上控制展现在用户眼前的信息。

本文将由新浪微博客户端Feed组技术专家张善禄对微博的信息流优化解决方案进行解读。主要包括三个部分:流服务、性能优化、性能监控。

流服务

微博信息流承载了视频、直播、文章等许多业务,信息流和这些业务间的耦合比较严重。这种关系不但导致信息流维护成本增加,也在一定程度上影响业务方的开发。

为了解决上述问题,微博开发了流服务框架,主要有两个目标:一是解决耦合问题实现业务插件化,二是支持微博内部其他流式页面的快速开发。

ViewModel是这个模型的关键对象,一方面负责管理View的状态,另一方面负责将View中的事件包装成一个Action。Action用来描述一个业务事件,它包括类型和数据,一个Action最终会交给ActionExecutor来处理,ActionExecutor负责处理具体的业务逻辑。

由于View和ViewModel不处理具体的业务逻辑,因此复用性很好。在不同的页面,往往具体的业务逻辑也不同,只需将ActionExecutor替换掉即可。

流服务不但解决了耦合的问题,也为性能优化打下了良好的基础。

性能优化

一条微博可以自上而下地划分为头部、文字、视频、标签、底部按纽等16块区域,其中较特殊的区域有转发微博区域和Card区域。转发微博区域展示的是用户转发的微博,同样可以自上而下划分为16块区域;Card区可以展示视频、直播、大图等,不同的微博展示的Card类型不同,目前Card区域的类型大概有30多种。

由此可见微博View十分复杂,这导致view层级较深并且BindView开销较大。我们解决这些问题的思路是化繁为简,按照上述划分的区域,将微博拆分成一一对应的view,同时我们会为每个拆分好的View创建ViewModel。

拆分完成以后,为了解决微博整体的点击、背景等问题,我们定义了VirtualView的概念,将点击事件、背景等信息放到VirtualView中进行处理。

为了优化BindView的开销,微博在会子线程中对耗时的业务逻辑进行预处理。

此外,针对某些创建开销较大的view,微博开发了预加载view的机制,在创建完ViewModel后,根据配置来决定ViewModel对应的view是否需要预加载,这样在创建view时可直接从ViewCache中获取。

性能监控

性能监控系统可以发现并定位性能问题,评估优化效果。微博性能监控主要包括CPU、内存、FPS、卡顿。

性能监控会贯穿微博开发过程中的每一个环节。开发阶段可以利用性能监控系统实时查看性能状态;提代码阶段会有自动化性能测试防止有问题的代码进版;内测阶段会有性能报告来评估新版本的性能问题;上线后,可以帮助解决线上用户的性能问题。

对于微博信息流优化实践,你觉得有哪些值得借鉴和可以改进的地方呢?欢迎留言说出您的看法~

本文首发于安卓绿色联盟微信公众号,转载请注明出处。

优化信息流很麻烦?三招教你轻松搞定相关推荐

  1. 如何解决html文档无法复制,职场必备技能:网页文档无法复制,3招教你轻松搞定...

    原标题:职场必备技能:网页文档无法复制,3招教你轻松搞定 其实很多人在浏览网页时都会遇到这个问题,看到了自己喜欢的文章片段,某一段文字特别符合自己的工作汇报,想要复制下来,结果却发现弹出了窗口,不是让 ...

  2. 苹果备忘录丢失如何恢复,小编支招教你轻松搞定

    文章目录 方法一:使用官网云数据找回删除的备忘录 方法二:通过云备份找回删除的备忘录 方法三:通过云备份找回删除的备忘录 备忘录是我们日常生活中记录事项的常用工具,相较于以往的笔和纸用本子记录,手机备 ...

  3. 三招助你轻松搞定超Diao氛围

    自1960年代美国校园刮起一片游戏飓风之后,各类游戏席卷世界,在那个手游还没有今天这般成熟的时代,游戏界可谓是被各种重度游戏霸占,近年,一款WAR3地图编辑器的产物DOTA,红的发紫,大街小巷无人不玩 ...

  4. 如何旋转PDF页面?两招教你轻松搞定

    有很多职场新人在初入职场的时候,都会要对很多不同的文档进行处理,当处理到一些PDF文件的时候,会发现一些PDF文件是倒着的,这样的话就影响阅读的效率,也会影响人们阅读时的心情,那么当遇到倒着的PDF文 ...

  5. 三招教你如何搞定将qlv格式的腾讯视频转换为mp4格式

    我们在观看到一部好看的电影或视频的时候,想要将它进行下载珍藏也是一件无可厚非的事情.这时候,如果下载的视频没有办法进行观看,那就是一件即遗憾又扫兴的事情了,今天就给大家讲一下面对这种情况的解决办法!我 ...

  6. bcc校验码计算_CRC校验你会吗?计算、校验、C语言实现,三步教你轻松搞定

    目录 前言 CRC算法简介 CRC计算 CRC校验 CRC计算的C语言实现 CRC计算工具 总结 前言 最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研究了一下,周末有时间整理了一 ...

  7. 手机也能检测百家号原创度,九招教你轻松搞定!

    自媒体时代,每个人都可以成为一名自媒体人,发布自己的文章.但是,如何保证文章的原创性呢?百家号原创度检测手机端应运而生.本文将从以下九个方面对其进行详细介绍. 1.什么是百家号原创度检测手机端? 百家 ...

  8. C语言最简单的变量交换,【C语言】5种妙招教你轻松搞定变量值交换

    C语言中交换两个变量值的操作经常会用到,也有不少人提问诸如不用临时变量怎么交换两个变量值的问题,今天我们在这里进行一个总结,一共有5种方法,希望大家看完有所收获. 1.临时变量法 方法解释:采用临时变 ...

  9. ppt中如何合并流程图_简单4招,教你轻松搞定PPT中的流程图!

    原标题:简单4招,教你轻松搞定PPT中的流程图! 来自:PK阿锴(ID:akaippt) 作者:王培锴 今天跟大家分享PPT流程图的制作方法,流程图相信大家都经常遇到,通常分布着许多节点,由线条链接起 ...

最新文章

  1. Luogu 2470 [SCOI2007]压缩
  2. openoffice api java_如何在API / SDK中选择OpenOffice和LibreOffice
  3. 6.4 如何初始化聚类中心-机器学习笔记-斯坦福吴恩达教授
  4. 1.1 Java类的封装
  5. I.MX6 GPS JNI HAL register init hacking
  6. mysql复制文件迁移后看不到表_mysql 直接拷贝data 目录下文件 进行数据库迁移时遇到的一些问题??...
  7. Will not attempt to authenticate using SASL | dubbo项目启动特别慢,拉取 zookeeper 服务日志打印特别慢
  8. 再获全球顶会ASPLOS认可:阿里云神龙凭什么打破物理机神话
  9. Framework层SMS发送
  10. Pytorch——用50行代码搭建ResNet
  11. 笔记| 计算机数据表示实验(HUST)| 汉字机内码获取实验
  12. SSIM(结构相似性)-数学公式及python实现
  13. 【数据分析软件】【Weka】第一课:超easy安装教程
  14. 基于SSM的图书馆管理系统
  15. Java读取Excel表格公式对应的值
  16. 清华领军计划计算机试题,清华大学2017年自主招生领军计划笔试真题
  17. 燕京八景寻踪﹒宛平城卢沟桥
  18. presto获取上月第一天和最后一天、当月第一天
  19. 一切从游戏开始-完整的一个python to hack 实例
  20. 西电通信技术基础实验

热门文章

  1. 怎样在 Markdown 中使程序代码带上行号
  2. Redis的搭建和Redis的集群搭建
  3. 2017.12.19 白盒测试作业第四次小组例会
  4. awk应用小结(所有命令行均经调试)
  5. Linux_《Linux命令行与shell脚本编程大全》第二章学习总结
  6. JSTL函数标签库 fn标签
  7. 谈谈存储软件的无锁设计
  8. 在VMware上装苹果系统后全屏
  9. Servlet--HttpServletRequest一些不常用的方法
  10. JQuery知识点汇总