| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 优酷小程序优化实战 -> 正文阅读 |
|
[移动开发]优酷小程序优化实战 |
作者:拔根 优酷App接入支付宝小程序框架,扩展了优酷App的能力。但由于内置小程序sdk过程中,优酷App和支付宝App平台运行时环境存在差异,带来了以下几大问题:
为解决以上问题,优酷势必要在包大小、线程数、内存等方面有不一样的处理。接下来,本文就将为大家介绍优酷在面临这些差异与问题时的解决方案。 远程化SO在内置过程中,我们发现支付宝小程序框架大概占了23MB。比较理想的方案是全部远程化,这样不占用优酷App的包大小,但目前优酷短时间内暂不具备全部远程化的条件。通过分析,我们发现,23MB的空间里面so占了7MB,而相对于代码和资源文件,so相对独立。因此我们的方案如下:
其中,比较复杂的就是 so 依赖关系分析,我们的处理过程如下: 1、分析依赖关系
objdump是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息,类似的还有readelf命令。依赖的 so 有的是操作系统的,有的是其他aar包里面的,其中操作系统的就不用关心了,其他aar包里面的so需要进行记录。 2、收集依赖关系:
大家可以参考上述表格来对每个so进行依赖信息的收集,最终这些so的关系可以组成一个网状型。如下所示: 3、分层依赖关系: 分层依赖关系的设计原则如下:
依此类推。
4、代码实现
5、小结 在集成小程序过程中,优酷通过远程化so,减小了7MB的包体积。相应的,用户首次进入小程序时,需要一定的等待时间,影响了一点用户体验。 注入线程池在某些手机中,尤其是华为手机,针对APP线程数有上限,超过就会crash。基于此,优酷APP通过统一线程池对线程进行管控的,当线程数达到一定数量时,会通过排队方式执行任务,而不是继续新增线程。 由于业务属性不同,优酷播放器页面启动线程数量很多,使用过程中一旦进入此页面,线程数最高可以达到300+。该页面如果存在小程序入口,一旦启动优酷小程序,线程数会在原来基础上暴增100左右。这样就很容易达到APP线程数上限,导致 java.lang.OutOfMemoryError 错误。 事实上,通过线上监控平台发现,确实有不少此原因导致的Crash。那么,怎么解决这个问题呢? 一个比较好的方案是希望将支付宝小程序框架的线程纳入到优酷的统一线程池来管理。这样,当支付宝小程序框架希望执行任务时,只需要把任务提交给优酷线程池执行,而不用真正的创建线程。优酷线程池根据系统的情况决定是新建线程还是排队执行。 通过和支付宝的同事沟通,他们也认同这种方案。由支付宝小程序框架提供接口,将优酷统一线程池注入给小程序框架。当底层判断已经有优酷统一线程池,就直接使用,不再新建。 实现如下:
上线前后,从以下数据中可以看到,效果非常显著。几乎各个模块都减少了90%的crash。数据对比效果如下: 懒加载小程序上线初期,业务量不大,如果一启动优酷APP就立刻初始化小程序框架,影响了启动速度,浪费内存。因此我们的策略是采取懒加载模式。流程如下所示: 1、远程依赖检查 小程序运行是有远程依赖的,下载这些远程依赖需要流量和等待时间。因此我们会在首次打开小程序业务的时候,弹窗告诉用户这些信息,并询问是否同意:如果用户不接受,则不进入小程序APP,关闭弹窗;如果用户接受,则下载远程依赖,并在下载完成后,自动完成后续流程。 2、小程序运行条件检查 最终加载小程序页面的是渲染内核,当运行条件检查发现不具备运行条件,也就是冷启动小程序时,就必须先判断渲染内核是否已经加载完成 (需注意:渲染内核不止小程序一个业务依赖,有可能被其他业务先加载)。 渲染内核初始化完成后,我们继续进行小程序框架的初始化。等到这一步正常结束,小程序运行条件才完全具备。我们才可以正常加载小程序页面。 初始化后,通过变量标识,当小程序退出时,并不会回收全部内存。所以第二次及以后就是热加载小程序了。由于省略了渲染内核的初始化和小程序框架初始化,速度也会快很多。 总结和展望优酷APP主要为用户提供内容服务,在集成支付宝小程序框架后,扩大了能够提供内容服务的范围,进一步扩大了优酷作为平台的能力。后续优酷仍会继续在以下技术方向努力:
关注我们,每周 3 篇移动技术实践&干货给你思考! |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:52:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |