有赞移动跨平台框架实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 移动跨平台框架实践
⼤大盛 / 李李⼦子
2. 跨平台框架
3. 有赞的实践
4. 开发效率
4⼈人⽇日
2.5⼈人⽇日
3⼈人⽇日
包⼤大⼩小 动态化
- iOS ZanLuaControl
Android Tinker
iOS 增加 5 M ⻚页⾯面级替换
Android 增加 3.4 M ⽆无需重启App
iOS 增加 28 M
Android 增加 6 M
暂不不⽀支持
5. ZanWeex 基础建设
脚⼿手架
开发体验
构建平台
发布平台
SDK
6. ZanWeex 基础建设
脚⼿手架
开发体验
构建平台
发布平台
SDK
7. 脚⼿手架
• ynpm i -g zweex-toolkit
• zweex create
8.
9. 脚⼿手架
• ynpm i -g zweex-toolkit
• zweex create
• zweex page
• npm run start hi, helloworld
10. ZanWeex 基础建设
脚⼿手架
开发体验
构建平台
发布平台
SDK
11. 开发体验
• UI组件库
12. 开发体验
• UI组件库 ‣ viewWidth
• weex.config.yzenv ‣ viewHeight
‣ statusBarHeight
‣ bottomHeight
13. 开发体验
• UI组件库 ‣ zwm-navigator
• weex.config.yzenv ‣ zwm-carmen
• 统⼀一 module 协议
‣ zwm-config
‣ zwm-account
‣ zwm-logger
14. 开发体验
• UI组件库 ‣ ZParamStorage module
• weex.config.yzenv ‣ BroadcastChannel
• 统⼀一 module 协议
• ⻚页⾯面间传参
15. 开发体验
• UI组件库
• weex.config.yzenv
vue
拷⻉贝URL
• 统⼀一 module 协议
• ⻚页⾯面间传参
• 图⽚片相对路路径
/Resources
CDN
图⽚片资源⽂文件
16. 开发体验
• UI组件库
• weex.config.yzenv
• 统⼀一 module 协议
• ⻚页⾯面间传参
• 图⽚片相对路路径
17.
18. 开发体验
• UI组件库
• weex.config.yzenv
• 统⼀一 module 协议
• ⻚页⾯面间传参
• 图⽚片相对路路径
19. 开发体验
• UI组件库
• weex.config.yzenv
• 统⼀一 module 协议
• ⻚页⾯面间传参
• 图⽚片相对路路径
20. 开发体验
• UI组件库
• weex.config.yzenv
• 统⼀一 module 协议
• ⻚页⾯面间传参
• 图⽚片相对路路径
• 其他
21. 开发体验
• UI组件库
• weex.config.yzenv
• 统⼀一 module 协议
• ⻚页⾯面间传参
• 图⽚片相对路路径
• 其他
22. ZanWeex 基础建设
脚⼿手架
开发体验
构建平台
发布平台
SDK
23. 构建平台
24.
25. 项⽬目基本信息
模块唯⼀一标识
代码仓库地址
构建列列表
26. 构建产物
项⽬目
项⽬目基本信息
pagexxx.js
构建分⽀支
模块唯⼀一标识 …
代码仓库地址 pagexxx.js
CDN
27. 构建平台
构建产物
项⽬目
项⽬目基本信息
pagexxx.js
构建分⽀支
模块唯⼀一标识 …
代码仓库地址 pagexxx.js
CDN
28. ZanWeex 基础建设
脚⼿手架
开发体验
构建平台
发布平台
SDK
29. 发布平台
30.
31. 发布平台
32. 发布平台
33.
34.
35. 发布平台
36. 发布平台
项⽬目
配置表
项⽬目基本信息
{
⻚页⾯面Route: {
id: xxx
jsURL: xxx,
md5: xxx
},
…
,
⻚页⾯面Route: {
id: xxx
jsURL: xxx,
md5: xxx
}
⻚页⾯面列列表(可编辑)
⻚页⾯面Route JS URL 下发规则
xxx-page https://xxx.js 全量量
xxx-page https://xxx.js 灰度
xxx-page https://xxx.js 条件
权限与审批
…
xxx-page
https://xxx.js
全量量
有赞移动基础保障平台
}
37.
38. 发布平台
Push
ZanWeex SDK
Fetch
39. 发布平台
Push
ZanWeex SDK
缓存
渲染
Fetch
数据
40. ZanWeex 基础建设
脚⼿手架
开发体验
构建平台
发布平台
SDK
41. SDK 配置拉取策略略
• 收到发布平台的更更新消息
• ⽹网络状态切换
• 失败重试 3 次
• 业务⽅方主动控制
• 业务⽅方内置配置表及js⽂文件
42. SDK 缓存策略略
本地缓存
内存
本地缓存
更更新缓存
配置表
render
JS⽂文件
内置⽂文件
内置配置表
即时下载
渲染
43. SDK 多业务模块
业务模块 1
业务模块 2 … 业务模块 X
模块2缓存区 … 模块X缓存区
ZanWeex SDK
模块1缓存区
44. SDK 数据收集
• ⻚页⾯面JS⽂文件是否下载成功
• ⻚页⾯面是否渲染成功
• ⻚页⾯面渲染的开始及结束时间统计
• ⻚页⾯面的JS错误级别⽇日志
45. 数据展示
46.
47. 数据展示
48. 数据展示
49. 数据展示
50. ZanWeex 基础建设
脚⼿手架
开发体验
构建平台
发布平台
SDK
51. ZanWeex 现状
Weex⻚页⾯面总共
344 个
Weex⻚页⾯面总渲染次数
⻚页⾯面平均渲染时间
69575802 次
178 ms
52. Flutter 实践
李李⼦子
53. 探索
实践
成果
规划
54. 探索
实践
成果
规划
55. Flutter发展过程
2019.03
Flutter 1.2
提升稳定性、性
能,全新的基于
Web的调试⼯工具
2018.06
预览版发布
2018 .12
Flutter 1.0
正式版发布
2019.07
Flutter 1.7
Android X , 64
位应⽤用⽀支持等
2019.05
Flutter 1.5
正式成为全平台框
架,⽀支持⼿手机、
Web、桌⾯面电脑和
嵌⼊入式设备
2019.09
Flutter 1.9
稳定版发布
Flutter for Web
合并⾄至主仓库
56. Flutter 调研
Native
CPU 7.7%
较平稳
• 性能流畅度
• 学习成本
• ⽣生态环境
• 开发体验
内存 12M
Flutter
CPU 18.8%
波动⼤大
内存 21M
57. Flutter 调研
• 性能流畅度
• 学习成本
• ⽣生态环境
• 开发体验
Flutter Inspector ⼯工具fps 变化
58. Flutter 调研
• 性能流畅度
更更贴近Native
Flutter 框架易易理理解
Dart 与Kotlin 、Swift语⾔言特性
较多相似易易理理解
• 学习成本 类似的UI架构 全局主题配置 可空类型处理理 函数式编程
• ⽣生态环境 UI适配⽅方案 多语⾔言处理理 关键字 泛型
路路由管理理 ········ 扩展函数 ········
• 开发体验
59. Flutter 调研
• 性能流畅度
• 学习成本
⾕谷歌的⼤大⼒力力推⼴广与⽀支持
6000 + 的三⽅方库⽀支持
活跃的Flutter社区
79.6 K Star
16678次提交
• ⽣生态环境 较多⼤大⼚厂在探索试点 233次发版
• 开发体验 闲⻥鱼、微信、QQ、
京东、58,360等 485位贡献者
60. Flutter 调研
环境搭建 AS / IntelliJ /
VSCode 完善的中英⽂文⽂文档
框架语⾔言学习 更更贴近Native
Flutter 框架 Dart Kotlin Swift
语⾔言特性相似
组件库丰富 嵌套编码布局
完善的开发⼯工作流 ⽀支持 Hot Reload
• 性能流畅度
• 学习成本
• ⽣生态环境
开发调试
• 开发体验
构建集成
官⽅方集成侵⼊入性较强
61. Flutter 调研
• 性能流畅度
FPS接近60帧,内存较原⽣生偏⾼高
• 学习成本 学习成本低,1天即可进⼊入开发
• ⽣生态环境 强⼤大的社区⽀支持
• 开发体验 更更贴近移动的开发体验
62. Flutter 内部试点
帧率 8.1 ms / frame 帧率 8.7 ms / frame
刷新率 4.2 ms / frame 刷新率 7.6 ms / frame
63. 探索
实践
成果
规划
64. 有赞Flutter 架构
AS插件
AS插件
效率提升 资源管理理 数据监控 异常上报 埋点监控
构建发布 ZanFlutter 混编⽅方案 MBD构建集成
基础建设
YouZan Flutter
Pub
基础插件
⼯工程模板
UI组件库
路路由管理理
65. Flutter 插件是什什么?
⼀一种专⽤用的Dart包,其中包含⽤用Dart代码编写的API,以及针对Android
和iOS平台的特定实现,也就是说插件包括原⽣生代码与Dart代码
Weex
Module
=
Flutter
Plugin
=
JSBridge
66. 已开发插件
⽹网络库插件 埋点插件
分享库插件 路路由插件
Toast插件 Bugly插件
67. Pub 是什什么?
Maven
=
Pub
=
CocoaPods
68. Youzan Pub
Youzan Pub是⼀一个由dart编写的server,⽀支持上传和下载,同时也⽀支持上传到Flutter 公共
社区,实际开发中,内部开发的插件是不不对外暴暴露露的。
⽹网络库插件 Flutter 业务模块
分享库插件 Flutter 业务模块
埋点插件
……
官⽅方校验
上传
Youzan Pub
Flutter 业务模块
……
69. UI组件库
下拉刷新组件 Dialog
导航栏 YZAssestImage
CachedNetworkImage ……….
70. 路路由管理理
Native
Page
Page
Page
Page
相互依赖耦合严重
开发体验差
Flutter
Page
Page
Page
Page
71. 路路由管理理
Native
Page
Route
Flutter
Page
Page
Page
ZanUrlRouter / Bifrost
Page
Page
Page
Page
72. Flutter ⻚页⾯面栈
Activity / VC
Activity / VC
Activity / VC
Activity / VC
Flutter Page
Native Page
Flutter Page
Native Page
73. Flutter ⻚页⾯面栈
Activity / VC
Native Page
Activity / VC
Flutter Page
Activity / VC
Native Page
Activity / VC
Flutter Page
74. Flutter 多引擎问题
Activity / VC
Activity / VC
Flutter View
Activity / VC
Activity / VC
Flutter Engine
Native Page
Flutter View
Flutter Engine
Native Page
IO
UI
GPU
IO
UI
GPU
75. Flutter Boost
Activity / VC
Activity / VC
FlutterView
FlutterView
复⽤用
复⽤用
Engine
UI
FlutterView
复⽤用
共享引擎
IO
Activity / VC
GPU
76. Native
Page
Route
Page
Page
Page
ZanUrlRouter / Bifrost
Flutter Boost
Flutter
Page
Page
Page
Page
77. 什什么是好的混编⽅方案 ?
低成本接⼊入App
⾼高内聚低耦合的代码结构
⾼高效的开发调试
78. Flutter 构建产物 Native桥接库
Android 若⼲干aar 实现native与
Flutter
的对接逻辑
iOS .a & .framework
Host App
79. Maven / CocoPods
Flutter 构建产物 Native桥接库
Android 若⼲干aar 实现native与
Flutter
的对接逻辑
iOS .a & .framework
Host App
80. Maven / CocoPods
Maven / CocoPods
Flutter 构建产物 Native桥接库
Android 若⼲干aar 实现native与
Flutter
的对接逻辑
iOS .a & .framework
Host App
81. Maven / CocoPods
Maven / CocoPods
Flutter 构建产物 Native桥接库
Android 若⼲干aar 实现native与
Flutter
的对接逻辑
iOS .a & .framework
⼯工程引⽤用
Host App
82. 资源管理理
原有⽅方式资源⽂文件使⽤用繁琐
1. Yaml ⽂文件注册资源⽂文件
2. 代码使⽤用需要写全地址且没有代码补全
3. 资源⽂文件重命名或路路径变更更较麻烦
83.
84. 资源管理理
85. Flutter 踩坑
• ⼯工程代码重置问题
• 打包缺少⽂文件问题
• setState刷新异常
• Flutter SDK 1.7.8 版本升级问题
• ·············
86. Flutter 刷新异常
在state dispose后,element会和state断开相互
引⽤,如果在这个时候开发者去拿element的
位置信息或者调⽤setstate 刷新布局时就会报
异常。
87. SDK升级1.7.8版本异常
原因: Flutter 1.7.8 加⼊UI 线程检测
88. SDK升级1.7.8版本异常
解决办法: 所有Flutter项⽬以及插件与Native协议交互代码
都要检查确认是在UI线程执⾏
89. Flutter 开发全流程
开发
基础插件控件
⼯工程模板
资源管理理
构建发布
MBD 构建发布
托管
Youzan Pub
集成
数据监控
路路由管理理 异常上报
混编⽅方案 埋点监控
90. 探索
实践
成果
规划
91. Flutter ⻚页⾯面总计
Flutter ⻚页⾯面总计浏览量量
7 个
67500 次
92. Flutter 线上⻚页⾯面
93. Flutter 后续规划
• 稳定性保障(性能监控等)
• 基础库的补充完善
• 动态化(动态配置等)
• 更更多的线上实践应⽤用
94. Flutter 路路由管理理
Weex 脚⼿手架
Flutter 效率提升
ZanWeex SDK
Q & A
Flutter 踩坑
Weex 构建平台
Weex 发布平台
Flutter 混编⽅方案