Web 開發在 2015 年及未來的發展趨勢

Mxt發表於2014-10-07

本文中,我們將一同看看當今 Web 開發的發展趨勢,給大家分享我對 2015 年及未來的一些看法、觀察和預測。我從 2000 年就開始做 Web 技術方面的工作,而近幾年主要是做雲架構解決方案。作為一名 Web 開發者,我曾在 .Net、Node.js 和 Go 技術棧上開發 Web 應用和 Web 服務。最近,我將 Web 技術和開發趨勢作為整體研究了一遍,在這裡分享一下我的想法和觀察結果。

首先,讓我分享一些我所觀察到的可用性和體系結構目前的趨勢。

可用性的趨勢

如今,使用者體驗變得比以往更重要,響應式網頁設計(RWD)也成為了網站必備的特性。RWD 能讓終端使用者在不同尺寸的裝置上訪問網站,包括手機和平板瀏覽器。有了 RWD 取代移動網站,我們便無需為移動使用者單獨開發額外的網站。特別是當我們需要把焦點放到如何呈現內容時尤為有用。但如果你是在開發 Web 應用(包含著大量 UI 互動流程)而不是網站時,RWD 就幫不了你了。記住 Web 應用與網站是不同的。Twitter Bootstrap 與 Zurb Foundation 算是目前最流行的 RWD 框架。如果你要針對移動使用者開發 APP 我會建議使用輕量級的框架比如 Yahoo Pure CSS 。

應用程式架構的趨勢

企業中的移動優先策略同樣影響到了 Web 開發架構。當一個組織在開發 Web 應用與 Web 服務時,他們會以自身的移動策略作為主方向調整。且如今,Web API 已成為 Web 應用和移動應用的中心,開發者會在伺服器端建立 RESTful 服務,然後基於 RESTful 服務為 Web 和移動開發前端應用。

API 驅動開發的崛起

在移動領域,API(特別是 RESTful API)已成為 Web 應用的關鍵部分,而伺服器端的實現已變成薄薄的一層,只提供資料和安全相關的 API 。這些 RESTful API 並不受限於 Web 應用,移動應用同樣可以使用。所以說現代 Web 開發人員編寫的伺服器端程式碼同時用於移動應用和 Web 應用,給予了我們更多的機會。這裡的另外一個趨勢是移動後端雲服務的興起,如 Parse和 Azure Mobile Services 等的服務(MBaaS)雲平臺解決方案。這些 MBaaS 平臺可針對多種特定移動後端服務的資料模型提供自動的 RESTful API 。我們可以使用 MBaaS 服務開發 Web 應用,因為它們不僅提供 RESTful API ,伴隨著移動 SDK 還提供了 JavaScript SDK 用於 HTML5 客戶端。未來,我堅信 MBaaS 服務將廣泛用於 Web 應用和移動應用。

單頁面應用程式(SPA)的出現

當使用 RESTful API 的伺服器端受限時,Web 前端開發便遷移到客戶端,且瀏覽器上的類桌面 UI 是在客戶端渲染而不是在伺服器端。在 SPA 應用中,前端只需簡單的呼叫 RESTful API 傳送資料,然後在客戶端構建完整的 UI 。這種情況下,JavaScript 便成為構建 Web 應用的關鍵技術。SPA 應用的一個優勢是我們可以使用雜交移動容器(hybrid mobile container)比如 Phonegap 和 Trigger.IO 很容易地將這些 Web 應用打包成移動應用。這種方法可以應付小型到中型基於資料形式 UI 的應用。於是我們就可以用一份程式碼建立 Web 應用和移動應用了。

在基於 SPA 的 Web 開發中,JavaScript 已成為關鍵技術,而且 JavaScript 技能也比以前更加重要。我曾接觸過不同框架開發過一些 SPA 應用,並在這種模型下注意到了一些難題。如下:

  1. 當我們在開發大規模 SPA 應用時,對比以前的伺服器端方式,現在維護應用變得非常困難。我感覺構建大型 JavaScript 應用真的很難去保持可維護性。
  2. 很難在客戶端實現複雜的安全模型,對不同型別的授權角色限制不同訪問級別的 UI 。

