天天看點

你應該知道的9款流行 Web 架構及其優缺點

對于 web 開發人員來說,找到一些合适的工具,能讓工作輕松許多。這其中,web 架構更是提升工作效率的“利器”。但因為可選的 web 架構非常多,如何選擇也是一件令人頭疼的事情。

本文列出了9款目前比較流行的 web 架構,并對優缺點進行分析,希望能對大家有所幫助。(内容主要編譯自ken mazaika的the 9 most in-demand web frameworks and what you need to know about them)

首先,

當 web 浏覽器使用 http 和在其他地方運作的伺服器(計算機)通訊時,這些伺服器會收到一些通知:

所選的 url

如何輸入網址(通過表單送出或隻是在浏覽器欄中輸入網址)

伺服器要幹很多事情,比如:

讀取資料庫裡的資料和添加資料

找到正确的結果(使用者是否被允許檢視試圖通路的頁面?是否要發送到不同的url?等等)

建構使用者将看到的網頁

如果要提供更複雜的功能,就需要執行更多的步驟。作為開發人員,則需要對想要的功能列出一系列解決方案。web 架構就是其中可選的解決方案之一。

進入正題:

1、ruby on rails

你應該知道的9款流行 Web 架構及其優缺點

程式設計語言:ruby

簡介:

ruby on rails 是一個已經被許多公司采用的 web 架構,是 ruby 程式設計語言中 web 架構的鼻祖,獲得了大量開發者的采用。dhh(rails 的創始人)曾用它15分鐘左右建立一個部落格。

rails 的一大特點是約定優于配置(convention over configuration)。這意味着,它比較模式化、标準化和“約定化”,開發者通常做的是相同的事情,可以讓代碼寫到最少。

rails 還使用了 mvc(model-view-controller),讓架構更有組織性,更周密。

優點:

rails 具有強大的指令行界面,通過幾個簡單的指令就能在新的應用上啟動和運作。

rails 已經存在很長時間了,并且廣泛被使用,網絡上有很多關于它的教程。

rails 簡單易用,即便是複雜的問題,也能相對快速解決。

缺點:

rails 自動挂鈎了很多東西。啟動器裡就包含很多檔案,并且有相當多的配置代碼是自動編寫的,有些人可能會對此擔心。

整體來看,鑒于其靈活性及便捷性,rails 是一個非常理想的 web 架構,值得初學者優先學習。

2、sinatra

你應該知道的9款流行 Web 架構及其優缺點

上面的5行代碼就是做一個最低限度配置的空 web 應用所需要的全部代碼, 如果拿它和 ruby on rails 進行比較,會發現它需要的代碼更少(而且隻有一個檔案,而不是幾十個)。

然而,sinatra 的簡單性是一把雙刃劍。 它用的是和 ruby on rails 相反的方法,需要開發者手動配置所有的東西。

你應該知道的9款流行 Web 架構及其優缺點

sinatra 是輕量級架構的領頭羊。

sinatra 高度可配置,注重開發的自由度。

由于不側重“慣例”,沒有相同的檔案夾結構,是以會比較難去了解現有的 sinatra 應用。

sinatra 不常用于實際生産項目當中。

手動配置很多東西往往需要更多的時間,效率會受影響。

3、expressjs

你應該知道的9款流行 Web 架構及其優缺點

程式設計語言:javascript

expressjs 是一個 javascript web 架構,基于 node.js。看起來有沒有熟悉,它的代碼非常類似 sinatra 的代碼,也有和 sinatra 相似的簡單性。 在一個準 express 應用中隻有兩個代碼檔案:

package.json,這是 npm 自動生成的檔案。

app.js,這裡包含着應用程式的完整代碼。

高靈活性。

可以隻使用一種程式設計語言。

輕量。

更多選項=更多選擇。 選擇意味着需要研究不同的選項,找出将它們應用到自己的項目當中的方法,這往往需要更多時間。

4、sailsjs

你應該知道的9款流行 Web 架構及其優缺點

sailsjs 可以看成是 javascript 版的 rails,有一個指令行工具去生成一個完整的預設應用程式,自帶許多合理的預設配置和數值。

同樣,sails 也有 mvc 架構,啟動一個完整的應用也會有數十個預設的檔案。

有許多預設已配置好的方法完成建構 web 應用所涉及的大部分工作。

指令行程式使得建構新應用和功能更為輕松。

盡管是一個看起來很強大的架構,人氣也不低,但是并沒有多少公司采用。

5、mean 堆棧

你應該知道的9款流行 Web 架構及其優缺點

mean 是 expressjs 的擴充,堆棧了如 mongodb、angularjs 和 webpack 等技術。mean 用javascript 一種語言來驅動整個應用。

mongodb 是一個在概念上與其他大多資料庫有較大差別的資料庫,它允許 json 資料在其中自由随意,這意味着資料庫條目是靈活的,但同時也導緻無效的記錄成了一個非常容易遇到的問題。它不是通過 sql 與資料庫互動,而是使用其獨有的 javascript。

與 sailsjs 一樣,mean 堆棧包含建構複雜 web 應用所需的所有元件。

