标准微前端架构在蚂蚁的落地实践
如果无法正常显示,请先停止浏览器的去广告插件。
        
                相关话题:
                                    #蚂蚁
                            
                        
                1.             
                        
                2. 标准微前端架构
在蚂蚁的落地实践
有知            
                        
                3. OSS Enthusiast & Web Developer
有知 @蚂蚁⾦服 • 体验技术部
@kuitos            
                        
                4. 01.
微前端的场景域
02.
微前端的定义
03.
落地的关键问题            
                        
                5. 为什么需要微前端
1. ⼯程上的价值
2. 产品上的价值            
                        
                6. ⼀个三年陈的项⽬现状
commit log
dependencies
codebase overview
bundle size            
                        
                7. 开发⼈员流
技术栈⽼旧
开发体验差
动,各种祖
传代码
不兼容的框
架 API,⽆
法升级
遗产项⽬            
                        
                8. 产
品
体
验
上
的
问
题
控制台视觉不
统⼀
完成⼀个任务
跳多个控制台
产品
体验差
流程断点
重复的
加载 & 认证
·
·            
                        
                9.             
                        
                10. 微前端的概念定义            
                        
                11. Techniques, strategies and recipes for building a modern web app
with multiple teams using different JavaScript frameworks.
—— Micro Frontends            
                        
                12. 思路继承⾃微服务            
                        
                13. Micro Frontend Architecture
Shared Stitching Layer
Ads Team Products Team Users Team
API Service
BFF API Service
graphql API Service
web server            
                        
                14. 开发独⽴
发布、部
署独⽴
技术栈⽆关
应⽤隔离
动态组合            
                        
                15. 微前端架构中的技术选择            
                        
                16. 按架构类型区分
• MPA
• SPA            
                        
                17. 2017 年各云产品控制台架构调研            
                        
                18. 按运⾏时特性区分
• 单实例
• 多实例            
                        
                19. https://cloud.alipay.com/appA
https://cloud.alipay.com
菜单 A
菜单 B
应⽤ A 应⽤ B
应⽤ C 应⽤ D
当前菜单对应应⽤渲染结果
菜单 C
菜单 D
单实例,⼀个运⾏时只有⼀个 App Actived
多实例,⼀个运⾏时同时有多个 App Actived            
                        
                20. 怎
么
选
SPA OR MPA?
单实例 OR 多实例?            
                        
                21. 我全都要.jpg            
                        
                22. 技术细节上的决策
• 技术⽆关 • 路由及应⽤导⼊ • 应⽤隔离 • 资源及通信            
                        
                23. 如何做到技术⽆关            
                        
                24. 基于协议
?            
                        
                25. 不与某个具体框架的具体实现耦合
?            
                        
                26. 路由的问题            
                        
                27. Future State 问题
这样⼀条访问链路后,刷新当前 URL 通常情况下会发⽣什么?            
                        
                28.             
                        
                29. 应⽤导⼊⽅式的选择            
                        
                30. Config Entry
的问题
应⽤真实的元信息            
                        
                31. HTML Entry            
                        
                32. HTML Entry
Config Entry
优点: 优点:
• 接⼊应⽤的信息得到完整的保留
• 接⼊应⽤地址只需配⼀次
• ⼦应⽤的原始开发模式得到完整保留 • 相较于 HTML Entry,减少了运⾏时的解析消耗
缺点:
• 解析消耗留给了运⾏时
缺点:
• 主应⽤需配置完整的⼦应⽤信息,包含初始
DOM 信息、js/css 资源地址等
• js/css 地址通常是伴随每次⼦应⽤发布会变化的
,还需要⼀个配套的配置推送平台?            
                        
                33. 样式隔离            
                        
                34. BEM
CSS Module
Web Components
?            
                        
                35. Web Components 的问题
antd
modal
antd 样式表            
                        
                36. 解决⽅案
但并不是每个组件库都能像 antd ⼀样
完成度那么⾼            
                        
                37. 动态 加载/卸载 样式表            
                        
                38. JS Sandbox            
                        
                39. 公共依赖加载
React
15.1
React
15.6.2
Semver
Map
In
Runtime
React
15.2
React
16.9.0
React
16.1            
                        
                40. 应⽤之间数据共享及通信
基于 props 以单向数据流的⽅式传递给⼦应⽤
基于浏览器原⽣事件做通信            
                        
                41. 兄弟节点间通信以主应⽤作为消息总线
⾃⼰封装的 Pub/Sub 机制
??? 直接基于某⼀状态管理库做数据通信 ???            
                        
                42. 其他 性能/优化
异步样式导致的闪烁问题
预加载            
                        
                43.             
                        
                44. 衡量⼀个微前端⽅案是否友好的标准
技术⽆关 接⼊友好
不论是⼦应⽤还是主应⽤
都应该做到框架不感知 ⼦应⽤接⼊应该跟接⼊⼀个
iframe ⼀样轻松⾃然            
                        
                45. 蚂蚁的微前端落地实践            
                        
                46.             
                        
                47.             
                        
                48.             
                        
                49.             
                        
                50.             
                        
                51.             
                        
                52.             
                        
                53. ·
·            
                        
                54. 落地成果
• 70+ 线上应⽤接⼊(阿⾥云 + 蚂蚁云 + 专有云)
• 最复杂⼀个控制台同时集成 15+ 应⽤
• 4+ 不同技术栈
• 开发 -> 发布上线全链路的⾃动化⽀持
• ⼀云⼊驻多云运⾏            
                        
                55. 开源贡献
• 微前端内核
• umi 插件            
                        
                56. qiankun(乾坤)
https://github.com/umijs/qiankun/
https://github.com/umijs/umi-plugin-qiankun            
                        
                57. 推荐阅读
micro-frontends.org
martinfowler/micro-frontends
可能是你⻅过最完善的微前端解决⽅案            
                        
                58. THANKS            
                        
                59. Q&A