Laravel 項目加速指南

很多人都說用 Laravel 做開發很好但是性能太差,我曾經也一度這麼認爲,最近圍繞 composer 做一些行項目 ,研究了 composer 的自動加載機制,順便研究了下 Laravel 項目,發現,事實上 Laravel 並不慢,只不過還是我們沒有用好它罷了。

PHP 項目慢的幾個重要原因

首先想到的導致 PHP 項目慢的一個首要原因就是 IO 問題, 因爲php是解釋型語言,所以每次請求都要讀取源代碼並進行語法解析,解決這個問題要從兩方面下手:

  • 一是將解析過的文件的結果都緩存起來,下次直接讀取,這方面目前已經有了非常成熟的方案,比如 Xcache, Opcache 等,選擇官方的 Opcache就好, 你會發現只要開了 Opcache 並且配置得當, 程序性能馬上提升 10 倍是不成問題的
  • 其次是減少文件不必要的文件引入,現在大家都用 composer 組織項目,往往會引入很多不必要的類庫,導致項目變的臃腫。

基本上解決了 IO 問題, PHP 項目性能就會有極大的提升, 因爲大多數 PHP 項目都不是計算密集型項目,CPU並不會成爲它的性能瓶頸。

針對 Laravel 項目的加速

優化一:關閉debug

打開.env文件,把debug設置爲false。

APP_ENV=local

APP_DEBUG=false

APP_KEY=base64:sT/aTFeaE13eyao1Raee6jC9Ff+Yle1SE+wtyk0H6B4=

 

 優化二:緩存路由和配置

每次服務器執行請求時,都會註冊所有的路由,這會花費一些時間。但是,你可以選擇緩存路由列表來跳過這個步驟。
緩存路由列表是非常簡單的。你需要做的是在部署應用程序後,執行下面的這個命令:

php artisan route:cache

但是,如果你添加或修改了任意一個路由信息,請不要忘記清除之前的緩存以及重新執行緩存命令。

php artisan route:clear
php artisan route:cache

注意,這隻對控制器類路由有效。
緩存配置
就如路由一樣,你同樣可以在應用中緩存配置文件。
設想一下這種場景:每次你發送一個請求到 App 中,Laravel 都需要去加載不同的配置文件,並且要去打開*.env* 文件讀取其中的內容。這種方式性能低下,是不?
不過不用擔心,這裏有個 Artisan 命令專治這個。

php artisan config:cache

你在部署之後可以使用它。和路由差不多,別忘了編輯東西的時候清理一下緩存。

php artisan config:clear
php artisan config:cache

優化三:composer優化

sudo composer dump-autoload optimize

優化四:laravel 提升性能命令

php artisan optimize

優化五:使用性能更好的Cache和Session驅動

Laravel默認是有緩存的,當你新建一個 Laravel 項目的時候Cache 和 Sessions 的驅動默認爲 「文件」。在本地開發環境和小項目中它沒啥問題,但是項目增長時,就顯得不夠用了。
所以,考慮下換個更好的驅動例如 Redis。 Laravel 有內置支持它的方式,而你要做的就是 安裝 Predis。

優化五:使用隊列

有些時候,Laravel 比預期慢,這時你可以考慮異步執行任務。
最常見的情況就是發送一封歡迎郵件,讓我們一起看看任務流程。

用戶填寫我們的表單;
將他/她的詳細信息寫入數據庫;
發送一封寫有歡迎語和確認鏈接的郵件給他/她;
並展示感謝頁面;

很多時候,這些任務完全是在控制器中並且按照順序執行。
我的建議是學會如何使用事件和隊列,可以將發送郵件任務交給專門的流程,以致於改善用戶使用體驗。
我上篇文章專門講了laravel隊列的使用,有興趣的可以去看一下Laravel隊列的使用。

優化六:刪除未使用的服務

Laravel 自帶了很多服務,它是一個全棧框架,每一個服務都有其用武之地。
所以,請花一些時間檢查 *config/app.php * 文件,看看你是否能找到一個你不需要的服務。如果一切正常,請嘗試將其刪除並測試您的應用程序。
它應該有所幫助(一點點)!

優化七: 使用預加載進行查詢

如果你知道 Laravel 是什麼,你可能也知道預加載是什麼。 如果您信息不夠及時,預加載是一種通過使用特定語法來減少發送到數據庫的查詢數量來提高 Eloquent 性能的方法。
更改基礎查詢以避免此性能問題。 您將只執行兩個查詢而不是1001! 這是巨大的性能提升。

優化八:緩存查詢結果

有時候, 緩存一個具體的查詢結果可能是一個好主意。
想象這樣一個場景:你準備在你的應用主頁上展示 排行榜。 這項工作是通過從數據庫中執行查詢完成的(查詢可能涉及到artists表以及其他的一些表)。 你的主頁訪問量是 1000 次/小時 。
如果這個排行榜數據的查詢次數是 1000次每小時,那麼一天下來執行的查詢次數就是24000次。
現在,讓我們假設這個排行榜是每小時更新一次 。那麼,將每次的查詢結果緩存一小時如何 ?
這個緩存組件的 * remember* 方法在未找到緩存的情況下將會先從數據庫中獲取數據,並緩存60分鐘。到期後,將會再次從數據庫中獲取最新的數據,更新緩存。
查詢次數 從 24000 到 24 次/天 。

優化九: 數據表要建立索引

記住,必要的時候請爲您的數據表建立索引。 這看起來像是個沒什麼卵用的提示,但實際上這很有必要。 因爲我見過非常多的應用,它們的數據表沒有索引。
實現起來很簡單,您可以創建一個新的數據庫遷移並使用裏面的方法來添加索引.
當然,索引不是您喜歡在哪建就直接創建一個就是了。您必須研究您的業務、代碼和查詢,去分析哪裏纔是最需要索引的地方,然後再建立索引。

優化十:去除沒必要的中間件

Laravel 會對你註冊的中間件進行大量的(前/後)調用。所以,請你仔細檢查它們,並且去掉那些你不需要的中間件。
通常中間件列表在 *Kernel.php *。

優化十一:使用更高版本的php並開啓OpCacahe

這不僅僅是針對Laravel網站的性能優化方法,其中很多也是通用的網站性能優化的方法;

優化十二:使用CDN

肯定會有很多前端的資源,比如 CSS 文件和 JS 腳本。
你可以通過多種方式來減少發送給用戶的數據量:

    壓縮靜態資源;
    捆綁靜態資源(將多個 CSS 文件或者 JS 腳本合併爲一個,以減少請求次數);
    開啓 gzip 壓縮;

然而,如果你遇到大量的流量,我建議你可以將你的靜態資源託管到專用的 CDN 服務器上,比如七牛等
 

優化十三:開啓 Opcache

這一條對所有 PHP 項目都適用, 很人多說自己已經開啓了 Opcache, 事實上往往沒有,因爲 Opache 是否已經開啓是肉眼不可見的, 所以可以使用如下命令確認:

php -r "var_dump(function_exists('opcache_get_status'));"

如果返回 bool(true) 則說明 Opacahe 已經安裝成功了

開啓Opcache 是最重要的一環。

 

結尾

結論,Laravel 項目優化主要還是兩點:一是開啓opcache, 二是減少文件引入, 減少文件引入的方法這裏提供的可能並不全面,可以自己去研究,我的研究發現,當Laravel 某個接口 的引入文件達到 26 時,併發量可以達到 6k 左右。

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