如何選擇一個web框架

幾乎對於你想要使用的每一種語言都有大量的web框架(我們在下面的部分列舉了一些比較受歡迎的框架)。有這麼多選擇,導致很難決定選擇哪個框架爲你的新web應用提供最好的開端。

一些影響你決定的因素有:

  • 學習代價:學習一個web框架取決於你對底層語言的熟悉程度,它的API的一致性與否,文檔質量,社區的體量和活躍程度。如果你完全沒有編程基礎的話,那就考慮Django吧(它是基於上面幾條標準來看最容易學習的了)。如果你已經成爲開發團隊的一部分,而那個開發團隊對某一種語言或者某一個框架有着很重要的開發經歷,那麼就堅持相關框架。
  • 效率:效率是指一旦你熟悉某一個框架之後,你能夠多塊地創造一個新功能的衡量方式,包括編寫和維護代碼的代價(因爲當前面的功能崩掉之後,你沒法編寫新的功能)。影響效率的大多數因素和學習代價是類似的——比如,文檔,社區,編程經歷等等。——其他因素還有:
    • 框架目的/起源:一些框架最初是用來解決某一類特定問題的,並且最好在生成app的時候顧及到這些約束。比如,Django是用來支持新聞網站的,因此非常適合博客或者其他包含發佈內容的網站。相反的,Flask是一個相對來說輕量級的框架,因此適合用來生成一些在嵌入式設備上運行的app。
    • Opinionated vs unopinionated:一個opinionated的框架是說,解決某一個特定問題時,總有一個被推薦的最佳的解決方法。opinionated的框架在你試圖解決一些普通問題的時候,更加趨向於產品化,因爲它們會將你引入正確的方向,儘管有些時候並不那麼靈活。
    • 一些web框架默認地包含了開發者們能遇到的任何一個問題的工具/庫,而一些輕量級的框架希望開發者們自己從分離的庫中選擇合適的解決方式(Django是其前者的一個實例,而Flask則是輕量級的一個實例)。包含了所有東西的框架通常很容易上手因爲你已經有了你所需要的任何東西,並且很可能它已經被整合好了,並且文檔也寫得很完善。然而一個較小型的框架含有你所需要(或者以後需要)的各種東西,它將只能在受更多限制的環境中運行,並且需要學習更小的、更簡單的子集學習。
    • 是否選擇一個鼓勵良好開發實例的框架:比如,一個鼓勵 Model-View-Controller 結構來將代碼分離到邏輯函數上的框架將會是更加易於維護的代碼,想比與那些對開發者沒有此期待的框架而言。同樣的,框架設計也深刻影響了測試和重複使用代碼的難易程度。
  • 框架/編程語言的表現: 通常來講,“速度”並不是選擇中最重要的因素,甚至,相對而言,運行速度很緩慢的Python對於一個在中等硬盤上跑的中等大小的網站已經足夠了。其他語言(C++/Javascript)的明顯的速度優勢很有可能被學習和維護的代價給抵消了。
  • 緩存支持:當你的網站之間變得越來越成功之後,你可能會發現它已經無法妥善處理它收到的大量請求了。在這個時候,你可能會開始考慮添加緩存支持。緩存是一種優化,是指你將全部的或者大部分的網站請求保存起來,那麼在後繼請求中就不需要重新計算了。返回一個緩存請求比重新計算一次要快得多。緩存可以被植入你的代碼裏面,或者是服務器中(參見reverse proxy)。web框架對於定義可緩存內容有着不同程度的支持。
  • 可擴展性:一旦你的網站非常成功的時候,你會發現緩存的好處已經所剩無幾了,甚至垂直容量到達了極限(將程序運行在更加有力的硬件上面)。在這個時候,你可能需要水平擴展(將你的網站分散到好幾個服務器和數據庫上來加載)或者“地理上地”擴展, 因爲你的一些客戶距離你的服務器很遠。你所選擇的框架將會影響到擴展你的網站的難易程度。
  • 網絡安全:一些web框架對於解決常見的網絡攻擊提供更好的支持。例如,Django消除所有用戶從HTML輸入的東西。因此從用戶端輸入的Javascript不會被運行。其他框架也提供相似的功能,但是通常在默認情況下是不直接開啓的。

幾個還不錯的框架?

讓我們繼續,來討論幾個特定的服務器端框架。

下面的服務器端框架體現了現在最受歡迎的幾個。它們有你需要用來提升效率的一切東西——它們是開源的,一直保持發展的態勢,有着富有激情的社區,社區裏的人創作出文檔並且在討論板上幫助使用者,並且被使用在很多高質量的網站上。當然還有很多其他非常棒的框架,你可以使用搜索引擎探索一下。

Django (Python)

Django是一個高水平的python web框架,它鼓勵快速的開發和簡潔、務實的設計。它由非常有經驗的開發者創建的,考慮到了web開發中會遇到的大多數難題,所以你無需重複造輪就能夠專心編寫你的應用。 

