美文网首页
性能优化小结

性能优化小结

作者: 折剑游侠 | 来源:发表于2022-05-31 15:33 被阅读0次

工欲善其事,必先利其器。要想做好优化,首先得知道APP线上的各种数据,不管是自己撸还是接入其它家开源的,先得有个数。

  • 启动优化

SDK的初始化说的比较多的就是异步加载,懒加载。异步加载的话将一些非主线程初始化的任务通过线程池,CountDownLatch计数,或者引入有向无环图处理;懒加载将非核心需要在主线程初始化的任务Idle执行。

那还有一些so包的初始化,可以配合包体积优化,做成动态下发,在对应的业务场景做初始化。现在很多框架包扩一些知名的都喜欢在自己的ContentProvider中做初始化,这一部分比较恶心,可以在Manifest中写同名的ContentProvider指定其enable为false,阻止其初始化,然后在业务中自行调用init方法。之前项目中就引入了Facebook的SDK做登录功能,结果发现其init方法太占资源,毕竟我只需要一个登录功能,通过这个方案将其初始化时机放到登录页,毕竟对于绝大部分用户来说登录了一次之后有token续期机制的存在无需再执行登录相关逻辑。

还有就是MainActivity中其它子Fragment懒加载,默认肯定只显示MainFragment。这里可以将MainFragment的json数据做持久化处理,在Splash闪屏页提前读取出来,首次加载是否需要拉取最新的接口数据,这其实也是个业务问题,可以先展示退出前保存下来的json数据再调接口拉数据。对于MainFragment来说,其绘制耗时也是可以优化一些的,老生常谈的减少层级、移除不必要的背景、ViewStub等,还有AsyncLayoutInflater提前异步加载首页View。

  • 包体积优化
  1. 混淆,Lint去除无用资源,图片压缩、使用WebP、非必要图片网络化。
  2. 非核心资源文件动态下发,resConfigs过滤多语言。
  3. so包删除多平台只需支持armeabi-v7a,非核心so包压缩、动态下发。
  4. ReDex去除Dex文件debug信息及行号信息。
  5. ReDex分包优化,尽量将有调用关系的class放到同一个dex。
  6. 引入booster,资源索引内联。
  • 内存优化
  1. LeakCanary监控内存泄漏,但不适用于线上。
  2. debug下推行StrictMode严格模式,查看内存泄漏。
  3. 图片处理,用框架的话基本没啥问题,去除透明通道,压缩到target view大小。
  4. 大对象复用,避免频繁创建对象,资源即时关闭。
  5. 开启多进程,比如WebView、Download单独开启进程。
  6. 多线程管理,使用线程池和相关的框架,Rxjava、Flow等。
  • 页面优化

核心页面体验优化,一部分可以按MainActivity的思路来,子页面懒加载。部分文案也可以由上级页面带入,再比如播放页面播放器做秒开,其数据肯定也是由上级页面带入。其它比较多的就是耗时逻辑异步处理和懒加载,RecyclerView的优化以及骨架屏。

RecyclerView的优化:

  1. 如果Item高度是固定的话,设置setHasFixedSize(true)来避免requestLayout浪费资源。
  2. 在onScrollStateChanged()停止滑动的时候做分页处理,addOnScrollListener()滚动时会频繁计算是否滑动到底部。
  3. 通过RecycleView.setItemViewCacheSize(size)加大RecyclerView的缓存,用空间换时间来提高滚动的流畅性。
  4. 使用diffutil进行局部刷新,少用全局刷新。
  5. 预初始化首屏ViewHolder。
  • WebView优化
  1. 预创建WebView
  2. WebView进程预初始化
  3. booster chromium引擎预初始化
  4. WebView秒开,分享的文章也挺多的
  • 网络优化
  1. 开发时可以通过弱网模拟,定位需要优化的地方。
  2. 可以了解下protobuf,至于是否需要全面替代json,就见仁见智了。
  3. okhttp开启缓存,网络资源进行压缩,图片加载使用占位图,列表加载使用骨架屏等。
  4. 尽量避免客户端的轮询,使用服务器推送。
  5. 定位耗时的接口,与后端大佬沟通链路问题。
  6. 网络请求绑定页面生命周期,避免资源浪费。

相关文章

  • webpack构建性能优化策略小结

    webpack构建性能优化策略小结

  • iOS性能优化篇小结(一)

    iOS性能优化篇小结(二) 随着公司项目逐渐的稳定,前段时间在项目中引入了一个性能检测的工具,同时 iOS性能优化...

  • 性能优化小结

    1、layer.shadow 影响性能解决卡顿 你肯定是忘了layer.shadowPath这句话啦!!! 忘记这...

  • 性能优化小结

    工欲善其事,必先利其器。要想做好优化,首先得知道APP线上的各种数据,不管是自己撸还是接入其它家开源的,先得有个数...

  • iOS性能优化篇小结(二)

    iOS性能优化篇小结(一) 4. APP启动优化 APP启动可以分为2种: 冷启动:从零开始启动APP 热启动:A...

  • 2021-08-09 MySQL性能优化总结

    MySQL性能优化层面 SQL和索引层面优化 Explain 小结 嵌套查询一般是从外到内进行;小表驱动大表 --...

  • 前端性能优化小结

    优化 优化的目的是提升用户体验,减少网页加载时间。我们可以依据雅虎军规来对项目进行优化。 关于DOM减少DOM元素...

  • Android 性能优化小结

    本周有个需求,对某个界面进行优化,然后看了一些文章,并进行小结,为了方便以后回头查看。 仅供个人参考 一、界面绘制...

  • Web性能优化小结

    下载性能消灭重定向域名收敛,减少DNS解析减少文件数量(减少TCP连接数)压缩文件体积CDN客户端缓存 渲染性能C...

  • 前端性能优化小结

    概述 提高性能,最简单也是最显著的方法就是:减少HTTP请求的数量。每一个HTTP请求除了有TCP开销外,还包含大...

网友评论

      本文标题:性能优化小结

      本文链接:https://www.haomeiwen.com/subject/wcszprtx.html