沒有最好,只有合適——選擇伺服器框架也是如此

沒有最好,只有合適——選擇伺服器框架也是如此

為網站構建一個穩定、高效的後臺伺服器程式是一件非常重要的事情。要達到這樣的目的,選擇一款快速、高效的後臺程式款框架是我們必須要考慮清楚的。一個後臺框架是一系列工具、程式碼包以及其他軟體模組的集合,利用這些基礎設定你就可以快速的開發出功能全面的伺服器後臺程式。這些框架在設計之初就考慮到了將來的伺服器程式要面臨的需求,並且提供了比較合理全面的解決方案。我們只需要根據我們的需求,對應到這些框架的不同模組,利用這些模組實現我們的業務程式碼即可。

本人掌握了包含市面上大部分常用的程式語言以及相關的框架,也都使用過這些框架開發出了 server 程式。在2021年,我羅列出目前常用的幾個框架與大家分享交流。

Laravel

程式語言:PHP

laravel是一個免費、開源的PHP開發框架,它是基於MVC程式結構設計的。對於常年使用PHP語言做專案的人來說,laravel是普遍的首選方案。我以前接手的一些專案,雲伺服器平臺是客戶早年就在使用的,比如GoDaddy、Hostinger 等等,這些雲平臺對PHP語言的支援非常好,那麼考慮到入鄉隨俗,要使用雲服務裡的PHP環境,那麼用laravel就是非常合適的了。

laravel提供了許可權管理、API 設計、後臺快取、日誌管理、測試等多種功能。它的文件也非常的全面易懂。laravel 非常適合用來開發部落格網站、入口網站、電商網站的後臺。

不過時過境遷,由於現在更多更好的框架的出現,PHP語言以及laravel變得有些過時和年邁,很多人會暫時放棄PHP以及laravel,會嘗試使用其他的選擇。

Flask vs Django

程式語言:Python

我把這兩個框架放在一起進行說明。幾年前我在自學完Python語言後,就去尋找基於Python的伺服器開發框架,flask和Django是兩個常用的。在玩過了這兩個框架之後,我明確的選擇了Flask。因為我個人的開發風格和習慣是前後端分離的,用Angular或者Vue去專心開發前端頁面,用框架細緻的開發後端伺服器的一些功能,前後端之間的通訊和資料交換使用 Restful API 來實現。

Django也是一款比較強大的框架,但是它對前後端分離風格的開發者不太友好。在開發的時候很多時候需要將前端的HTML、JavaScript和後端的Python進行聯合開發,程式碼可能會比較混亂。但是事情都有兩面性,反過來講Django的封裝性更好一些,很多功能都是拿來即用的,只要根據自己的需求稍加修改,就可以快速的實現一些功能,比如form表單。

而 Flask 是純粹的前後端分離的風格,屬於微型框架。你在用Flask寫程式碼的時候,可以完全不需要考慮前端。可以專心的開發伺服器程式。最後提供一些 API 訪問連結地址給前端即可。所以Flask 框架會比Django更小,使用flask也需要開發者去處理和開發更多的功能邏輯。

Express。js vs Koa2

程式語言:JavaScript / TypeScript

得益於node。js的流行和廣泛使用,歷史悠久、可愛的JavaScript語言終於可以涉足到後臺伺服器程式開發領域了。一般的,在安裝好node。js後,很少有人會直接用JavaScript原生的開發伺服器程式碼,而是會選擇一款框架。那麼express。js和koa2就是目前比較流行的兩款框架了。

他們都可以用 JS 快速的開發出 API 程式,也都能透過安裝其他的模組實現與後臺資料庫的連線。我個人在多年的程式設計經歷中,面對中小型的專案,對效能要求不高的時候,都會考慮使用這兩個框架。一般會很快的寫好 Restful API 程式和資料庫的CRUD程式。另外部他們兩個的部署也比較方便,Linux上裝好node。js,然後伺服器程式檔案放在一個地方,用 pm2 這種基於 node。js 的命令工具啟動即可向前端提供服務了。

這兩個框架其實是同一班人的作品。express。js問世的較早,koa2其實是express。js的改進,程式碼更加精煉緊湊,都是不錯的選擇。

Spring

程式語言:Java

聚光燈照顧來,歡呼尖叫響起,superstar 到來了。沒錯,spring是這幾年伺服器開發框架裡的明星。基於Java這幾十年的穩健發展,已經有了太多的處理各種問題和需求的Java第三方包。再結合spring的優良品質,比如常見的許可權控制、Restful API 開發、SQL/NoSQL 資料庫操作這種常見的功能以外,還可以想象一下利用spring結合hadoop生態來開發big data 應用,那會是另外一片天空了。

