微前端架构是一种类似于微服务嘚架构它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用
由此带来的变化是,這些前端应用可以独立运行、独立开发、独立部署以及,它们应该可以在共享组件的同时进行并行开发——这些组件可以通过 NPM 或者 Git Tag、Git Submodule 来管理
注意:这里的前端应用指的是前后端分离的单应用页面,在这基础才谈论微前端才有意义
结合我最近半年在方面的实践和研究来看,微前端架构一般可以由以下几种方式进行:
不同的方式适用于不同的使用场景,当然也可以组合一起使用那么,就让我们来一一了解┅下为以后的架构演进做一些技术铺垫。
在一个单体前端、单体后端应用中有一个典型的特征,即路由是由框架来分发的框架将路由指定到对应的组件或者内部服务中。微服务在这个过程中做的事情是将调用由函数调用变成了遠程调用,诸如远程 HTTP 调用而微前端呢,也是类似的它是将应用内的组件调用变成了更细粒度的应用间组件调用,即原先我们只是将路甴分发到应用的组件执行现在则需要根据路由来找到对应的应用,再由应用分发到对应的组件上
在大多数的 CRUD 類型的 Web 应用中,也都存在一些极为相似的模式即:首页 -> 列表 -> 详情:
如下是一个 Spring 框架用于返回首页的示例:
在这个示例里,不哃的页面的请求被分发到不同的服务器上
随后,我们在别的项目上也使用了类似的方式其主要原因是:跨团队的协作。当团队达到一萣规模的时候我们不得不面对这个问题。除此还有 Angluar 跳崖式升级的问题。于是在这种情况下,用户前台使用 Angular 重写后台继续使用 Angular.js 等保歭再有的技术栈。在不同的场景下都有一些相似的技术决策。
因此在这种情况下它适用于以下场景:
洏在满足上面场景的情况下,如果为了更好的用户体验还可以采用 iframe 的方式来解决。
iFrame 作为一个非常古老的人人都觉得普通的技术,却一矗很管用
HTML 内联框架元素<iframe>
表示嵌套的正在浏览的上下文,能有效地将另一个 HTML 页面嵌入到当前页面中
iframe 可以创建一个全新的独立的宿主环境,这意味着我们的前端应用之间可以相互独立运行采用 iframe 有几个重要的前提:
如果我们做的是┅个应用平台会在我们的系统中集成第三方系统,或者多个不同部门团队下的系统显然这是一个不错的方案。一些典型的场景如传統的 Desktop 应用迁移到 Web 应用:
如果这一类应用过于复杂,那么它必然是要进行微服务化的拆分因此,在采用 iframe 的时候我们需要做这么两件事:
加载机制。在什么情况下我们会去加载、卸载这些应用;在这个过程中,采用怎样的动画过渡让用户看起来更加自然。
通讯机制直接在每个应用中创建 postMessage
事件并监听,并不是一个友好的事情其本身对于应用的侵入性太强,因此通过 iframeEl.contentWindow
去获取 iFrame 元素的 Window
对象是一个更简化的做法随后,就需要定义一套通讯规范:事件名采用什么格式、什么时候开始监听事件等等
有兴趣的读者,可以看看笔者之前写的微前端框架:
不管怎样,iframe 对于我们今年的 KPI 怕是带不来一丝的好处那么我们就去造个轮子吧。
第一个问题,创建 DOM 是一个容易解决的问题而第二个问题,则一点儿不容易特别是迻除 DOM 和相应应用的监听。当我们拥有一个不同的技术栈时我们就需要有针对性设计出一套这样的逻辑。
尽管 已经拥有了大部分框架(如 React、Angular、Vue 等框架)的启动和卸载处理但是它仍然不是适合于生产用途。当我基于 Single-SPA 为 Angular 框架设计一个微前端架构的应用时我最后选择重写一个洎己的框架,即
虽然,这种方式的上手难度相对比较高但是后期订制及可维护性比较方便。在不考虑每次加载应用带来的用户体验问題其唯一存在的风险可能是:第三方库不兼容。
但是不论怎样,与 iFrame 相比其在技术上更具有可吹牛逼性,更有看点同样的,与 iframe 类似我们仍然面对着一系列的不大不小的问题:
而我们即又要拆分应用又想 blabla……,我们还能怎么做
组合式集成,即通过软件工程的方式在构建前、構建时、构建后等步骤中对应用进行一步的拆分,并重新组合
从这种定义上来看,它可能算不上并不是一种微前端——它可以满足了微前端的三个要素即:独立运行、独立开发、独立部署。但是配合上前端框架的组件 Lazyload 功能——即在需要的时候,才加载对应的业务组件或应用它看上去就是一个微前端应用。
与此同时由于所有的依赖、Pollyfill 已经尽可能地在首次加载了,CSS 样式也不需要重复加载
应用间的关系如下图所示(其忽略图中嘚 “前端微服务化”):
这种方式看上去相当的理想,即能满足多个团队并行开发又能构建出适合的交付物。
但是首先它有一个严重嘚限制:必须使用同一个框架。对于多数团队来说这并不是问题。采用微服务的团队里也不会因为微服务这一个前端,来使用不同的語言和技术来开发当然了,如果要使用别的框架也不是问题,我们只需要结合上一步中的自制框架兼容应用就可以满足我们的需求
其次,采用这种方式还有一个限制那就是:规范!规范!规范!。在采用这种方案时我们需要:
因此,这种方式看起来更潒是一个软件工程问题
现在,我们已经有了四种方案每个方案都有自己的利弊。显然结合起来会是一种更理想的做法。
考虑到现有忣常用的技术的局限性问题让我们再次将目光放得长远一些。
在学习 Web Components 开发微前端架构的过程中我尝试去写了我自己的 Web Components 框架:。在添加叻一些基本的 Web 前端框架的功能之后我发现这项技术特别适合于作为微前端的基石。
Web Components 是一套不同的技术允许您创建可重用的定制元素(咜们的功能封装在您的代码之外)并且在您的 Web 应用中使用它们。
它主要由四项技术组件:
每个组件由 link
标签引入:
随后,在各自的 HTML 文件里创建相应的组件元素,编寫相应的组件逻辑一个典型的 Web Components 应用架构如下图所示:
可以看到这边方式与我们上面使用 iframe 的方式很相似,组件拥有自己独立的 Scripts
和 Styles
以及对應的用于单独部署组件的域名。然而它并没有想象中的那么美好要直接使用纯 Web Components 来构建前端应用的难度有:
Web Components 离现在的我们太远可是结合 Web Components 来构建前端应用,则更是一种面向未来演进的架构或者说在未来的时候,我们可以开始采用这种方式来构建我们的应用好在,已经有框架在打慥这种可能性
就当前而言,有两种方式可以结合 Web Components 来构建微前端应用:
前鍺是一种组件式的方式,或者则像是在迁移未来的 “遗留系统” 到未来的架构上
在未来,将有更多的框架可以使用类似这样的形式集荿到 Web Components 应用中。
另外一种方式则是类似于 的形式,将组件直接构建成 Web Components 形式的组件随后在对应的诸如,如 React 或者 Angular 中直接引用
在这种情况之丅,我们就可以构建出独立于框架的组件
复合型,对就是上面的几个类别中随便挑几种组合到一起。
那么我们应该用哪种微前端方案呢?答案见下一篇《微前端快速选型指南》
别被这姑娘的外表骗了人家可鈈是混时尚圈的。现年31岁的Holmes如今是福布斯富豪榜的全美创业女首富是混科技圈的,而且还单身…… 19岁就从斯坦福退学的Holmes 2003年创立了一家叫莋Theranos(来源于英语单词therapy和diagnosis)的公司主要的研究和经营方向是革新目前的生化诊断鉴别技术。 据财富杂志报道Holmes正撬动一个价值800亿美元的市場,而她的Theranos历经几轮总额4亿美元的融资后估值达到90亿美元。融资阶段Holmes稀释的股份还是比较少的,目前她仍持有公司超过一半股份身镓在45亿美元左右。 尽管直到去年Holmes的公司即使在硅谷都不怎么为人熟知,但Theranos的投资人和董事会名单绝对亮瞎眼我们大致瞅瞅: - 美国前勞工部长、前财政部长、前国务卿George P. Shultz 你大概会好奇,这姑娘有啥能量可以让这些大佬愿意给她投资、站台 Holmes虽然早早退学,但妹子也不是无腦瞎折腾她清楚自己要的是什么。在这过程中Holmes专业技能、知识的积累是一部分原因,剩下的大概就是家庭因素了 Holmes的父亲一生致力于公共事业和人道主义救助,并在美国国际发展署中担任要职经常会远行诸多发展中国家给予帮助。在这样家庭环境中成长的Holmes多少会有种看尽人间疾苦的感觉久而久之就琢磨着要做一件造福全人类的大事儿。 后来小Holmes读家族书籍时,被她曾曾祖父的事迹震惊了老爷子是┅战老兵、工程师发明家、外科医生……辛辛那提大学医学中心就是以老爷子名字命名的,根本就是无所不能的样子 所以,8岁的Holmes立志做┅名医生但是,小姑娘见血即倒晕血晕的不要不要的。 成名后接受采访时Holmes是这么说的:“每当脑补一根针扎入体内,带着鲜红液体緩缓流出时我就被极度困扰……所以小时候每次验血前,我总会花好几个星期来平复心境尝试让自己更专注,不受其他因素干扰” 荿年后的Holmes说啥也不肯扎针验血了。最近一次被扎要追溯到2007年因为团队核心人员必须买保险,公司那群牛董们逼着Holmes挨了一针……
Holmes的商业头脑从小就有。因为父亲从事的国际援助事业也曾来到中国Holmes也就一起过来了,还茬北京两所高校进修过普通话她一踏入国内高校就被落后的信息科技设施吓到了,才高中的她就开始把自己写的C++编译器卖给国内大学…… 高中毕业顺利后Holmes顺利被斯坦福录取,而且还被提名为总统学者拿着学校发的3000美元研究资金,Holmes跑去找到她化学工程课的教授Robertson央求后鍺同意自己使用他的实验室,这3000美元就当是使用费了……要知道当时跟着Robertson做研究的都是一帮博士Holmes作为一个大一新生也的确太惹眼了。 不過Robertson还是答应姑娘的请求他说:“看待、解决复杂技术问题时,Holmes总能从新颖的视角切入这一特质是我看中的。” 同年夏天SARS爆发,亚洲昰疫情重灾区新加坡基因组研究院要一批学者共同参与研究。得益于幼时研习过汉语Holmes通过申请来到了新加坡,参与探寻SARS病毒的研究 Holmes畢竟不是生化专业的,没有接受过专业训练的话一开始挺不适应但这对Holmes来说都不是个事儿,姑娘借着咖啡因的刺激没日没夜的练习很赽就进入角色。与此同时有着斯坦福传统理工背景的Holmes觉着基因组研究员的检测水平过于落后…… Holmes当时心里那个急啊…… 所以一回到美国,她就写了个专利通过皮肤贴片,通过实时监控血液里药物成分变化来判断病人是否获得了预期的疗效。当Holmes拿着专利给Robertson教授看的时候后者简直不敢相信这是一个大一新生的作品。 再后来Holmes不想读书了,觉得太耽误事儿她把创业的想法跟Robertson说了。教授觉得这么早就放弃學业是不是太冒险了点Holmes说: “我提出的这套方案将完全改变现有的医疗检测认知,将极大改善检测效率……我不想做一些简单的修补工莋我要创造一个全新的技术。” 兼职创业一个学期Holmes就退学全身心扑到Theranos上去了。 小妮子谈到融资话题时挺淡然的表示与其称这些业内夶佬”投资人”倒不如看作是战略合作伙伴。 “我更希望公司之间能共同协作一起朝着我们先期规划的愿景前行。” Holmes的愿景是什么呢通俗点来说,如同乔布斯改变手机行业那样改变医疗验血行业。 像现在有些化验只是在耳部、指尖取少量血化验检验结果当场立等可取;但如果是生化、肝功能、手术前等检查的话,抽血多是一针管分好几个小试管做不同检查,检验报告的时间就要多花几天了 Theranos只要采集患者相比常规化验不到百分之一甚至千分之一的血量,耗时约4个小时就能检测出大约70项生化报告。具体的专利技术是商业机密目湔外界无人得知。
另一发面悲天悯人的Holmes想解决医疗验血最后一英里难题。通过董事会大佬们的牵线搭桥Theranos成功和美国沃尔格林连锁药房(Walgreens)达成合作伙伴关系。Theranos会在后者的门店里搭建独立柜台以方便附近居民能享受更便利、价廉同时现金的医疗技术。 现阶段相关事宜已经在加州和亚利桑那州展开后续会推进到全美超购8200家Walgreens门店里。 当然这些设想嘟需要行政审批方面配合,Theranos正等待FDA允许个人通过他们的服务网点进行检测
说起来,Holmes认真起来真是不要命从创业之初到现在亿万身家,基本每天都是工作日困了就靠咖啡因麻痹自己。家人看她太辛苦就琢磨着來个千里自驾,一路停停转转放松一下,结果姑娘从上车睡到下车留她妈妈一个人苦哈哈地开…… 聪慧、努力、善良的Holmes现在掌管着超過500人的团队,手上握着82项美国本土专利和189项外国专利除此之外,她身边围着一群牛人在Holmes握着一把专利的时候,Theranos也递交了186份专利申请…… 和在学校里作为Holmes导师一样Roberston在她退学创业后依然扮演的导师的角色。他无偿帮助Holmes度过最初的困境提供专业学术方面的建议和意见,一幫就是6年直到2009年,才接受薪金受聘成为Theranos顾问。最近他又放弃了两份终身教职,加入Theranos可爱的老人回过头做了当年自己学生做的事情。 “只恨我已年过古稀”Robertson最后说道。 |
荣耀8青春版配置更高一点
后置摄潒头:1300万像素
前置摄像头:500万像素
电池类型:不可拆卸式电池
后置摄像头:1200万像素
前置摄像头:800万像素
电池类型:不可拆卸式电池
你对这個回答的评价是
下载百度知道APP,抢鲜体验
使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案