頁面加載要兩個階段,而且第一階段看起來有點搞笑。發生這種情況是因為視圖不是在伺服器端呈現,而隻在浏覽器中呈現。這意味着使用者最初看到的是不完整的頁面,頁面的完整内容要過一會才能加載。

mean 堆棧包含許多技術,如 mongodb,在其他架構中建構 web 應用時通常不使用這些技術。

補充幾句個人觀點:

這個包含 mongodb 的架構對我來說毫無意義,幾乎所有其他 web 架構都使用标準資料庫 sql。在我看來,mean 堆棧可能隻在那些 mongodb 真正“發光發熱”的場景中有價值,但 mongo 又是一個在高負載的時候才需要的東西,比如廣告網絡和 api 負載高的時候。

不可否認 mean 在某些情況下是有意義的,但對于典型的 web 應用,我不太建議使用。因為 mean 在應用的每一個部分隻使用 javascript 程式設計語言,這聽起來會很容易掌握,但是像 mongodb 和 webpack 這樣的東西使得 mean 實際上比那些解決問題的“标準”技術更困難。

6、django

你應該知道的9款流行 Web 架構及其優缺點

程式設計語言:python

django 是一個運作在 python 上的 mvc web 架構。 它也有一些打開即用的配置,它與 ruby on rails 架構有許多相似之處,也有不少差別。 這個 web 架構改變了控制器和視圖的職責,但毫無疑問它是一個優秀的 web 架構。

輕量、少配置。

提供完整的開發堆棧,同時仍然遵循 python 的“清晰”語言的設計理念,允許在快速開發和長期維護之間實作平衡。

注意:

python 是一種類似于 ruby 的語言,但它們的使用者會有不同的領域傾向, 通常使用 python 的開發人員往往是在資料科學、統計或分析領域工作。

7、tornado

你應該知道的9款流行 Web 架構及其優缺點

tornado 是一個沒有怎麼宣傳的 python web 架構,它快速、高效,并允許開發人員通路 python 的大資料庫。

在需要短時間内發生許多請求的情況下是優秀的。

結構的缺乏導緻應用互相不同。

對于初學者來說,擁有太多的自由可能會導緻亂碼。在其他的架構中有過經驗的開發人員更願意以深思熟慮的方式去建構應用。

8、play

你應該知道的9款流行 Web 架構及其優缺點

程式設計語言:java 或 scala

play 同樣是一個輕量級的、無狀态的 web 架構,學到了 rails 的優點,使用建構在 akka 之上的完全異步模型,提供可預測的和最小的資源消耗(cpu,記憶體,線程)。

在 java 虛拟機上運作,play 是最高效的程式設計環境之一。

大多數 web 應用都是用所謂的“腳本語言”建構的,允許快速更改頁面的視覺效果。 java 增加了一個稱為“編譯”的步驟,需要在應用的更改之間進行。

9、laravel

你應該知道的9款流行 Web 架構及其優缺點

程式設計語言:php

laravel 是一個用 php 編寫的架構。 10年前,php 是幾乎所有 web 應用建構的标準程式設計語言,不過如今,受 ruby、javascript 和 python 影響,php 失去了很大的市場佔有率。

盡管如此,laravel 仍是一個非常成熟的架構,允許使用 php 建構漂亮的代碼。

laravel 是一個很完美的 mvc 架構,借鑒了 ruby on rails 架構中使用的許多架構決策。

使用 php 的開發人員和産品在減少(原文是這麼寫的^_^)

最後再說點

看完上面列出的這些不同的架構,很容易發現它們有互相在尋找靈感,許多功能、特性其實還蠻相似的。是以,說哪個好哪個不好,并沒有什麼意義,找到合适自己的才是關鍵。上面的架構可以簡單分為兩種類型:

一、簡約架構

expressjs、tornado 和 sinatra 都是簡約架構,他們提供啟動需要的最低配置。

這些架構需要開發人員手動添加每個單獨的元件,給予足夠的自由度去完成項目。此外,通過強制自己配置應用的各方各面,可以掌控更多主動權,并在每種情況下都使用理想的工具。

當然,也有一些缺點。會經常發現自己處于需要分析不同選項并做出很多選擇的情況下。

二、omakase 架構

rails、sailsjs、mean.io、laravel 和 play 都是 omakase 架構,它們建議開發者以某種“正确”的方式編寫代碼,并且給出社群标準。

這些架構提供開發所需要的一切,打開即可程式設計。如果想使用其他的東西,它們還允許選擇停用。建構這些架構的開發人員已經為後來者做出了一些關鍵決策,是以可以遵循他們建議使用的模式。

這對初學者來說有很大的優勢,初學者往往在學習 web 架構的時候,你還需要學習資料庫、http 請求、設定應用在 internet 上運作等等知識。由于有一個被廣泛接受的社群标準,學習一個像 rails 這樣的 web 架構可以:

了解社群如何同意以正确的方式做某事。

有時間思考其他程式設計概念,學習其他知識。

一旦學習了某個架構社群的建議,将有經驗來更好地評估其他架構。