我對 SPA 框架的意見

目前 AngularJS、EmberJS 和 Backbone 是實際使用中最受歡迎的幾個 SPA 框架。我對這三個框架做了評估並使用其開發過應用。根據我的經驗,AngularJS 是產能最高的框架,具備構建大型 SPA 應用所需的特性。依愚人之見,使用 MV* 框架做前端開發並不是一個好方法,MVC 不適合大型前端應用。但如今我們在伺服器端和客戶端都使用 MVC ,我不認為這是最佳實踐。

ReactJS – 令人驚歎的前端框架

當大多數 SPA 框架依然在使用傳統的 MVC 模型時,ReactJS 為客戶端構建 UI 提供了一種不同的方式。React 是由 Facebook 和 Instagram 團隊開發的 JavaScript 庫,目的是用來構建使用者介面。Instagram 網站的整個前端和 Facebook 網站的一部分都是用 ReactJS 構建的。有趣的是,你可以與其他的前端框架如 AngularJS 和 EmberJS 一起使用 ReactJS 。你可以將 ReactJS 作為 MVC 框架的檢視層。但是在實踐中,我不建議在傳統的 MVC 框架上使用 ReactJS 。ReactJS 引入了虛擬 DOM(Virtual DOM),這就是 ReactJS 庫令人驚歎的部分,它給渲染 UI 帶來了高效能的表現。ReactJS 提供了比 AngularJS 與 EmberJS 等 MVC 框架更高效能的 UI 渲染。你可以利用虛擬 DOM 抽象出可重用的 UI 元件,然後在實際的 DOM 上合成這些元件。虛擬 DOM 讓你可以利用 React 在瀏覽器以外構建 UI 。比如 Facebook 的 React 團隊搭建了 Objective C 橋,用於在 iOS 應用上構建 UI 。對於擴充套件前端應用,我們可以對 React 使用 Flux 架構,這是架構的一套基本慣例,提供了單方向的資料流。我已經對 BackboneJS、EmberJS、AngularJS 和 React 都做了評估並強烈推薦你使用 React 構建使用者介面。

2014 年伺服器端 Web 技術棧的趨勢

幾年以前,動態型別語言如 Ruby 和 Python 已經吸引了許多創業公司。直到幾年前,Ruby on Rails 真是 Web 開發的一場革命。許多創業公司已經利用 RoR 和 Python Web 框架開發出各種創新的產品。但如今有趣的是,由於效能和可擴充套件性的難題,這些應用程式正被其它的 Web 技術棧重建。在大型應用程式中使用動態型別語言就像在喝加了太多糖的飲料。開始的時候,糖的甜味會比較吸引人,但長期來看就會傷害到應用程式的健康。今年,我們已經看到很多企業採用 Node.js 尤其是用於構建備受關注的移動應用後端服務。大企業如領英(LinkedIn)和沃爾瑪(Walmart)正在使用 Node.js 加強它們的移動後端服務。作為一項新技術,Node.js 真是 2014 年採納市場的贏家。Node.js 也是移動後端服務(MBaaS)雲解決方案的首選技術棧。今年我們也看到許多基於 Node.js 的命令列工具被用於前端開發。Node.js 的崛起與 Ruby 棧的衰落是今年最值得注意的趨勢。

這裡是一些伺服器端 Web 棧的觀察結果:

  • Ruby 棧特別是 RoR 正在失去動力且大型 Rails 應用正被重建成其他的技術棧。
  • 使用動態語言(Ruby 和 Python)做 Web 開發已逐漸失去其吸引力。
  • Node.js 更多地被採用到構建後端 RESTful 服務特別是在移動領域。
  • 用於前端開發的基於 Node.js 的命令列工具的出現。
  • 微軟 .NET Web 棧和開放規範 OWIN 將發生大轉變 – 這實際上對 ASP.NET 和 Node.js 都是好事。
  • 實時 Web 應用的出現