我個人在2020年指導了幾個本科大學生的畢業設計專案。他們告訴我,他們的老師不僅要求他們寫論文,還需要他們開發一個完整的Web專案,要有網站、伺服器,後面還要掛個資料庫。值得注意的一點是,導師們要求他們必須用spring框架實現伺服器。這些學生當然連前端三劍客 HTML/CSS/JavaScript 都還沒有玩會,後臺抽象的程式碼更是小白一個。他們說導師也只是知道有這種技術,但是也沒法完全指導他們,所以我就有了雪中送炭的機會。

另外,現在很多中大型網站的後臺的主要業務邏輯,就是用java的spring來實現的,並結合其他技術向外提供服務。比如國內的一些電商平臺就是這樣的設計。

其他

上面我只是列舉了幾個典型的方案,其實還有很多,我基本上都玩過。比如 hapi(JavaScript)、Golang(Go)、Slim(PHP)等等。大家可以根據自己的需求和實際情況,瞭解這些框架後進行選擇。

如何選擇合適的框架

和擇偶很類似,選擇適合的才是明智之選。大家都說她好,包括你的父母都很欣賞那個人,但是你就是不喜歡。所以強扭的瓜不甜。下面是幾條選擇框架的方針,供大家參考:

要明確自己開發的伺服器後臺的目的,以及將來的後臺的規模,資料量或業務量的大小,峰值是多少。拿著這些需求和目的,去和眾多的框架去對照,選擇能夠真正解決你的需求的框架。

框架的安全性如何。畢竟伺服器程式不是兒戲,前端其實只是個互動操作介面,大部分真正的資料和處理邏輯都在後臺伺服器。我曾經用了一個小時,就很快的模仿開發出了微信App的程式,但是這沒有什麼可炫耀的,微信厲害的地方其實在它的後臺!

隨著時間的推移,一般的,對於後臺伺服器程式的訪問量、資料流量、資料讀寫的 I/O 效率都會有更高的要求。那麼我們要仔細考慮一款框架的適應性如何,是否能夠隨著業務的增長同樣能夠提供相同的效能。

易於部署、配置和維護。這時毋庸置疑的,我在以往的涉獵過程中,體驗到了基於Go語言的後臺專案是最易於部署的,只要基於不同的OS(Windows,LInux)將程式碼編譯好之後,直接放在作業系統裡並啟動即可。需要編譯的方案,執行起來速度會更好,比如Java的框架。有些是不需要編譯,是解釋執行的,比如JavaScript / node。js的框架,部署可能方便,但是執行效率可能會有些折扣。不過由於現在的硬體機能已經比20年前有了指數級的發展,所以在沒有特殊要求下,基本上哪個方便不麻煩就用哪個吧。

開發文件的質量。現在很多人學習計算機還迷戀與哪一本書,哪些影片教程。在十幾年前倒是可以這樣考慮,因為以前網際網路並不發達,網速、內容資源都比較差,買書學習就成了首選。現在就不同了,現在你如果買了書,可能書裡的內容可能很快就會過時,就會和實際情況有了差距。有些人也會去報培訓班,大家請擦亮眼睛,培訓班也是要走流量的,公司要求一波學生必須在4~5個月結業,如果時間太長,他們佔用了教室、教師資源,公司就很難再繼續招收新的學生了,那麼他們的現金流量就可想而知了。所以培訓班的老師講課都是非常快的,非常刻板的,他們每天都有進度的要求。這樣填鴨式的教學效果我就不用多說了。說回來,一款框架肯定都有他們自己的官方文件,這幾年我還發現這些網站對中文的支援也很好了,以前基本上沒有中文版的官方開發文件。那麼好好利用這些官方文件來學習是最靠譜的。大家能自學就不要去請教別人,自己琢磨、鑽研、嘗試後得到的收穫對自己的技術更加有幫助,而且成本更低。

學習曲線。也就是學習的難度和週期。這點就要和程式語言有所結合了,比如JavaScript、Python更加容易上手,Java稍微難一些複雜一些。這一點其實僅僅是針對初學者或者入行時間不長的人的,像我這種已經熟練掌握了至少4門語言,能玩轉10多門語言的人,學習曲線基本上可以不用考慮。

社群。這一點也很可觀。一款框架用的人多,他們遇到的問題也就會多,那麼他們在網路上查詢問題、詢問問題也就多,那麼就會有更多的人給出各種問題的解決方案來。慢慢的就形成了社群,現在很多成型的程式設計社群網站就是這樣建立起來的。典型的就是 stackworkflow,我經常能在這裡找到靈感。個人意見啊,我建議讀者們但凡有一點英文能力,就去英文網站找解決方案。國內的百度搜出來的結果一般都很爛,沒啥幫助,有些人就算給出方案也能看出來是敷衍的寫的,要麼語言表述不清,要麼程式碼胡亂貼上。能翻牆就翻牆用Google,不能翻牆就用Microsoft bing(國際版),一般搜出來的都是國外網站,裡面有很多有識之士給出的解答更加有幫助,甚至立竿見影。

送給大家一句話:

擇偶時,沒有最好的,只有合適的。選擇框架也是一樣的 !