//xia仔のke:quangneng.com/5075/
前言
Flutter 是 Google 开源的跨平台 UI 框架,其凭借“多端一致”和“渲染性能”上的优势成为越来越多开发者的首选。但随着使用规模加大,为了解决诸多快速迭代的业务产品线及需求,动态化成为了当下亟需解决的问题
Fair是58自研的的动态化框架,通过Fair Compiler工具对原生Dart源文件的自动转化,使项目获得动态更新Widget Tree和State的能力。
近期我们在吸取了开源社区的反馈与建议后,针对开发体验完善了Fair的配套工具建设,下面进入正题
项目背景
当前Fair在使用上有着一定的门槛,新接触的小伙伴一般是阅读使用指南来上手Fair,大致需要经过下面的几个步骤
- 创建工程,配置依赖
- 编写Fair代码,手动编译动态化产物
- 将编译产物手动拷出,通过文件或者网络的方式加载
- 安装预览效果
如果需要更新动态化产物重新预览效果的话,就要重复234步骤,这样对于上手的过程是极不方便的,我们在开源社区收到的反馈中也有很大一部分是有关基础使用。
研发Fair配套工具链是为了辅助开发者快速上手 Fair开发,提升Fair开发效率,规避Fair不支持的Flutter语法,主要包含三个部分:
- 工程创建:快速搭建Fair载体工程及动态化工程
- 模板代码:提供页面及组件模板
- 本地热更新:线下开发使用,实现开发阶段快速预览Fair动态化功能
我们以dart命令行工具及AS插件的形式提供给开发者使用。
流程图
对于Flutter动态化解决方案的实战流程,可以简单地描述如下:
- 需求分析和设计:
- 确定需要动态化的功能和模块。
- 设计动态化方案的架构和实现方式。
- 集成动态化框架:
- 选择合适的Flutter动态化框架,如Flutter Booster、Flutter Dyna等。
- 集成框架到Flutter项目中。
- 热更新服务器搭建:
- 搭建热更新服务器,用于存储和管理动态化资源。
- 配置服务器的环境和权限设置。
- 动态资源管理:
- 将需要动态化的资源上传到热更新服务器。
- 实现客户端的资源下载和更新逻辑。
- 动态化模块设计:
- 划分动态化模块的边界和功能。
- 设计动态模块的加载和卸载机制。
- 动态化功能实现:
- 开发动态化模块的业务逻辑和界面展示。
- 实现动态模块的加载和运行逻辑。
- 版本控制和更新策略:
- 设计版本控制和更新策略,确保动态资源的版本一致性和安全性。
- 实现版本检查和更新提示功能。
- 性能优化和稳定性测试:
- 进行性能优化,减少动态资源的加载时间和内存占用。
- 进行稳定性测试,确保动态化功能的稳定性和可靠性。
- 发布和部署:
- 发布动态化功能到线上环境。
- 配置客户端的自动更新机制,确保用户能够及时获取到最新版本的动态资源。
- 监控和反馈:
- 实时监控动态化功能的使用情况和性能指标。
- 收集用户反馈和意见,及时优化和改进动态化方案。
工具选择
在选择Flutter动态化解决方案时,您可以考虑以下一些工具和框架:
- Flutter Booster:
- Flutter Booster 是一款由阿里巴巴开发的Flutter性能优化和动态化框架。它提供了诸如页面预加载、按需加载、热更新等功能,可以帮助提升应用的性能和灵活性。
- Flutter Dyna:
- Flutter Dyna 是一款开源的Flutter动态化框架,提供了动态加载Flutter页面、资源和插件等功能。它支持通过热更新方式更新应用的部分代码和资源,可以用于实现模块化开发和动态更新。
- Flutter Hot Reload:
- Flutter 自带的热重载功能也可以用于实现部分动态化。通过热重载,您可以在应用运行时快速更新和调试代码,提高开发效率。虽然它主要用于开发阶段的调试,但在某些场景下也可以用于动态化更新。
- Appcenter:
- Microsoft 的 Appcenter 提供了一套用于移动应用构建、测试、分发和监控的工具。它包含了热更新服务,可以用于Flutter应用的动态化更新。
- CodePush:
- CodePush 是微软的一项移动应用动态更新服务,可以用于Flutter应用的热更新。它提供了简单的API和命令行工具,方便集成和管理动态化更新。
- Cachet:
- Cachet 是一款用于Flutter应用的动态化解决方案,提供了动态加载页面和资源的功能。它支持通过服务器端配置实现页面的动态化更新,适用于一些特定的场景和需求。
- 其他自定义解决方案:
- 如果以上工具都不符合您的需求,您还可以考虑自行开发或集成其他自定义的动态化解决方案。根据您的项目需求和技术能力,您可以选择合适的技术栈和开发方式来实现动态化功能。
在选择工具时,您可以根据项目的需求、团队的技术栈和经验、开发周期和预算等因素进行权衡和选择。同时,确保所选工具具有良好的社区支持和稳定的性能,以保证项目的顺利进行和后续的维护。