小項目需要前后端分離嗎?
有網友提問: 聽說前后端分離是為了讓前端人員專注前端,后端人員專注后端,但如果項目比較簡單,并且總共也就幾個人在開發,前后端分離還有意義嗎?
今天我們邀請了 4 名淘系技術的前端以及后端工程師,結合他們自身在項目操作中的感受,給大家分享一些 他們對于小項目前后端實際體驗的總結 ,希望能夠對你有幫助。
01
淘系技術部 逆葵
小項目是否需要前后端分離,取決于哪種方式能夠『時間最快、成本最小地完成當前的業務需求』。
脫離實際場景談這個問題是沒有意義的,畢竟技術架構的選擇需要服務于業務。
小項目有多小?它的生命周期有多久?是一個只會存在極短時間的臨時系統,還是在可預見的未來有擴展成大型項目的可能?維護這個小項目的技術人員有幾個?他們分別是什么技術工種?這些都是需要考慮在內的點。 小項目是否需要前后端分離,取決于哪種方式能夠『時間最快、成本最小地完成當前的業務需求』。
我們都知道前后端分離是為了讓技術人員各司其職,提高效率,在成熟的互聯網公司也都是這種運作方式。在人手充裕且技術人員職責清晰的情況下,無論是考慮開發效率、系統可維護度還是系統可擴展性,前后端分離顯然都是最合適的選擇。畢竟互聯網技術發展到今天,前后端已經不是早期那樣可以一個人一把梭搞定的了,兩種技術已經產生了明顯的鴻溝,前端更關注交互和體驗,后端更關注數據和并發。
當然,回到背景設定上來,怎么選擇依然要取決于你的團隊開發人員的實際情況。比如說,如果開發人員只有一個 PHP 工程師,而他剛好對現代的前端框架不太熟悉,平時都是開發 PHP 頁面,HTML/PHP/JS 一通雜糅,這個時候強行要求前后端分離顯然并不合理。
不過從上面的舉例描述來看也能發現,前后端不分離的情況已經是比較落后的生產方式了。今天,以筆者的經歷來看,哪怕是學校里的工作室創業,也都是盡量通過多個技術工種協作完成項目。即使一個人身兼數職開發,代碼組織方式也基本都是前后端分離的。雖說過度設計是架構中比較忌諱的地方,但是在前后端分離這一點上,已經有充足的實踐證明它的優越性。
筆者作為前端,接觸到的 Node.js Web 框架都是以前后端分離作為設計原則之一,甚至前后端不分離的經典語言 —— PHP 中最流行的 Web 框架之一 Laravel 也都是推薦使用現代前端框架 Vue.js 來完成頁面開發的。究其原因,現代前端技術的復雜度,從開發階段的工程架構到提升頁面性能的種種優化措施,都不太適合再和后端耦合在一起。
所以,我們的結論依然不變:是否需要前后端分離,取決于哪種方式能夠『時間最快、成本最小地完成當前的業務需求』。當然,考慮實際情況,前后端分離是更加普適、先進且合理的方式。
多說一句,時下比較流行的云端一體的應用開發方式,看似是和前后端分離背道而馳,實際上核心原則是一致的。借助 Serverless,前端工程師能夠在專注前端 UI 的基礎上,更深入地拿到數據的處理權限,某種程度上來說是更為高效的開發方式。至于更偏后端的并發、擴容、服務器運維等,則交給 Serverless 容器來解決。這也是一種前后端分離的實踐。筆者認為,在小項目中,可以大膽嘗試云端一體開發。
02
淘系技術部 千滅
可以從用戶 體驗、開發效率和運維效率三方面來看待前后端是否分離。
我認為在絕大部分 場景下,前后端分離優于不分離。
接下來我會從三個主要的場景來分 析前后端分離與否:用戶體驗、開發效率和運維效率。
用戶體驗
如果你正在做一個門店點餐系統,那么用戶對該系統最基本的要求就是界面美觀、加載速度快。對于這種側重于前端效果的項目,如果使用傳統的前后端一體項目,界面交互方面,除非有專業的前端程序員,一般的服務端程序員是無法通過JSP來實現如果復雜的前端交互邏輯,并且在其中加上豐富的主題和動效的,極大的可能性就是UI畫的是保時捷,開發出來是夏利。大家可以回憶下10年前的網站風格就可以想象了。加載速度方面,因為資源全部放在服務端,首次加載沒有瀏覽器緩存,需要加載大量的js、css以及靜態資源,這在今天幾乎是不可接受的,即使將資源放在Ngnix服務器,也沒辦法做到極致加速。如果使用的前后端分離的開發模式,前端由前端項目負責,界面交互方面,可以直接使用現有的前端腳手架來實現,業內已經有專門設計師設計的UI框架供選擇,均實現了豐富的動效和復雜交互,一鍵引入即可。加載速度方面,前端資源單獨發布部署,可以通過cdn預熱和極致加速。
如果你正在做一個僅用戶服務端接口調用的工具類項目,那用戶對該系統的基本要求就是能看懂、能操作成功即可,對于這種側重于服務端結果的項目,如果功能變化概率較低,完全可以使用前后端一體開發模式,光速開發上線!一套系統解決所有問題。
如果項目是側重前端交互的,那么最好使用前后端分離,如果項目側重服務端功能,無復雜交互,前后端一體速度更快。它的服務端就是下單支付這種基本邏輯,很明顯,基于傳統前后端一體的JSP模式來實現需要有復雜交互的前端頁面是很難的,難度一在于頁面開發,首先開發html然后由服務端轉化為jsp,實現功能的復雜度已經很高了,美觀程度更無法保證,這對前端有很高的技術要求。難度二在于流暢性,前后端一體項目加載頁面需要經過Nginx打到服務端,如果首次訪問沒有流量器緩存可能需要多次下載靜態資源,頁面加載非常的慢,并且服務端沒辦法解決這個問題。如果選擇前后端分離,前端頁面可以直接使用現有的前端腳手架來實現,各種優秀的前端框架已經支持了絕大部分的UI組件,集成了動效、樣式和交互,綁定服務端數據集即可。加載速度方面前端的資源可以通過cdn加速,實現急速加載。 當然如果你開發的是內部使用的工具類項目,前端邏輯簡單并且變化很少,使用前后端一體效率可能更高。
對于側重前端效果的項目,建議前后端分離。
-
開發效率
前后端一體的項目,僅在前端界面交互簡單且變更頻次低的服務型項目上占有微小優勢,因為此類項目核心是服務,前端僅僅是服務調用入口,只是比postman調用接口稍微產品化一點點的界面而已,不需要投入前端人力,服務端可以順手開發,這種場景下使用jsp成本最低,效率最高。
而對于任意一個對前端界面以及交互又要求,并且會長期迭代的項目,不管項目大小,使用前后端分離的效率都要比前后端一體要高,前后端分離可以通過定義服務接口并行開發,互不影響,實現雙倍提效。專業的人做專業的事,并且專業的領域有更多專業的工具,可以達到事半功倍的效果。
前后端一體的適用場景非常有限,任何一個對前端交互有要求的項目,都應該采用前后端分離的方式去開發。
-
運維效率
前后端一體的項目,前后端完全耦合,一次部署可實現前后端同時上線,但是一旦服務端宕機,前端頁面無法展示,影響全部用戶,而且不管是服務端還是前端的迭代都需要重新發布,無法保證前后端互不影響,增大了迭代風險。
對于前后端分離項目,前后端由不同的應用承載,迭代和發布都可以獨立進行,實現完全解耦,幾乎沒有依賴,服務端宕機可以由前端兜底頁面交互降低影響面,單獨運維極大降低迭代風險,在前端發展到如今,運維工具非常完善,成本很低,相對于諸多風險,單獨運維帶來的成本增加可以忽略不計。前后端分離在絕大部分場景下的運維效率高于前后端一體。
綜上所述,前后端分離在當前的技術環境下已經是大勢所趨,其在用戶體驗、開發效率以及運維效率上均領先于前后端一體的方案,在互聯網技術深度發展的今天,行業對技術人員的要求從技術廣度轉變為技術深度,專業人做專業事,所以,即使小項目也依然推薦前后端分離!
03
淘系技術部 三半
其實真正實踐下 來,分離也很快的,嘗試一下就知道了。
先說 結論:
基于現有的前后端技術和運維能力 ,即使是小項目,也建議前后端分離;當然 如果說10年前技術還不成熟,前后端不分離也是項目快速上線的一個比較 好的 手段。
先談下何為小項目
-
開發周期短的項目(兩天內要上線)?
-
維護時間短的項目(這個項目用這次緊急用一下,下次就不用了)?
-
功能簡單的項目(就一個簡單的數據庫查詢,未來不會有需求變更)?
核心問題就是小項目的成本對比?
我的觀點:無論項目有多大或者多小,要實現的產品功能肯定是不會變少的,基本的開發工作量差異并不大,那么就是前后端分離的運維成本對比了,這個如果有運維現身說法更好,按照我的工作經驗來看,運維成本也沒太大的差別。
接下來就要談談分離的優點了
-
必須要說到的就是耦合問題;前后端分離天然地把雙方的交互/開發邊界厘清了,面向json的數據對接
-
大大節省了聯調成本,前后端可以并行開發,問題定位更加快速清晰
-
可維護性更高,也更加方便后期的重構
-
可讀性更強等等
這個問題其實挺簡單的,會有人覺得小項目怎么簡單怎么來,而且先入為主的覺得不分離會更快,其實真正實踐下來,分離也很快的,嘗試一下就知道了。
04
淘系技術部 饕饗
持續交付且周期越長的項目 ,前后端分離效果越到后期優勢越明顯
這個問題往往更多的是看這個項目是否有需要持續交付目的和開發周期長短來確定的。持續交付且周期越長的項目,前后端分離效果越到后期優勢越明顯。
通常前端和后端所關注和解決的問題是不同的,前端關注的是交互和體驗,輕業務關系,需要有隨時的調整的交付能力;而后端關注的是數據邏輯,重業務邏輯,相對來說穩定確定一切。
那么是否需要分離,就要看項目交付要求及頻次,對項目的影響程度來決定。
一般真實的業務場景來看,前后端分離開發通常是屬于較優的選擇:
-
可同步開發,降低交付延期風險
-
完全接口化文檔化,減少雙方的理解和溝通成本
-
提前了解到項目的風險和難度,有更明確的心理預期
-
維護,維護,還是維護
對于第一點,在超過1人以上項目,協助能獲得更多開發時間,絕對是降低延期風險最有效的手段。其二,前后端分離能較好地解決依賴困局,通過各種工具或者文檔執行各自的開發進度,最重要的是,前后端分離后,采用的技術在實現和選擇時不被束縛。為后期的維護帶來方便。
結語
大多數情況下,前后端分離是更加普適、先進且合理的方式。