已經決定使用JavaScript開發Web應用程序,從瀏覽器一直到後端服務器,並放棄了使用JSP/Java編寫的遺留代碼。 javascript
PayPal技術總監Jeff Harrell在兩篇博文中(解放個人UI第一部分:Dust JavaScript模板、開源等、PayPal的Node.js)解釋了他們作出這一決定的緣由,並對Web應用程序開發從Java/JSP切換到徹底的JavaScript/Node.js技術棧的過程當中所產生的若干結論進行了說明。 css
據Harrell說,PayPal的網站已經積累了大量的技術債務,他們想要一種「可使他們擺脫債務而又能帶來更大產品靈活性和創新的技術棧」。最初,在使用Web技術的前端工程師和使用Java編碼的後端工程師之間存在着巨大的鴻溝。當用戶體驗設計人員想草繪一些頁面時,爲了使它們運行,他們不得不要求Java程序員作一些後端編碼。這與他們的精益用戶體驗開發模型不相符: 前端
當時,咱們的UI應用程序基於Java和JSP,使用了一個無彈性、緊耦合而又難以快速行動的專有解決方案。咱們的團隊發現它與精益用戶體驗開發模型不相符,並且沒法快速行動,所以,他們用腳本語言構建原型,與用戶一塊兒測試,而後將代碼移植到產品棧中。 java
他們想要一個「從底層服務器技術解耦並能使UI設計獨立於應用程序語言的模板[解決方案]」,並且它能夠工做在多種環境中。他們決定選用Dust.js——一個由LinkedIn支持的模板框架——,再加上Twitter的Bootstrap和Bower,後者是一個面向Web的包管理器。以後又加入了LESS、RequireJS、Backbone.js、Grunt和Mocha等其它部分。 node
PayPal的部分頁面已經通過從新設計,但他們仍然還有部分頁面使用遺留技術棧: git
……咱們有C++/XSL和Java/JSP兩個遺留技術棧,隨着繼續推動,咱們不打算留下這些UI。JavaScript模板是理想之選。在C++技術棧上,咱們構建了一個使用V8引擎執行Dust本地渲染的庫——其速度驚人的快!在Java端,咱們使用Spring ViewResolver和Rhino集成Dust來渲染頁面。 程序員
當時,他們還開始用Node.js進行新頁面的原型設計,並認爲它「很是巧妙」,進而決定在生產環境對其進行試用。爲了達到這一目的,他們還構建了Kraken.js,這是一個位於以Node.js爲基礎的Web框架Express之上的 「約定層」。(PayPal最近開源了Kraken.js。)第一個使用Node.js完成的應用程序是帳戶概覽頁,據Harrell說,該頁面是PayPal的一個最常常訪問頁面。可是,因爲擔憂Node.js應用程序可能擴展性很差,他們決定建立一個等效的Java應用程序,一旦Node.js應用程序不能正常運行,就能夠回退到Java應用程序。下面是關於兩種應用程序開發所需工做量的幾個結論: github
Java/Spring express |
JavaScript/Node.js bootstrap |
|
設置時間 |
0 |
2個月 |
開發 |
大約5個月 |
大約3個月 |
工程師 |
5 |
2 |
代碼行數 |
未說明 |
未說明,佔Java應用程序的66% |
JavaScript團隊須要兩個月的時間進行基礎設施的初始設置,但他們建立具備相同功能的應用程序用人更少、耗時更短。他們在生產環境硬件上運行測試套件,得出的結論是Node.js應用程序的性能要優於Java應用程序:
Node.js應用程序每秒服務的請求數是Java應用程序的兩倍。更爲有趣的是,在最初的性能結果的產生過程當中,Node.js應用程序使用了單核,而Java應用程序使用了五核。咱們打算進一步增大這種差別。
並且:
對於同一頁面,Node.js應用程序的平均響應時間減小了35%。這使得頁面提供時間快了200毫秒——用戶能夠明顯地感受到這種變化。
結果,PayPal開始在生產環境中使用了尚處於測試階段的Node.js應用程序,並決定「從此全部面向客戶的Web應用程序均基於Node.js構建,」,而現有的部分應用程序也將遷移到Node.js。
據Harrell說,從瀏覽器到服務器都使用JavaScript的一個好處是,造成了一個「容許咱們在技術棧的任何層次理解和響應用戶需求」的團隊,消除了前端開發與後端開發之間的鴻溝。