對 2015 年及以後的預測

哪種技術會稱霸 2015 年?哪種技術會失去其勢頭?我深深地感受到使用動態語言做 Web 開發的時代就要結束了。而 Node.js 會再接再厲在新興技術市場乘勢而上嗎?我不這麼認為。自 2011 年起我已經主要在寫 Node.js 程式碼並打算為此寫一本書,但後來還是放棄了這個計劃。最近我已離開了 Node.js 平臺,原因如下:

  • Node.js 總被強調是一種用於構建高效能應用程式的技術,但對大型應用來說,它對效能的支援超過可用性和可維護性將是一個最大的難題。所以我預測在近期會有許多大型 Node.js 應用因可維護性問題而失敗,過度炒作 Node.js 的時代將會結束。
  • 回撥地獄。我知道 generator 和 promise 是解決回撥地獄的好方法。Koa.js 之類的框架都是以犧牲效能為代價提供瞭解決方法。但對我來說依然有許多問題解決不了。
  • JavaScript 語言對我來說也是個問題。JavaScript 並不適合構建大規模的應用程式。
  • Node.js 是一個極簡的平臺。對我來說,它最好是可以構建基於 JSON 的 REST API 和實時系統。我希望可以利用單一的技術棧開發各種各樣的應用程式。但問題是當執行 CPU 運算邏輯(CPU crunching logic)時 Node.js 總是會失敗。

我使用 Node.js 的這些問題其他人也會有,在出錯處理、除錯和可用性上還會有許多實用性方面的問題。我相信可維護性將是大型 Node.js 應用的一個大難題。如果你在 Node.js 上構建 RESTful 服務,我強烈建議你使用沃爾瑪開發的 Hapi.js 框架,它真的做得很好。我非常欣賞 Hapi.js 的作者 Eran Hammer 。

在 2015 年我看好 Go 語言,不僅僅是用於 Web 開發,還作為構建分散式應用的一個技術生態系統。對我來說,Go 是比 Node.js 更好的選擇。我預測 2015 年許多 Ruby 和 Node.js 開發者會遷移到 Go 。

接下來是我對 2015 年及以後的一些預測:

  • 注重效能的 Web 應用由 Rails 重建到其它棧的做法將達到高峰值。
  • 至少對注重效能的 Web 應用來說,用動態語言做 Web 開發的時代要結束了。
  • 許多 Node.js 應用會陷入可維護性的問題。追求效能超過了可用性和可維護性可能會使 Node.js 失敗。
  • Go 將作為一種通用的程式語言出現,吸引著 Web 開發者社群。Go 會很好的替代 Java 與動態語言還有 Node.js 社群。
  • Go 將繼 Cobol 和 Java 成為下一代企業大範圍使用的語言,但還需要時間。Go 是雲時代的語言。
  • Java 與 .Net 棧將會繼續其中、大型企業應用的勢頭,但會慢慢地在 Web 開發中沒落。

Go:2015 及未來的技術

最近出現了許多用 Go 開發的優秀應用,包括 Docker 和 Packer.IO 。我預測 Go 將會在各種不同的社群中產生巨大的吸引力,包括 Java、Ruby、Python 和 Node.js 。Go 是靜態型別語言卻提供了動態型別語言生產力的靈活性。在 Go 語言中,併發性是核心程式語言的一等公民。類似 C 和 C++ ,Go 編譯成原生機器碼;而不像 Java 和 .Net ,它不需要任何 JIT 編譯。我愛上了 Go 的簡單性、實用的設計和相當好用的包系統。也許它不適合構建傳統的 Web 應用,但絕對適合做提供 RESTful 服務的 HTTP 伺服器。在未來,你也許還可以用 Go 開發 Android 應用。Go 的優勢是它是一種通用程式語言,可以用於任何可能的場景 – 包括系統程式設計和大型分散式商業應用。我強烈感受到 Go 是屬於雲時代的分散式、併發、平行計算的語言。Go 可以在企業中成為下一個 Java 。

相關文章