首頁  >  文章  >  php框架  >  Laravel8如何進行效能優化?優化技巧分享

Laravel8如何進行效能優化?優化技巧分享

青灯夜游
青灯夜游轉載
2022-10-08 18:23:431886瀏覽

Laravel8如何進行效能優化?優化技巧分享

本指南列出了從快速最佳化到深度調優的各種效能最佳化技巧,這些技巧可以幫助建立高效能的 Laravel 應用。

Enlightn 上有不少同學在幫我們寫了這篇指南。如果你正在尋求 Laravel 的自動化效能或安全工具,不妨到這個網站看看。

為什麼要提高性能?

毫無疑問,相比加載速度慢的應用程序,用戶更喜歡速度更快的應用。

根據Google的一項研究,載入時間超過3秒的網站,在行動端會有 53% 的用戶流失(選擇離開)。而行動網站的平均載入時間約為 15 秒。這就是性能的重要性!

應用每增加一秒的載入時間,客戶轉換率就會越低。幸運的是,對於 Laravel 應用來說,這並不是一個很難解決的問題。

1. 使用內建效能能力快速獲勝

Laravel 內建了一些效能提升功能,簡單設定即可使用。

最關鍵的效能提升是 路由快取 。你是否知道每次啟動 Laravel 應用時,都會執行確定中間件、解析別名、解析路由組並指定路由控制器操作和處理請求參數?

可以使用Artisan 指令route:cache 來快取所有必要的路由訊息,從而跳過路由處理:

php artisan route:cache

這條指令可以帶給你5 倍的性能提升!是最簡單也是最有效的優化。

除了路由緩存,Laravel 還提供以下內容:

  • 配置快取 在每次應用程式啟動時跳過.envconfig 檔案的解析。
  • 視圖快取 預先編譯你的 Blade 範本視圖。
  • 事件快取 快取應用程式所有事件和監聽器清單。

提示:你應該確保將上述快取命令新增到部署腳本中,以便每次部署時重新快取。否則,路由或設定檔的任何變更都不會在應用程式中體現。

2. 最佳化 Composer

Laravel 開發者常犯的一個錯誤是在生產模式下安裝所有依賴項。有些開發包(例如 Ignition)會在記憶體中記錄查詢、日誌和轉儲,從而提供帶有上下文的友善錯誤訊息,簡化偵錯過程。儘管這在開發中很有用,但會減慢生產環境中應用程式的速度。

在部署腳本中,使用Composer 安裝拓展套件的同時請務必使用-no-dev 選項:

composer install --prefer-dist --no-dev -o

此外,請確保如上所述在生產環境中使用-o 選項。這可以讓 Composer 可以透過產生「classmap」來優化自動載入器。

如果你的應用程式在運行時沒有生成類,你可以選擇使用 --classmap-authoritative 選項而不是 -o 選項進行進一步最佳化。請務必查看Autoloader 的Composer 文件優化策略.

3. 選擇正確的驅動程式

## 選擇正確的快取、佇列和會話驅動程式將會對應用程式效能產生極大影響。

對於生產環境中的緩存,推薦 Redis、Memcached 或 DynamoDB 等記憶體快取驅動程式。你可以考慮將本機檔案系統快取用於單一伺服器設置,儘管這將比快取到記憶體的選項慢。

對於佇列,建議使用 Redis、SQS 或 Beanstalkd 驅動程式。資料庫佇列驅動不適用於生產環境,並且已知可能會存在死鎖問題。

對於 Session,推薦資料庫、Redis、Memcached 或 DynamoDB 驅動程式。 Cookie 驅動程式具有檔案大小和安全限制,不建議用於生產環境。

4. 將耗時的任務透過佇列處理

在典型的Web 請求過程中,可能會有一些特定任務需要很長時間才能執行完成。 Laravel 擁有一流的

佇列系統,這可以讓我們將耗時的任務轉移到佇列的任務中,從而讓你的應用程式能夠以極快的速度回應請求。

一般情況下,這類任務的常見範例包括解析和儲存 CSV 檔案、與第三方 API 互動、向使用者發送通知、存在較長耗時的資料庫查詢和搜尋索引更新。

5. 文字檔案設定 HTTP 壓縮標頭

壓縮標頭會對應用程式效能產生重大影響。確保你在 Web 伺服器上為文字格式檔案(如 CSS、JS、XML 或 JSON)啟用壓縮或 CDN。

圖像格式已經有壓縮演算法的實現且大多數情況圖像格式檔案已經被壓縮過,並且圖像並不是文字格式檔案(SVG格式除外,這是XML文檔)。因此,影像格式不需要壓縮。

你可以在 Web 伺服器或 CDN 上設定 gzip 或 brotli(較舊的瀏覽器可能不支援 brotli),以獲得較大的效能提升。

通常情況下,壓縮可以將檔案體積大小減少 80% 左右!

6. 在靜態資源上設定HTTP 快取標頭