Django遵循“Batteries included”哲學,並且提供了幾乎所有大多開發者們想要“開箱即用”的東西。因爲它已經包含了所有東西,它作爲一個整體一起工作,遵循着一致的設計原則,並且有擴展的、持續更新的文檔。它也是非常快、安全和易於擴展的。基於python,Django代碼非常容易閱讀和維護。

使用Django的主流網站(從Django官網首頁看到的)包括: Disqus, Instagram, Knight Foundation, MacArthur Foundation, Mozilla, National Geographic, Open Knowledge Foundation, Pinterest, Open Stack.

Flask (Python)

Flask是python的一個微型框架

雖然體量很小,Flask卻可以開箱即用地創造出完備網站。它包含一個開發服務器和調試器,並且包含對於 Jinja2 模板的支持, 安全的cookie, unit testing, 和 RESTful request dispatching。它有很好的文檔和一個活躍的社區。

Flask已經非常火爆了,部分因爲那些需要在小型的、資源受限的系統中提供web服務的開發者們。(比如,在Raspberry PiDrone controllers等上面運行服務器)。

Express (Node.js/JavaScript)

Express 針對 Node.js 的快速的、unopinioned、靈活的、小型的web框架(node是用來運行Javascript的無瀏覽器的環境)。它爲web和移動應用提供強大的系列功能,並且傳輸有用的HTTP工具、方法和middleware.

Express非常受歡迎,主要因爲它減輕了客戶端Javascript程序到服務器端開發的遷移,並且部分因爲它是資源節約型(底層的node環境在單線程中使用輕量級多任務處理,而不是爲每個web請求提供單獨的進程)。

因爲Express是一個小型的web框架,它幾乎不包含任何你可能想要使用的組件(比如,數據庫接口和對用戶和會話的支持通過獨立的庫來完成)。有很多獨立的、非常好的組件,但是有時候你可能很難決定對於特定目的而言哪一個是最好的! 

 很多非常受歡迎的服務器端編程和全棧框架(同時包括服務器端和客戶端框架),包括 FeathersItemsAPIKeystoneJSKrakenLEAN-STACKLoopBackMEAN, 和 Sails.

大量的profile company使用Express,包括優步、Accenture、IBM等(這裏是一張列表).

Ruby on Rails (Ruby)

Rails (通常被稱作"Ruby on Rails")是一個爲Ruby語言編寫的web框架。

Rails遵循了和Django非常相似的設計哲學。正如Django一樣,它提供了檢索URLs的標準機制、從數據庫中訪問數據、從模板中生成HTML頁面、格式化數據JSON 或者 XML。同樣的,它也鼓勵如 DRY (不要重複你自己)的設計模板——儘可能地只寫一次代碼、MVC(模板-視圖-控制中心)以及很多其他的一些。

當然,還有很多由於因爲具體設計決定和語言的特性導致的差異。

Rails被用在很多站點中,包括: BasecampGitHub,ShopifyAirbnbTwitchSoundCloud,HuluZendeskSquareHi

ASP.NET

ASP.NET 是一個由微軟開發的開源Web框架,用於構建現代的Web應用程序和服務。通過ASP.NET你能快速創建基於HTML、CSS、JavaScript的網站,並且能滿足大量用戶的需求,還可以很容易地添加諸如Web API、數據表單、即時通訊的功能。

ASP.NET的特點之一就是它建立在 Common Language Runtime (CLR公共語言運行時)之上。這使得程序員可以使用任何支持的.NET語言(如C#、Visual Basic)來編寫ASP.NET代碼。和很多微軟的產品一樣,它得益於出色的開發工具(通常是免費的)、活躍的開發者社區,以及詳盡的文檔。 

ASP.NET被微軟、Xbox、Stack Overflow等採用。

Mojolicious (Perl)

Mojolicious是爲Perl語言設計的新一代Web框架。 

在Web的早期階段,許多人都爲了一個叫做 CGI 的優秀的Perl庫而學過Perl。它簡單到即使你不是太懂這門語言也可以開始使用,而且也強大到足以讓你可以用下去。Mojolicious通過最新的技術實現了這個想法。

Mojolicious提供的一些功能是:

  • 實時Web框架,可輕鬆將單個文件原型,生成爲結構良好的MVC Web應用程序;
  • RESTful路由,插件,命令,Perl-ish模板,內容協商,會話管理,表單驗證,測試框架,靜態文件服務器,CGI /PSGI 檢測,一流的Unicode支持;
  • 全棧式 HTTP 和 WebSocket 客戶機/服務器架構,由以下技術支持與實作-IPv6,TLS,SNI,IDNA,HTTP / SOCKS5 代理,UNIX 域套接字,Comet(長輪詢),保持活動,連接池,超時,cookie,multipart,支持 gzip 壓縮
  • 具有CSS選擇器支持的 JSON 和 HTML / XML 解析器和生成器;
  • 非常乾淨,可移植且面向對象的純 Perl API,沒有任何隱藏的魔法;
  • 全新的代碼基於多年的經驗,免費和開源。

轉載:https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/First_steps/Web_frameworks

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章