合理的架构设计,对客户端后期优化至关重要

暴风影音播放器一直因为“慢”,而引发用户诸多抱怨。新发布的暴风影音5在启动速度上较暴风影音3提升了3倍。暴风影音播放研发总监黄森堂以暴风影音5的研发为案例,分享了暴风影音在实现“快”客户端过程中的实战经验。

黄森堂表示一款软件往往在发布之初速度很快,但随着后期业务模块的增加,速度会越来越慢。究其原因,是不合理的架构设计限制了后期的优化处理。当时暴风影音3就面临这样的问题。“对架构进行重构:将原有复杂架构下各个模块的复杂关联去掉,保证每个模块的职责单一。”是暴风影音提速所采取的主要措施之一。

皮肤引擎的好坏,决定了客户端的启动速度。优化皮肤引擎,也是本次暴风影音提速任务中的重中之重。黄森堂表示,对于皮肤引擎的优化不外乎四步,即读取优化、加载优化、代码优化及显示优化。在实现读取优化中,暴风影音采用自定义文件存储格式,减少文件读取次数,从而加速读取速度,同时还自定义了压缩格式,以减少文件I/O的读取。对于显示优化,黄森堂认为显示优化的目标是让图片更快速地显示出来,开发者应该抛弃传统图片的显示方法,努力挖掘CPU的潜力,“抛弃传统窗口刷新技术,采用革新的窗口主动刷新技术”是暴风影音5采取的优化措施。

如何把客户端软件做得更快?搜狗研发总监李子拓从网速、渲染、防假死、启动 等多角度介绍了搜狗浏览器“快”背后的技术要点。李子拓建议在启动客户端时,应竭力做好DelayLoad,推迟加载不需要的模块,等用户需要时再加载。最后他强调,不管在任何情况下,一定要优先响应用户的需求,最好把程序需要启动的时间告诉用户,让用户心中有数。

鲜果CEO梁公军从产品的层面,详细讲解了如何快速组建团队及如何快速的发布、推广、迭代产品。

要做到快速发布产品,梁公军表示公司内部首先要有良好的沟通工具,可选confluence或jira,其次就要从事、人、时间三方面做到快速开发,对于架构师要特别注意一点,即先做到,再做好。再者就是对于员工要做到知人善任,每个人责任分工要非常明确。

对于创业团队,在最开始做产品时,不要贪全贪大。梁公军建议如果所做产品还不成熟,可以先只做iOS及主要的Android机型适配,等产品成熟后,再去适配其它机型。否则以后兼容的开发成本会越来越高。

当前移动互联网很热,很多公司纷纷投入到移动潮流中,最终谁将问鼎?梁公军认为这将取决于正确的方向、正确的市场时间、靠谱的领导人和合作伙伴、充足的粮草、快(体现在执行力上)等因素。SOLOMO(Social Local Mobile)才是未来产品的正确方向。

最后,在圆桌论坛中,CSDN&《程序员》杂志总编刘江及三位讲师就客户端的相关技术进行了讨论。对于做客户端的开发人员应该关注哪些技术,鲜果CEO梁公军表示,如果开发者希望向移动领域发展的话,对于C#语言的开发者,可以关注一下Windows Phone 7;C++的开发者,可以关注一下iOS;Java开发者,可以关注一下Android;前端开发人员,可以研究一下HTML5。(文/陈秋歌)

读后小结:

客户端性能优化

1)

问题:不合理的架构和各模块的不必要的关联关系,导致随着业务模块的增加,速度越来越慢。

建议方法:对架构进行重构:将原有复杂架构下各个模块的复杂关联去掉,保证每个模块的职责单一。

2)

问题:皮肤引擎的好坏,决定了客户端的启动速度。

建议方法:优化皮肤引擎,从读取优化、加载优化、代码优化及显示优化方面着手。

3)

问题:客户端启动,DelayLoad是关键。

建议方法:推迟加载不需要的模块,等用户需要时再加载。不管在任何情况下,一定要优先响应用户的需求。

4)

问题:从产品的层面,如何速组建团队及如何快速的发布、推广、迭代产品?

建议方法:良好的沟通工具,其次就要从事、人、时间三方面做到快速开发,对于架构师要特别注意一点,即先做到,再做好。再者就是对于员工要做到知人善任,每个人责任分工要非常明确。

5)

问题:针对创业团队,如何快速制胜?

建议方法:不要贪全贪大。还取决于正确的方向、正确的市场时间、靠谱的领导人和合作伙伴、充足的粮草、快(体现在执行力上)等因素。

自己针对上面的,可以在程序设计时提醒自己,在日常设计中一点点提升和改进。

客户端性能优化实战经验分享相关推荐

  1. 网站流量飙升背后:外贸企业谷歌SEO优化实战经验分享

    自从我涉足外贸行业,我逐渐认识到谷歌SEO优化在提升网站流量和吸引潜在客户方面的重要性. 在这篇文章中,我将结合个人的外贸经历,与大家分享外贸企业谷歌SEO优化的实战经验,希望能为广大从业者提供一些有 ...

  2. 拉勾教育 | Java 性能优化实战 21 讲

    开篇词 开篇词 | Java 性能优化,是进阶高级架构师的炼金石 你好,我是李国.作为<Java 性能优化与面试 21 讲>这个课程的作者,我先来简单介绍下自己. 我曾任京东金融.陌陌科技 ...

  3. 《java性能优化实战》之编程性能优化

    目录 一.java编程性能优化实战 1.如何使用String.intern 节省内存 2.如何使用字符串的分割方法? 3.ArrayList还是LinkedList?使用不当性能差千倍 4.Strea ...

  4. MongoDB实战经验分享

    2019独角兽企业重金招聘Python工程师标准>>> 转自: http://www.cnblogs.com/ymind/archive/2012/04/25/2470551.htm ...

  5. Android客户端性能优化(魅族资深工程师毫无保留奉献)

    Android客户端性能优化(魅族资深工程师毫无保留奉献) 转载学习:http://blog.tingyun.com/web/article/detail/155?from=groupmessage& ...

  6. 太牛了!我把阿里、腾讯、字节跳动、美团等Android性能优化实战整合成了一个PDF文档

    安卓开发大军浩浩荡荡,经过近十年的发展,Android技术优化日异月新,如今Android 11.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS. 但是,到了各大厂商手 ...

  7. 开源即巅峰,《Java程序性能优化实战》GitHub三小时标星已超34k

    蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜 ...

  8. Linux性能优化实战学习笔记:第十讲==中断

    Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...

  9. 网站性能优化实战(二)

    转自IMWeb社区,作者:jerryOnlyZRJ,原文链接 --从Webkit内部渲染机制出发,谈网站渲染性能优化 本文是对前文:imweb.io/topic/5b6fd- 相关知识的补充,文中的& ...

最新文章

  1. 9soc sensor与bayer sensor 区别,内外置isp
  2. 话说:学好C语言,走遍天下都不怕
  3. 如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?...
  4. 销售自动记帐凭证 - 三个常见问题
  5. c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序
  6. python气象包_Python-Cartopy包: 地图投影
  7. 微信小程序商城系统订单管理功能介绍
  8. LOJ#2339. 「WC2018」通道(边分治+虚树)
  9. CLIENT_PLUGIN_AUTH is required 解决办法
  10. Android API19 设置Alarm闹钟
  11. 【OJ每日一练】1049 - 矩阵对角线元素之和 v1.0
  12. Java自定义变换产生摘要数据
  13. Sybil_attack (女巫攻击)
  14. 路由跟踪命令 查看DNS IP Mac等
  15. 南京大学计算机 曹云浩,【2015.青春曲园】第二十六届“迎校庆”校园十佳歌手大赛独家放送~...
  16. python class tynu()_Pisanie pierwszej aplikacji Django, część 4.
  17. 清晰思路带你掌握如何运用循环打印各种图案(新手向)
  18. java usb摄像头_Android中多USB摄像头解决方案——UVCCamera源码分析(一)
  19. 财务自由?这样做微信开发可以吗?
  20. Nginx集成GeoIP2模块实现地区识别与屏蔽

热门文章

  1. 怎么把线稿提取出来_如何提取线稿为你所用?不会的来!
  2. 前端编程中利用PS切图还原设计图
  3. NYOJ_1273_宣传墙
  4. pycharm 自动补全代码提示前符号f,m , p,c,v是什么意思?
  5. printf中的%f
  6. 记录错误:ImportError: No module named ‘tools‘。jupyter无法import第三方文件夹的库
  7. 朋友圈变美靠AI:新型美颜技术实现细粒度颜值提升
  8. 开关电源保险丝、整流桥及输入滤波电容的选型
  9. A股证券公司股票程序化交易接口如何申请?
  10. Error: Canceled future for execute_request message before replies were done