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軟體包允許模擬伺服器,因此開發者可以快速的模擬套件與模擬器間任意的組合。

熱門新聞

Advertisement