0x1 跨端
-
跨端背景
PC 端(WLM)、移动端(Android/iOS)、web 端、IoT 设备(车载设备、手表)
常见痛点:
- 各端功能区别不多,但需要单独配置开发人员
- 开发、维护成本高
- Android、iOS 发版周期长
-
跨端技术方案目标
- 加快研发效率,降低学习成本,提高多端一致性
- 增强用户体验,提高稳定性,优化性能
- 支持动态下发,满足日益增长的业务需求
0x2 跨端技术方案介绍
技术方案 | 视图层 | 逻辑层 | 优点 | 缺点 |
---|---|---|---|---|
Hybrid | WebView | WebView JS thread | 开发成本低/CSS全集/一致性好 | 性能中等 |
原生渲染 | 原生组件 | JS Engine | 性能好 | CSS子集/一致性一般 |
自渲染 | Skia | Dare VM | 性能最好/一致性好 | CSS子集/Dart生态一般/开发成本高 |
小程序 | WebView+原生组件 | JS Engine | 开发成本低/CSS全集/一致性好 | 性能较好 |
-
Hybrid 方案
基于 WebView 渲染,通过 JS Bridge 把一部分系统能力开放给 JS 调用
graph LR A(JavaScript)-->B(Bridge) B--Platform-->C1(WebView) C1-->C2(Canvas/Events) B--Services-->D1(Location/Bluetooth/Audio/Sensors/Camera/...) -
原生渲染方案
使用 JS 开发,通过中间层桥接后使用原生组件来渲染 UI 界面
-
React Native
由 Facebook 发布的一款开源的 JS 框架,通过 JS 和 React 来开发跨平台的移动应用
graph LR A(JavaScript)-->B(Bridge) B--Platform-->C1(OEM widgets) C1-->C2(Canvas/Events) B--Services-->D1(Location/Bluetooth/Audio/Sensors/Camera/...)
-
-
自渲染方案
利用 Skia 重新实现渲染管线,不依赖原生组件
-
Flutter
由 Google 发布的一款开源用于开发框架
-
-
小程序方案
使用小程序 DSL+JS 开发,通过中间层桥接后调用原生能力,使用 WebView 来渲染 UI 界面
0x3 基于小程序跨端实践
-
快速开发一个小程序
- 下载小程序开发者工具
- 开发、调试
- 上传
-
性能优化
-
优化意义
- 留住用户
- 提升转化率
- 提升用户体验
-
性能指标
graph LR A(Loading)-->B(FP<br/>First Paint) B-->C(LCP<br/>Largest Contentful Paint) -
优化手段
- 启动性能体验
- 减少包体积
- 合理使用分包
- 移除无用文件
- 控制包内静态资源
- 减少同步逻辑
- 优先使用异步 API
- 避免启动时运行过多同步代码
- 更早的展示首屏数据
- 尽早调用关键 API 和请求
- 接入数据预取
- 避免非必要的 reLaunch
- 合理缓存数据
- 网络数据缓存
- API 数据缓存
- 图片优化
- 选择合适的图片格式
- 进行合理的压缩
- 使用 CDN 并开启缓存
- 其他
- 框架骨架屏
- 占位组件
- 减少包体积
- 运行时性能体验
- 合理使用 setData
- 减少发送频率
- 动画不使用 setData
- 合理使用自定义组件
- 合理的拆分组件数量
- 只注册当前使用的组件
- 同步修改初始 data
- 合理监听处理事件
- 合理监听处理 scroll 事件
- 去掉不必要的事件绑定
- 内存优化
- 及时解绑事件监听
- 及时清理定时器
- 导航栏适配
- 适当开启自定义导航栏
- 关键信息避开状态栏和胶囊按钮
- X 分屏适配
- 通过 onResize 监听显示区域变化
- 不使用 JS 设置 ScrollView 高度
- 合理使用 setData
- 启动性能体验
-
性能评分工具
- Audits
- Trace
-
-End-
标签:渲染,--,技术,JS,概述,跨端,组件,WebView From: https://www.cnblogs.com/SRIGT/p/17595725.html