一般软件更新说的优化了更流畅了是指优化了算法吗

啊,专门给界面搞优化的优化狗飘过。说一些个人看法,我基础知识不牢,乱用术语的地方也多,不知不觉就在一些关键点上打马虎眼,大家将就着看。前言:一般软件更新了说优化了流畅了,有可能只是刷存在感,或者增加广告等其他功能,或者在一些细枝末节上做一些无关紧要的改变(不一定是改进)。国产app这种情况不少。这里只说常见的流畅度优化方法。我先随便给流畅来个分类吧。绝对流畅:用户满意的流畅,其内涵包括对用户操作及时响应(每个人感觉不同,我定义在100ms以内);耗时和等待操作有过渡动画(有时交互设计里没考虑这个,还要工程狗来擦屁股);动画帧率不低于30fps,最好达到屏幕刷新率(一般是60fps了)。相对流畅:有时东西搞出来,最后在使用的过程中发现离绝对流畅差的太远,紧急把优化狗召唤出来,但旧版挖坑太多来不及改,就在一些关键部分上打个过得去的补丁,只要比上一版有改进就好了。要达到绝对流畅,那么就要在开发的过程中谨记几点:1. ui线程上少做事情,尽量不要在这个线程上有同步操作2. 批量化ui操作3. 使用调试工具寻找可能存在的过度渲染区域4. 知道什么操作代价高什么操作性能好5. 将以上经验在项目组内推广但有时一个很复杂的东西弄出来了上线了发现ui性能不行,也真的不是一时半会能改出来的,可能不仅工作量大,改出来崩溃率啊bug风险也高。那么优化狗各就各位之后一般会按照以下流程来跪舔。1. 确定基准就是先把这个已经有的产品大概跑一跑,确定操作响应、帧率、过度渲染区域啥的大概是个什么水平,万一做出成果了也好比较,跟老板邀功请赏。2. 确定瓶颈按照绝对流畅的标准去看一下现在的版本有哪些没做好的地方3. 擦屁股之砍需求跟产品pk,把代价太高的功能砍掉,这一步可以由功能原来的开发人员搞,毕竟不用优化狗自己动手,而效果有可能是最好的。4. 擦屁股之欺骗眼睛这是一个取巧的方法,耗时就耗时吧,加个多的动画或者载入文字,让用户多个心理安慰,先把等待的负面情绪安抚下来再说。但切记不要玩大了,好的app用动画来缓解卡顿,差的app用动画来增加卡顿,切记切记。5. 擦屁股之layout优化ui滚动啊动画等卡顿通常是因为过度渲染引起的,有时一个简单的layout改动就能解决,这也是代价较小的方法。每个优化狗都在自己擅长的layout领域有一些经验,比如搞css的,熟悉android原生layout的,熟悉unity ui的,各有不同。6. 擦屁股之异步化在不改动程序主逻辑的情况下,把ui线程上的耗时操作改成异步调用,或者搞到另一个线程上去,操作完之后再通过回调或者通知的方式回来,这也是一种比较省力的方法。7. 擦屁股之优化代码这是最费力的部分,也是成本最大收效最小的部分,在fps极度敏感的游戏领域比较常见,而一般app很少会真正走到这一步。因为有时一些代码积累久了,开发都换几波了,可能谁也搞不清到底为什么这么写,而修改就要冒风险。所以通常只有在发生严重bug,或者严重影响用户体验时才会需要工程师硬着头皮改代码。改的时候切记切记时刻跑profile,不要为优化而优化,看到别人写的杂乱的代码,只要还能用且不影响流畅度就先别改,把最关键的部分做了再说。而具体的代码优化的方法就五花八门了,在游戏这种需要频繁创建销毁对象的领域可能会用到对象池避免频繁gc,频繁调用且耗时较长的函数换个算法等。再次重申,切记profile,不要自顾自地玩代码优化,在一些无关全局的代码细节上做无用功。真的需要在ui线程上搞的耗时同步操作不多,但真的遇上了也没办法。比如你非要在手机webview里运行个webgl游戏,或者非要在unity里用高大上的物理光,或者随便哪个app下拉界面设置就要全屏高斯模糊还要在低端设备上流畅。这时除非老板花钱招一队很牛很牛经验丰富的研发来爬科技树,一般的优化狗也是束手无策。不过这只是非常少的情况。大部分情况下,按照2/8原则,灵活运用上述几板斧,能解决80%的卡顿问题。软件开发是一个系统工程,需要产品狗、设计狗、工程狗和测试狗携手努力。而具体到流畅度优化这个问题,代码或者说算法可能很重要,也可能不重要。
■网友


推荐阅读