<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Laravel框架性能調優方法

        來源:懂視網 責編:小采 時間:2020-11-27 20:11:38
        文檔

        Laravel框架性能調優方法

        Laravel框架性能調優方法:這是一份事后的總結。在經歷了調優過程踩的很多坑之后,我們最終完善并實施了初步的性能測試方案,通過真實的測試數據歸納出了 Laravel 開發過程中的一些實踐技巧。0x00 源起最近有同事反饋 Laravel 寫的應用程序響應有點慢、20幾個并發把 CPU 跑滿..
        推薦度:
        導讀Laravel框架性能調優方法:這是一份事后的總結。在經歷了調優過程踩的很多坑之后,我們最終完善并實施了初步的性能測試方案,通過真實的測試數據歸納出了 Laravel 開發過程中的一些實踐技巧。0x00 源起最近有同事反饋 Laravel 寫的應用程序響應有點慢、20幾個并發把 CPU 跑滿..

        6. 根據需要只加載必要的中間件

        Laravel 應用程序內置了并開啟了很多的中間件。每一個 Laravel 的請求都會加載相關的中間件、產生各種數據。在 app/Http/Kernel.php 中注釋掉不需要的中間件(如 session 支持)可以極大的提升性能。

        7. 使用即時編譯器

        HHVM 和 OPcache 都能輕輕松松的讓你的應用程序在不用做任何修改的情況下,直接提高 50% 或者更高的性能。

        8. 使用 PHP 7.x

        只能說 PHP 7.x 比起之前的版本在性能上有了極大的提升。

        嗯,限于你的真實企業環境,這個也許很長時間內改變不了,算我沒說。

        0x02 測試方案

        我們使用簡單的 Apache ab 命令僅對應用入口文件進行測試,并記錄和分析數據。

        1. 僅對應用的入口文件 index.php 進行測試,訪問 “/” 或者 “/index.php” 返回框架的歡迎頁面。更全面的性能測試需要針對應用的更多接口進行測試。

        2. 使用 Apache ab 命令。ab -t 10 -c 10 {url}。該命令表示對 url 同時發起 10 個請求,并持續 10 秒鐘。命令中具體的參數設置需要根據要測試的服務器性能進行選擇。

        3. 為了避免機器波動導致的數據錯誤,每種測試條件會執行多次 ab 命令,并記錄命令執行結果,重點關注每秒處理的請求數及請求響應時間,分析并剔除異常值。

        4. 每次對測試條件進行了調整,需要在瀏覽器上對歡迎頁進行訪問,確保沒有因為測試條件修改而訪問出錯。如果頁面訪問出錯會導致測試結果錯誤。

        服務器環境說明

        所有脫離具體環境的測試數據都沒有意義,并且只有在相近的條件下才可以進行比較。

        1. 這套環境運行在 Mac 上,內存 8G,處理器 2.8GHz,SSD 硬盤。

        2. 測試服務器是使用 Homestead 搭建的。虛擬機配置為單核 CPU、2G 內存。

        3. 服務器 PHP 版本為 7.1,未特殊說明,則標識開啟了 OPcache。

        4. 測試的 Laravel 應用程序采用 5.2 版本編寫。app\Http\routes.php 中定義了 85 個路由。

        5. 測試過程中除了虛擬機、終端及固定的瀏覽器窗口外,沒有會影響機器的程序運行。

        以上的數據,大家在自己進行測試時可以參考。

        0x03 測試過程及數據

        1. 未做任何優化

        1.1 操作

      1. 按照以下檢查項執行相應的操作。

      2. 運行 ab -t 10 -c 10 http://myurl.com/index.php

      3. 基礎檢查項

      4. .env 文件中 APP_DEBUG=true

      5. 不存在 bootstrap/cache/config.php

      6. 不存在 bootstrap/cache/routes.php

      7. 不存在 bootstrap/cache/compiled.phpbootstrap/cache/services.json

      8. app/Http/Kernel.php 中開啟了大部分的中間件

      9. 瀏覽器訪問 Laravel 應用程序歡迎頁確保正常訪問

      10. 1.2 數據記錄

        2. 關閉應用debug

        2.1 操作

      11. 在步驟 1 基礎上修改 .env 文件中 APP_DEBUG=false

      12. 瀏覽器訪問 Laravel 應用程序歡迎頁確保正常訪問。

      13. 運行 ab -t 10 -c 10 http://myurl.com/index.php

      14. 2.2 數據記錄

        2.3 對比結果

        與步驟 1 結果比較發現:關閉應用 debug 之后,每秒處理請求數從 26-34 上升到 33-35,請求響應時間從 大部分 300ms 以上下降到 290ms 左右,效果不太明顯,但確實有一定的提升。

        注意:這部分與應用中的日志等使用情況有比較大的關聯。

        3. 開啟緩存配置信息

        3.1 操作

      15. 在步驟 2 基礎上,運行 php artisan config:cache,確認生成 bootstrap/cache/config.php

      16. 瀏覽器訪問 Laravel 應用程序歡迎頁確保正常訪問。

      17. 運行 ab -t 10 -c 10 http://myurl.com/index.php

      18. 3.2 數據記錄

        3.3 對比結果

        與步驟 2 結果比較發現:開啟配置信息緩存之后,每秒處理請求數從 33-35 上升到 36-38,請求響應時間從 290ms 左右下降到 260ms 左右,效果不太明顯,但確實有一定的提升。

        4. 開啟緩存路由信息

        4.1 操作

      19. 在步驟 3 基礎上,運行 php artisan route:cache,確認生成 bootstrap/cache/routes.php

      20. 瀏覽器訪問 Laravel 應用程序歡迎頁確保正常訪問。

      21. 運行 ab -t 10 -c 10 http://myurl.com/index.php

      22. 4.2 數據記錄

        4.3 對比結果

        與步驟 3 結果比較發現:開啟路由信息緩存之后,每秒處理請求數從 36-38 上升到 60 左右,請求響應時間從 260ms 下降到 160ms 左右,效果顯著,從 TPS 看,提升了 70%。

        5. 刪除不必要的中間件

        5.1 操作

      23. 在步驟 4 基礎上,注釋掉不必要的中間件代碼。

      24. 瀏覽器訪問 Laravel 應用程序歡迎頁確保正常訪問。

      25. 運行 ab -t 10 -c 10 http://myurl.com/index.php

      26. 注意:這次測試中我注釋掉了所有的中間件。實際情況中應該盡量只留下必要的中間件。

        5.2 數據記錄

        5.3 對比結果

        與步驟 4 結果比較發現:刪除了不必要的中間件之后,每秒處理請求數從 60 左右上升到 90 左右,請求響應時間從 160ms 下降到 110ms 左右,效果非常明顯,從 TPS 看,提升了 50%。

        6. 開啟類映射加載優化

        6.1 操作

      27. 在步驟 5 基礎上,運行 php artisan optimize --force,確認生成 bootstrap/cache/compiled.phpbootstrap/cache/services.json

      28. 瀏覽器訪問 Laravel 應用程序歡迎頁確保正常訪問。

      29. 運行 ab -t 10 -c 10 http://myurl.com/index.php

      30. 6.2 數據記錄

        6.3 對比結果

        與步驟 5 結果比較發現:做了類映射加載優化之后,每秒處理請求數從 90 上升到 110,請求響應時間從 110ms 下降到 100ms 以下,效果還是比較明顯的。

        7. 關閉 OPcache

        7.1 操作

      31. 在步驟 6 基礎上,關閉 PHP 的 OPcache,并重啟服務器。通過 phpinfo() 的 Zend OPcache 確認 OPcache 已經關閉。

      32. 瀏覽器訪問 Laravel 應用程序歡迎頁確保正常訪問。

      33. 運行 ab -t 10 -c 10 http://myurl.com/index.php

      34. 7.2 數據記錄

        7.3 對比結果

        與步驟 6 結果比較發現:關閉 OPcache 之后,每秒處理請求數從 110 下降到 15,請求響應時間從 100ms 以下上升到 650ms 以上。開啟與關閉 OPcache,數據上竟有幾倍的差別。

        此后,我重新開啟了 PHP 的 OPcache,數據恢復到步驟 6 水平。

        0x04 踩過的坑

        1. [LogicException] Unable to prepare route [/] for serialization. Uses Closure.

        在運行 php artisan route:cache 命令時報這個錯誤。

        原因:路由文件中處理“/”時使用了閉包的方式。要運行該命令,路由的具體實現不能使用閉包方式。

        修改方案:將路由的具體實現放到控制器中來實現。

        2. [Exception] Serialization of 'Closure' is not allowed.

        在運行 php artisan route:cache 命令時報這個錯誤。

        原因:路由文件中定義了重復的路由。

        修改方案:排查路由文件中的重復路由并修改。尤其要注意 resource 方法很可能導致與其方法重復。

        3. [RuntimeException] Invalid filename provided.

        在運行 php artisan optimize --force 命名時報這個錯誤。

        原因:在加載需要編譯的類時沒有找到相應的文件。5.2 版本的 vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php 中定義了要編譯的文件路徑,但不知道為什么 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/ActiveRecords.php 沒有找到,所以報了這個錯誤。

        修改方案:暫時注釋掉了以上 config.php 中的 ../ActiveRecords.php 一行。

        4. InvalidArgumentException in FileViewFinder.php line 137: View [welcome] not found.

        在運行 php artisan config:cache 之后,瀏覽器上訪問 Laravel 應用程序歡迎頁報這個錯誤。

        原因:Laravel 應用程序服務器是通過 Homestead 在虛擬機上搭建的。而這個命令我是在虛擬機之外運行的,導致生成的 config.php 中的路徑是本機路徑,而不是虛擬機上的路徑。所以無法找到視圖文件。

        修改方案:ssh 到虛擬機內部運行該命令。

        0x05 實踐技巧

        坑也踩了,測試也做過了。這里針對這次經歷做個實踐技巧的簡單總結。

        1. 有效的 Laravel 應用程序優化技巧

        1. 關閉應用debug app.debug=false

        2. 緩存配置信息 php artisan config:cache

        3. 緩存路由信息 php artisan router:cache

        4. 類映射加載優化 php artisan optimize(包含自動加載優化 composer dumpautoload

        5. 根據需要只加載必要的中間件

        6. 使用即時編譯器(JIT),如:HHVM、OPcache

        2. 編寫代碼時注意事項

        1. 路由的具體實現放到控制器中。

        2. 不定義重復的路由,尤其注意 resouce 方法。

        3. 弄清各中間件的作用,刪除不必要的中間件引用。

        0x06 下一步

        以上的調優技巧及編碼注意事項主要針對框架本身,在真正的業務邏輯編碼中有很多具體的優化技巧,在此沒有討論。

        后續的優化重點將會放在具體編碼實踐上:

        1. 使用 Memcached 來存儲會話 config/session.php

        2. 使用專業的緩存驅動器

        3. 數據庫請求優化

        4. 為數據集書寫緩存邏輯

        5. 前端資源合并 Elixir

        0x07 寫在最后

        網上看到很多框架性能對比的文章與爭論,也看到很多簡單貼出了數據。這些都不足以窺探真實的情況,所以有了我們這次的實踐,并在過程中做了詳實的記錄。在各位讀者實踐過程中提供參考、比較、反思之用。對于這次實踐有疑問的讀者,也歡迎提出問題和意見。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Laravel框架性能調優方法

        Laravel框架性能調優方法:這是一份事后的總結。在經歷了調優過程踩的很多坑之后,我們最終完善并實施了初步的性能測試方案,通過真實的測試數據歸納出了 Laravel 開發過程中的一些實踐技巧。0x00 源起最近有同事反饋 Laravel 寫的應用程序響應有點慢、20幾個并發把 CPU 跑滿..
        推薦度:
        標簽: 方法 性能 優化
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 在线播放国产不卡免费视频| 亚洲一卡二卡三卡| 精品女同一区二区三区免费播放| 五月婷婷综合免费| 亚洲国产成人久久精品app| 在线看免费观看AV深夜影院| 91亚洲精品自在在线观看| 成年黄网站色大免费全看| 久久精品国产亚洲αv忘忧草 | 亚洲色成人网站WWW永久四虎| 国产免费不卡视频| 色在线亚洲视频www| 性xxxx视频播放免费| 国产精品久久久久久亚洲小说| 国产又长又粗又爽免费视频| 色偷偷亚洲第一综合网| 亚洲区日韩区无码区| 东方aⅴ免费观看久久av| 亚洲美女在线观看播放| 成人a免费α片在线视频网站| 性色av极品无码专区亚洲 | 日本免费网站观看| 日本一区二区三区免费高清在线| 在线播放亚洲第一字幕| 中文字幕免费视频一| 亚洲国产AV无码一区二区三区| 亚洲视频在线精品| 6080午夜一级毛片免费看6080夜福利 | 成人免费视频77777| 大桥未久亚洲无av码在线| 国产精品亚洲不卡一区二区三区| 免费人成毛片动漫在线播放| 亚洲 暴爽 AV人人爽日日碰| 免费大香伊蕉在人线国产| 国产羞羞的视频在线观看免费| 亚洲91精品麻豆国产系列在线| 久久久青草青青国产亚洲免观| 59pao成国产成视频永久免费| 色偷偷亚洲第一综合网| 亚洲网站在线观看| 国产在线观看免费完整版中文版 |