我我的是比較不喜歡去正兒八經的比較兩個框架的,這樣沒有意義,不過欲善其事先利其器!前端
技術是相通的,可是在某個特定的領域的某個階段確定有相對最適合的一個工具!
這裏比較不是從技術角度比較,而是從公司技術選型考慮的,特別是初創的互聯網創業公司。沒辦法,誰讓互聯網公司離不開軟件呢!哈哈哈。node
首先是雙方選手出場介紹:nginx
Laravel
Laravel框架號稱是Web藝術家的框架,富有生產力,表明了最優雅最流行的PHP框架,通過一段時間的使用,也上了一個項目,感受特色以下:laravel
- 比較規範(PHP的框架中),適合團隊分工協做
- 開發速度快(社區生態和腳手架加持)
- 部署方便(PHP的部署就那樣吧,Git一套推拉下來就搞定了)
- 功能模塊比較全面
- 架構較複雜(在PHP框架中,O(∩_∩)O哈哈~)
- 全棧,先後端一個IDE搞定
- 其餘文中再說
Spring Boot
Spring Boot準確來講並非一個完整的框架,而是爲了使 Spring 全家桶更方便使用、更親民而產生的一個整合框架。因此Spring Boot 的背後是 Spring 近乎無敵的生態和解決方案。
先簡單說一下特色吧:數據庫
- 背靠 Java 這個老傢伙,還有 Spring 這個J2EE 的標準背書,生態很是強大
- 開發速度快(在Java系列中。。。),約定大於配置
- 基於JVM,執行效率有保障
- 須要掌握Spring的那一套,對於自己不是 J2EE 的童鞋學習成本有點高
- 有Cloud 加持,微服務在召喚
- 智能到使人髮指的Spring Data JPA
- 其餘稍後文中再說
好啦,介紹完選手,就開始來分析一下該用哪一個啦,這裏咱們設定一個情境:後端
假設 小紅 是一位有一個自認爲價值 20億 的Idea,而且打算付諸實踐的小BOSS(即將成爲),稍懂軟件架構和開發技術,沒錯,是很菜的那種(若是很厲害那隨便怎麼用框架了,沒所謂),且啓動資金只有 30萬。
我也不想假設的這麼慘的,現實中這種狀況不少,那咱們就以這種情景展開分析。小紅要以最低成本、最快速度推出 1.0 版本,投放市場,收集反饋,持續迭代。這是一個系統工程,講其餘因素剔除,只考慮技術問題,能夠總結成如下幾點:數組
- 成本(開發效率和人工成本)
- 響應(迭代和部署效率)
- 安全(穩定性和 BUG解決速度)
- 協做(團隊協做和擴展性)
1.開發效率
開發這個過程,咱們將它定義爲需求和原型都已經肯定,而且已經簡單建模完畢,嗯,就是猿們到崗後拿着需求文檔打開電腦(Windows)的時候開始,到 1.0 版本發佈這段時間,是誰跑得快!O(∩_∩)O哈哈~安全
首先是 Laravel 框架,步驟是這樣的:服務器
- 配置本地環境:包括PHP-CLI、Vagrant 、VirtualBox、HomeStead Box、Composer、nodejs(Mix要用到)、Python、Virtual Studio、Node-gyp(Node-Sass要用到)、PHPStorm、Git,一切就緒後
composer create-project laravel/laravel xxx
- 開發:定義migration、model,而後transformer和repository,再寫service和passport啥的,再寫controller,view視圖,而後完善 Event、Notification、推送啥的,期間伴隨着單元測試
- 部署:Git push、Git Clone 、Pull,env整一個,上線
對 Laravel 的開發流程熟悉的人呢,開發速度是很快的。架構
咱們再來看看Spring Boot:
業務不復雜就不要折騰微服務啦,不要像某人同樣明明只有一臺機器,硬是要開幾十個端口,而後跑幾十個Spring Boot的小服務,還用Cloud全家桶串起來了。我竟無言以對
單體應用擼起來,步驟以下:
- 配置開發環境:IntelliJ IDEA下一個、JDK裝一個、其餘要用到的Redis啥的裝上,分分鐘就搞定能夠開擼了。
- 開發:定義JAP Entity,Repository、Service,配置Spring Security(包括Oauth2),定義Validation,開擼Controller、異常處理,視圖層啥的,單元測試也少不了
- 部署:打出Jar包,扔到服務器上執行吧,nginx映射一下,搞定
我我的以爲Spring Boot的開發效率要比 Laravel 框架高些!
爲何呢? 由於若是對 Spring 的機制熟悉,也瞭解 Security、JPA、Thymeleaf模板、RabbitMQ 等等功能模塊的使用,Spring Boot 的封裝是比 Laravel 要好的,但前提是對Spring 那一套熟悉,否則從何入手都弄不清楚。
Spring 有些組件是很是複雜的,例如 Spring Security
Laravel 框架借鑑了不少 Java Spring 的思想,好比容器,依賴注入、切面,這方面明顯 Spring Boot 是正宗,註解啥的6得飛起!
Java 語言很是嚴謹,在開發過程當中的體驗比較好,至少像我這樣天馬行空的猿,還非得要 Java 這個老頭來管着,否則分分鐘要跑偏。
回到開發效率這個問題上,若是對兩個框架都比較熟悉的狀況下,Spring Boot 是開發比較快的,但 Laravel在某些方面是完勝Spring Boot,以下:
- Laravel 框架的 ORM 構建須要經歷兩個步驟,migration 和 model ,並且改動 migration 須要調整 model,沒法向 JPA 同樣Entity 即數據庫結構;
- Laravel 框架須要手動實現一些注入綁定,一般是
$app->bind
,儘管這不消耗多少時間,可是比起Spring強大的註解仍是慢很多,並且主流IDE對 Spring 的 Bean 提供了導航查看功能,牛逼哄哄啊;
- 若是要作網頁渲染,Laravel的動態腳本語言特性加上Blade模板基本是秒殺Spring Boot 的;
- 要讓層次更分明一些的話,Laravel 須要手動實現Repository 模式,反正我是受不了Model 直接定義業務邏輯的,放在Controller裏也受不了,不但難看,還很差擴展;
- 在受權這方面,Laravel 自帶的和Spring Security 都很強大,能夠說是開箱即用,打平;
- Laravel框架開發反饋調試方面是完勝Spring Boot的,這方面能夠說全部非編譯型的語言都很爽!儘管Spring Boot 也有DevTool,可是架不住 PHP 根本就不須要從新啓動呀。
- Laravel框架的代碼提示遠遠比不上Spring Boot,並且還須要第三方包Ide-Helper的加持,否則代碼追蹤都不行,但是就算用了第三方包仍是看不了 容器內長啥樣啊;
- 像 Laravel 這樣靠面向對象體現優雅的框架,卻遇到了PHP 這門面向對象不太徹底的語言,以至於在 Java 體系內很容易實現的一個功能,到了PHP體系卻無能爲力;
- Route 路由這方面 Laravel 很是強大,並且直觀,比Spring Boot 靈活,因此定義路由的時候效率完爆Spring Boot;
- 異常處理二者都很是方便,提供了統一處理的方式,難分伯仲;
- Api Json數據定製這方面,Laravel 比 Spring Boot 要強大,這是由於PHP的數組操做很是靈活,對於 Java 來講須要定義工具類和實體類來專門處理;
- i18n國際化,Laravel 比Spring Boot 方便;
- 前端資源處理,就這個功能自己來講,Laravel的Mix配合Blade模板完爆Spring Boot,可是話說回來,只要不是全棧,這不算什麼優點。設想一下若是是前端作好頁面,拿到後端套模板,那Thymeleaf 完爆 Blade,由於Thymeleaf 能夠保留預覽數據,渲染實際數據,Blade 作不到這一點。
總結:在技能掌握充足的狀況下,我的感受 Spring Boot 開發效率要略高於Laravel。我的掌握狀況不同,請勿噴,能夠參考文中的幾個維度,本身思考一下。
最後想提一下,順便求證:
Laravel 不念 「拉瓦」
Laravel 不念 「拉瓦」
Laravel 不念 「拉瓦」
時候不早了,有點困。今天就寫到這,明天再寫人工成本的考量。
你們晚安!謝謝