Chair:支付寶前端團隊推出的Node.js Web框架

jopen 8年前發布 | 11K 次閱讀

Chair是支付寶前端團隊推出的,基于Node.js的Web框架,適用于大部分的Web應用。

本文簡要介紹Chair的設計思想、功能架構和開發狀況。

Chair:支付寶前端團隊推出的Node.js Web框架

一、Chair的由來和設計思想

歷史上,支付寶前端項目都是直接基于Java后端開發的。這種架構下,前端工程師做出網頁模板(基于velocity模板引擎的vm文件),交給后端的Java引擎渲染。支付寶采用的Java引擎是名為Sofa的MVC框架。

Chair:支付寶前端團隊推出的Node.js Web框架

對于前端工程師來說,這種架構有很多不方便的地方。首先,需要了解后端的實現,并且依賴開發環境中的dev服務器進行調試開發;其次,開發細節需要與后端的 Java工程師溝通,交流成本相當大;最后,難以發起技術創新,因為只要涉及后端的調整,推動起來非常困難。在前端技術日新月異的今天,這已經越來越成為 前端工程師心中的痛。

Chair框架就是在這種背景下誕生的,我們希望通過加入一個Node層,加速前端開發,提升研發效率,提高網站整體性能和系統的可維護性。

作為Sofa的替代,Chair直接與底層的Java服務通信,而客戶端瀏覽器則與Chair通信,這樣就不使用Sofa了。前端工程師因此可以完全不碰Java,使用熟悉的JavaScript語言,同時在瀏覽器和服務器兩端進行快速迭代。

Chair:支付寶前端團隊推出的Node.js Web框架

事實上,Chair這個名字就是來自跟Sofa的對比,因為兩者都能坐人,但是椅子(Chair)比沙發(Sofa)輕多了。支付寶已經有了沙發,我們想再為它添一把椅子。

Chair為前端開發,帶來了很多便利。

  • 提高了研發效率,前端工程師直接可以改動服務器,避免了與Java后端不必要的溝通成本。

  • 更清晰的職責劃分,前端針對表現層(View)開發,后端針對業務和數據(Controller和Model)開發。

  • 更好的?程化,前端自己就能完成單元測試、集成測試和自動發布。

  • 節省人工,同樣的組件(比如模板和路由)只需要寫一次,不用再為瀏覽器和服務器各寫一遍了。

  • 預期的性能提升,Node作為服務器端時,有很強的HTTP請求處理能力。

目前,Chair已經投入了生產環境,與Sofa各自支持著不同的支付寶Web應用。預計不遠的將來,會出現更多基于Chair的Web應用。

二、Chair的結構

Chair的基礎代碼,是基于Koa框架的再開發,使用的語言是下一代JavaScript——ECMAScript 6,模板引擎是Nunjucks,但也可選用其他引擎。同時兼容Velocity模板,現有絕?部分模板?件?需修改也能正常渲染。

Chair:支付寶前端團隊推出的Node.js Web框架

整個框架從瀏覽器到服務器,一共分成五層:

  1. 路由層(routers):適配不同路徑的HTTP請求

  2. 中間件層(middlewares):加工HTTP請求

  3. 控制器層(controllers):部署業務邏輯

  4. 服務層(services):提供內部的統一API,供不同業務調用

  5. 代理層(proxy):負責與Java服務通信,提供統一格式的數據

除了模板引擎以外,Chair還部署了一些功能組件,比如mock(數據模擬)和logger(日志器)。

Chair根據業務實際需求和現有架構高度定制。雖然從結構上看,Chair可以提供完整的后端功能,但目前主要用于模板渲染和路由。真正的業務邏輯和數據處理,還是要交給后端的Java服務。

 

三、性能提升

Node的加入,為很多功能提供了很大的性能改進。根據壓測的結果,使用Chair(下圖的web)比使用原來的方案(下圖的portal),響應時間和系統負載能力至少提高一倍以上。

Chair:支付寶前端團隊推出的Node.js Web框架

Chair:支付寶前端團隊推出的Node.js Web框架

四、Chair的開發進度

12月上旬,Chair發布了0.5版。除了修正Bug,這一版主要添加了以下功能。

  • 支持 cookie session, 不依賴 tair

  • 支持連接 MySQL數據庫

  • 支持mvc stat 和 rpc stat 日志統計

  • 支持統一導航 uninav 模板

  • 頁面數據模擬 pagemock

目前,Chair正處于密集開發之中,預計明年上半年發布1.0.0版。

該文章來自阿里巴巴技術協會(ATA)精選集,作者:兔哥。

文章鏈接——云棲社區http://yq.aliyun.com/articles/2921

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!