支付宝前端团队详解基于Node.js Web框架Chair
Chair是支付寶前端團(tuán)隊(duì)推出的,基于Node.js的Web框架,適用于大部分的Web應(yīng)用。
本文簡(jiǎn)要介紹Chair的設(shè)計(jì)思想、功能架構(gòu)和開(kāi)發(fā)狀況。
一、Chair的由來(lái)和設(shè)計(jì)思想
歷史上,支付寶前端項(xiàng)目都是直接基于Java后端開(kāi)發(fā)的。這種架構(gòu)下,前端工程師做出網(wǎng)頁(yè)模板(基于velocity模板引擎的vm文件),交給后端的Java引擎渲染。支付寶采用的Java引擎是名為Sofa的MVC框架。
對(duì)于前端工程師來(lái)說(shuō),這種架構(gòu)有很多不方便的地方。首先,需要了解后端的實(shí)現(xiàn),并且依賴開(kāi)發(fā)環(huán)境中的dev服務(wù)器進(jìn)行調(diào)試開(kāi)發(fā);其次,開(kāi)發(fā)細(xì)節(jié)需要與后端的Java工程師溝通,交流成本相當(dāng)大;最后,難以發(fā)起技術(shù)創(chuàng)新,因?yàn)橹灰婕昂蠖说恼{(diào)整,推動(dòng)起來(lái)非常困難。在前端技術(shù)日新月異的今天,這已經(jīng)越來(lái)越成為前端工程師心中的痛。
Chair框架就是在這種背景下誕生的,我們希望通過(guò)加入一個(gè)Node層,加速前端開(kāi)發(fā),提升研發(fā)效率,提高網(wǎng)站整體性能和系統(tǒng)的可維護(hù)性。
作為Sofa的替代,Chair直接與底層的Java服務(wù)通信,而客戶端瀏覽器則與Chair通信,這樣就不使用Sofa了。前端工程師因此可以完全不碰Java,使用熟悉的JavaScript語(yǔ)言,同時(shí)在瀏覽器和服務(wù)器兩端進(jìn)行快速迭代。
事實(shí)上,Chair這個(gè)名字就是來(lái)自跟Sofa的對(duì)比,因?yàn)閮烧叨寄茏?#xff0c;但是椅子(Chair)比沙發(fā)(Sofa)輕多了。支付寶已經(jīng)有了沙發(fā),我們想再為它添一把椅子。
Chair為前端開(kāi)發(fā),帶來(lái)了很多便利。
- 提高了研發(fā)效率,前端工程師直接可以改動(dòng)服務(wù)器,避免了與Java后端不必要的溝通成本。
- 更清晰的職責(zé)劃分,前端針對(duì)表現(xiàn)層(View)開(kāi)發(fā),后端針對(duì)業(yè)務(wù)和數(shù)據(jù)(Controller和Model)開(kāi)發(fā)。
- 更好的?程化,前端自己就能完成單元測(cè)試、集成測(cè)試和自動(dòng)發(fā)布。
- 節(jié)省人工,同樣的組件(比如模板和路由)只需要寫(xiě)一次,不用再為瀏覽器和服務(wù)器各寫(xiě)一遍了。
- 預(yù)期的性能提升,Node作為服務(wù)器端時(shí),有很強(qiáng)的HTTP請(qǐng)求處理能力。
目前,Chair已經(jīng)投入了生產(chǎn)環(huán)境,與Sofa各自支持著不同的支付寶Web應(yīng)用。預(yù)計(jì)不遠(yuǎn)的將來(lái),會(huì)出現(xiàn)更多基于Chair的Web應(yīng)用。
二、Chair的結(jié)構(gòu)
Chair的基礎(chǔ)代碼,是基于Koa框架的再開(kāi)發(fā),使用的語(yǔ)言是下一代JavaScript——ECMAScript 6,模板引擎是Nunjucks,但也可選用其他引擎。同時(shí)兼容Velocity模板,現(xiàn)有絕?部分模板?件?需修改也能正常渲染。
整個(gè)框架從瀏覽器到服務(wù)器,一共分成五層:
除了模板引擎以外,Chair還部署了一些功能組件,比如mock(數(shù)據(jù)模擬)和logger(日志器)。
Chair根據(jù)業(yè)務(wù)實(shí)際需求和現(xiàn)有架構(gòu)高度定制。雖然從結(jié)構(gòu)上看,Chair可以提供完整的后端功能,但目前主要用于模板渲染和路由。真正的業(yè)務(wù)邏輯和數(shù)據(jù)處理,還是要交給后端的Java服務(wù)。
?
三、性能提升
Node的加入,為很多功能提供了很大的性能改進(jìn)。根據(jù)壓測(cè)的結(jié)果,使用Chair(下圖的web)比使用原來(lái)的方案(下圖的portal),響應(yīng)時(shí)間和系統(tǒng)負(fù)載能力至少提高一倍以上。
四、Chair的開(kāi)發(fā)進(jìn)度
12月上旬,Chair發(fā)布了0.5版。除了修正Bug,這一版主要添加了以下功能。
- 支持 cookie session, 不依賴 tair
- 支持連接 MySQL數(shù)據(jù)庫(kù)
- 支持mvc stat 和 rpc stat 日志統(tǒng)計(jì)
- 支持統(tǒng)一導(dǎo)航 uninav 模板
- 頁(yè)面數(shù)據(jù)模擬 pagemock
目前,Chair正處于密集開(kāi)發(fā)之中,預(yù)計(jì)明年上半年發(fā)布1.0.0版。
總結(jié)
以上是生活随笔為你收集整理的支付宝前端团队详解基于Node.js Web框架Chair的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网络编程——实验一:基于TCPUDP的网
- 下一篇: 2017年html5行业报告,云适配发布