![](http://www.ctiforum.com/uploadfile/2018/0803/20180803023747845.jpg)
Uber开源其内部使用的网页框架Fusion.js,该框架能够简化网页开发并产出轻量高性能的应用程式,支援React和Redux等热门函式库,也提供热模组重载、资料感知服务器 端渲染与綑绑拆分等先进功能。而且用Fusion.js开发的应用程式为通用架构,具单一入口档案,且可以在服务器 与浏览器上重复使用程式码。
Uber开发了数百个网页应用程式,其中许多是用於内部管理业务的,而部分是对外面向公众的,为了让数百名工程师都能在同样的技术基础上,开发最佳实践应用程式,Uber网页平台团队建构了Fusion.js,除了提供高品质的框架与先进功能外,也可以同时保持网页平台的动态特性,简化开发并产生高效能网页应用程式。
官方提到,Fusion.js适合那些想要寻找开源样板来建置现代与非平凡(Non-trivial)网页应用程式的开发者。除了提供预先配置好的最佳化样板外,Fusion.js提供基於套件的灵活架构,同样适用於依赖复杂服务层的单一页面或是网页应用程式,可以建置像是追踪日志、量测仪表板等监控应用,以及单元测试等功能。
由於Fusion.js应用程式是通用架构,因此应用程式具有单一入口档案,并且能够在服务器 与浏览器上重复使用程式码。在通用的应用程式中,React元件也能提取资料并在服务器 上渲染成HTML,以减少浏览器载入页面的时间,避免JavaScript DOM API造成的额外成本。
单一入口架构使得Fusion.js的插件本身也具有通用性,但并非是指程式码执行的环境,而是允许套件开发者对共同使用的函式库程式码片段定位。另外,套件可以透过中介软体存取HTTP请求生命周期,也可以存取React Tree以新增Provider元件。
Uber提到,他们近几年遇到的其中一个开发挑战,便是在热门的HTTP服务器 函式库Express中的API,其存在缺点使得复杂的回应转换难以封装与测试。对於Uber以前的架构,应用程式开发者经常需要以猴子修补法,临时维护Express的请求与回应物件,久而久之,程式码越来越凌乱,复杂相互影响的子系统,让测试变得困难。
Uber现在采用了中介软体Koa来解决这个问题,以补足Fusion.js的设计不足,使其拥有更加友善的Context-based API单元测试方法。Koa为React Provider元件提供了逻辑整合点,上游与下游抽象与React服务器 渲染的内容生命周期同步,网络带来的副作用与应用程式脱勾後,增加了可测试性。
除了支援Jest、Enzyme和Puppeteer等JavaScript现代测试工具外,Fusion.js也为开发人员提供了测试套件的工具,fusion-test-util软体包允许模拟服务器 ,因此开发者可以快速的模拟套件与模拟器间任意的组合。