快取可以提高應用程式的效能,特別是對於靜態資源,如圖像、CSS 和JS 檔案。建議在 Web 伺服器或CDN 層級啟用快取控制標頭(如果適用的話)。如果你希望在 Larvel 應用程式而不是 WebServer上設定這些控制頭,可以使用 Larvel 的 快取控制中間件

Cache 訊息標頭欄位可以確保瀏覽器不會在多次造訪網站時重複請求靜態資源。這可以提高用戶體驗,因為網站在隨後的訪問時可以加載更快。

Laravel Mix 提供了開箱即用的快取清理 功能,以便在更改 CSS 或 JS 程式碼時,瀏覽器不會繼續使用舊的快取內容。

7. 使用CDN 服務加速靜態資源

內容交付網路(CDN)是一個基於地理分散式的伺服器群組,透過使用距離網站訪客更近的伺服器來提供服務。可以讓使用者體驗到更快的載入時間。

除了更快的載入速度和更短的載入時間外,CDN 還具有其他優點,如減少 Web 伺服器負載,DDOS 保護和靜態資源服務的分析等。

一些流行的 CDN 包括 CloudFlare、AWS CloudFront 和 Azure CDN。大多數 CDN 都有一定的免費試用額度。請考慮使用 CDN 來提升靜態資源的載入效能。

Laravel 在框架中提供了開箱即用的 CDN 支援元件 Mix 和助手函數 asset

8. 最小化JS 和CSS 程式碼

最小化腳本將會從你的應用程式中移除對執行不必要的額外程式碼(如程式碼註解、空格、縮短變數名以及其他最佳化)。這是一個在生產環境中減少 JS 和 CSS 檔案大小常用且有效的手段。

Laravel Mix 為你的生產腳本提供了開箱即用的最小化輸出 功能

9. 合理使用緩存

Laravel 內建了快取 支援。快取最適合用於讀取繁重的工作負載。這些工作負載通常涉及耗時的資料檢索或資料處理任務。

快取的一些常見場景案例可能包括:

  • 快取靜態頁面:快取靜態頁面是一件輕而易舉的事. Laravel 的官網使用頁面快取 的方式快取每一個文件頁面。
  • 片段或部分快取:有時候,比起快取整個頁面,快取頁面片段可能更有用。例如,你可能希望快取包含使用者名稱和使用者頭像的頁首。你可以一次快取頁面頁眉片段,而不需要每次都從資料庫中取得資料。
  • 查詢快取:如果你的應用程式經常查詢資料庫中很少更改的項,則查詢快取可能會很有用。例如,當你經營一家電商網站,你可能希望快取商城主頁上顯示的項目分類,而不是在每次訪問商城時從資料庫讀取這些項目分類。

請記住,快取對long tail(很少請求的項目)沒有用處。相反,對於任何頻繁進行的資料檢索 (與資料更新相比),應謹慎使用它。

也必須確保每次快取內容變更時都使快取無效或刷新快取。例如,如果您正在快取設定檔頭,則在使用者更新其設定檔圖片後刷新快取。

10. 確定您的應用程式的效能瓶頸

如果您的某些頁面載入時間較長或記憶體使用率較高,則可能需要確定效能瓶頸。 Laravel 生態系統中有許多工具可以幫助您做到這一點,包括 Laravel Telescope、Laravel Debugbar 和 Clockwork 。

一些常見的效能瓶頸包括:

  • N 1個查詢:如果您的程式碼為每個記錄執行一個查詢,將會導致更多的網路往返和更多的查詢。這可以在Laravel 中使用資料預先載入.
  • 重複請求:如果程式碼在處理相同請求時多次執行相同查詢,則可能會減慢您的應用程式的運行速度。通常情況下,如果多個服務或類別需要相同的資料集,則可以透過將資料計算或檢索提取到單獨的類別來解決這些問題。
  • 高記憶體使用率:為了減少應用程式的記憶體使用量,可以考慮使用Lazy collectionsQuery chunking 來減少單次處理的資料體積。若要儲存文件,請使用 Automatic streaming 以減少記憶體使用。
  • 慢查詢:如果查詢執行時間過長,則應考慮使用查詢快取和/或使用 EXPLAIN 語句來最佳化查詢執行計劃。

如果無法使用上述偵錯工具來確定應用程式中的效能瓶頸,則可以考慮使用 XDebug 或 Blackfire 等分析工具。

上線偵測清單

另外這裡有完整的上線檢查清單可供參考41. 課程總結|《LX3 Laravel 效能優化入門》

總結

效能最佳化是一個永恆的話題,但Laravel 有幾個內建元件,如Mix、queues 和緩存,這使效能優化看起來很簡單!我們希望你在提高應用程式效能方面學到一些新知識。

原文網址:https://laravel-news.com/performance-checklist

翻譯網址:https://learnku.com/laravel/t/55702

【相關推薦:laravel影片教學

以上是Laravel8如何進行效能優化?優化技巧分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除