Laravel 項目加速指南

教程 shanhuhai 9149℃ 2評論

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

PHP 項目慢的幾個重要原因

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

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

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

針對 Laravel 項目的加速

以下內容在 php7.1.9 , Laravel 5.6 下測試通過。

開啟 Opcache

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

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

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

開啟Opcache 是最重要的一環。

composer 加速

事實上這條對所有使用 composer 項目都適用,就是執行 composer dump-autload -o, 它的主要作用是將通過 PSR0/PSR4 加載的文件轉化為 classmap 方式的加載,從而減少少IO次數
對于此命令的詳細說明請參考:
composer 自動加載優化

執行 Laravel 自帶的cache 命令

Laravel 提供了兩個預緩存命令:

php artisan config:cache 
php artisan route:cache 

執行這兩個命令可以將配置以及路由的解析結果緩存起來, 至于如何查看單個請求引入了哪些文件,可以參考文章結尾的附加內容。

如何查看某個請求加載了多少個文件

查看某個特定請求引入了哪些文件,有一個方法就是借助 opcache 的統計功能,
安裝此開源項目 https://github.com/rlerdorf/opcache-status

安裝后,首先將 php-fpm 重啟,保證 opcache 是空的,然后向目標地址發送一次請求
瀏覽器打開 opcache-status, 例如 : http://localhost/opcache-status/opcache.php
可以看到,此次請求在 opcache 中緩存了多少個文件就是本次請求引入了哪些文件

結尾

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

轉載請注明:大后端 » Laravel 項目加速指南

喜歡 (9)or分享 (0)
發表我的評論
取消評論

表情

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
(2)個小伙伴在吐槽
  1. ??
    厲害了2019-02-20 13:07 回復
  2. composer dump-autload -o 應該是 composer dump-autoload -o
    cool8jay2019-01-22 10:04 回復
春梓美 种子,av全裸挂历,日本女护士mm裸照写真,超碰地址发布页 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>