這篇文章主要介紹“Laravel8怎么進行性能優化”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Laravel8怎么進行性能優化”文章能幫助大家解決問題。
毫無疑問,相比加載速度慢的應用程序,用戶更喜歡速度更快的應用。
根據谷歌的一項研究,加載時間超過3秒的網站,在移動端會有 53% 的用戶流失(選擇離開)。而移動網站的平均加載時間約為 15 秒。這就是性能的重要性!
應用每增加一秒的加載時間,客戶轉化率就會越低。幸運的是,對于 Laravel 應用來說,這并不是一個很難解決的問題。
Laravel 內置了一些性能提升功能,簡單配置一下即可使用。
最關鍵的性能提升是 路由緩存 。你是否知道每次啟動 Laravel 應用時,都會執行確定中間件、解析別名、解析路由組并指定路由控制器操作和處理請求參數?
可以使用 Artisan 命令 route:cache
來緩存所有必需的路由信息,從而跳過路由處理:
php artisan route:cache
這條命令可以給你帶來 5 倍的性能提升!是最簡單也是最有效的優化。
除了路由緩存,Laravel 還提供以下內容:
配置緩存 在每次應用啟動時跳過 .env
和 config
文件的解析。
視圖緩存 預編譯你的 Blade 模板視圖。
事件緩存 緩存應用程序所有事件和監聽器清單。
提示:你應該確保將上述緩存命令添加到部署腳本中,以便每次部署時都重新緩存。否則,路由或配置文件的任何更改都不會在應用中體現。
Laravel 開發者常犯的一個錯誤是在生產模式下安裝所有依賴項。一些開發包(例如 Ignition)會在內存中記錄查詢、日志和轉儲,從而提供帶有上下文的友好錯誤消息,簡化調試過程。盡管這在開發中很有用,但會減慢生產環境中應用程序的速度。
在部署腳本中,使用 Composer 安裝拓展包的同時請務必使用 -no-dev
選項:
composer install --prefer-dist --no-dev -o
此外,請確保如上所述在生產環境中使用 -o
選項。這可以讓 Composer 可以通過生成「classmap」來優化自動加載器。
如果你的應用在運行時沒有生成類,你可以選擇使用 --classmap-authoritative
選項而不是 -o
選項進行進一步優化。請務必查看 Autoloader 的 Composer 文檔 優化策略.
選擇正確的緩存、隊列和會話驅動程序將會對應用程序性能產生極大影響。
對于生產環境中的緩存,推薦 Redis、Memcached 或 DynamoDB 等內存緩存驅動程序。你可以考慮將本地文件系統緩存用于單服務器設置,盡管這將比緩存到內存的選項慢。
對于隊列,推薦使用 Redis、SQS 或 Beanstalkd 驅動程序。數據庫隊列驅動不適用于生產環境,并且已知可能會存在死鎖問題。
對于 Session,推薦數據庫、Redis、Memcached 或 DynamoDB 驅動程序。Cookie 驅動程序具有文件大小和安全限制,不建議用于生產環境。
在典型的 Web 請求過程中,可能會有一些特定任務需要很長時間才能執行完成。Laravel 擁有一流的 隊列系統,這可以讓我們將耗時的任務轉移到隊列的任務中,從而讓你的應用程序能夠以極快的速度響應請求。
一般情況下,這類任務的常見示例包括解析和存儲 CSV 文件、與第三方 API 交互、向用戶發送通知、存在較長耗時的數據庫查詢和搜索索引更新。
壓縮標頭會對應用程序性能產生重大影響。確保你在 Web 服務器上為文本格式文件(如 CSS、JS、XML 或 JSON)啟用壓縮或 CDN。
圖像格式已經有壓縮算法的實現且大多數情況圖像格式文件已經被壓縮過,并且圖像并不是文本格式文件(SVG格式除外,這是XML文檔)。因此,圖像格式不需要壓縮。
你可以在 Web 服務器或 CDN 上設置 gzip 或 brotli(較舊的瀏覽器可能不支持 brotli),以獲得較大的性能提升。
通常情況下,壓縮可以將文件體積大小減少 80% 左右!
緩存可以提高應用程序的性能,特別是對于靜態資源,如圖像、CSS 和 JS 文件。建議在 Web 服務器或CDN 級別啟用緩存控制標頭(如果適用的話)。如果你希望在 Larvel 應用程序而不是 WebServer上設置這些控制頭,可以使用 Larvel 的 緩存控制中間件。
Cache 消息頭字段可以確保瀏覽器不會在多次訪問網站時重復請求靜態資源。這可以提高用戶體驗,因為網站在隨后的訪問時可以加載更快。
Laravel Mix 提供了開箱即用的緩存清理 功能,以便在更改 CSS 或 JS 代碼時,瀏覽器不會繼續使用舊的緩存內容。
內容交付網絡(CDN)是一個基于地理分布式的服務器組,通過使用距離網站訪客更近的服務器來提供服務??梢宰層脩趔w驗到更快的加載時間。
除了更快的加載速度和更短的加載時間外,CDN 還具有其他優點,如減少 Web 服務器負載,DDOS 保護和靜態資源服務的分析等。
一些流行的 CDN 包括 CloudFlare、AWS CloudFront 和 Azure CDN。大多數 CDN 都有一定的免費試用額度。請考慮使用 CDN 來提升靜態資源的加載性能。
Laravel 在框架中提供了開箱即用的 CDN 支持組件 Mix 和助手函數 asset。
最小化腳本將會從你的應用程序中去除對執行不必要的額外代碼(如代碼注釋、空格、縮短變量名以及其他優化)。這是一個在生產環境中減小 JS 和 CSS 文件大小常用且有效的手段。
Laravel Mix 為你的生產腳本提供了開箱即用的 最小化輸出 功能
Laravel 內置了 緩存 支持。緩存最適合用于讀取繁重的工作負載。這些工作負載通常涉及耗時的數據檢索或數據處理任務。
緩存的一些常見場景案例可能包括:
緩存靜態頁面:緩存靜態頁面是一件輕而易舉的事. Laravel 的官網使用 頁面緩存 的方式緩存每一個文檔頁面。
片段或部分緩存:有時候,相比緩存整個頁面,緩存頁面片段可能更有用。例如,你可能希望緩存包含用戶名和用戶頭像的頁眉。你可以一次性緩存頁面頁眉片段,而不需要每次都從數據庫中獲取數據。
查詢緩存:如果你的應用程序頻繁地查詢數據庫中很少更改的項,則查詢緩存可能會很有用。例如,當你經營一家電商網站,你可能希望緩存商城主頁上顯示的項目分類,而不是在每次訪問商城時從數據庫中讀取這些項目分類。
請記住,緩存對long tail
(很少請求的項目)沒有用處。相反,對于任何頻繁進行的數據檢索 (與數據更新相比),應謹慎使用它。
還必須確保每次緩存內容更改時都使緩存無效或刷新緩存。例如,如果您正在緩存配置文件頭,則在用戶更新其配置文件圖片后刷新緩存。
如果您的某些頁面加載時間較長或內存使用率較高,則可能需要確定性能瓶頸。Laravel 生態系統中有許多工具可以幫助您做到這一點,包括 Laravel Telescope、Laravel Debugbar 和 Clockwork 。
一些常見的性能瓶頸包括:
N+1個查詢:如果您的代碼為每個記錄執行一個查詢,將導致更多的網絡往返和更多的查詢。這可以在 Laravel 中使用 數據預加載.
重復請求:如果代碼在處理同一請求時多次執行同一查詢,則可能會減慢您的應用程序的運行速度。通常情況下,如果多個服務或類需要相同的數據集,則可以通過將數據計算或檢索提取到單獨的類來解決這些問題。
高內存使用率:為了減少應用程序的內存使用量,可以考慮使用 Lazy collections 和 Query chunking 來減少單次處理的數據體積。若要存儲文件,請使用 Automatic streaming 以減少內存使用。
慢查詢:如果查詢執行時間過長,則應考慮使用查詢緩存和/或使用 EXPLAIN 語句來優化查詢執行計劃。
如果無法使用上述調試工具確定應用程序中的性能瓶頸,則可以考慮使用 XDebug 或 Blackfire 等分析工具。
關于“Laravel8怎么進行性能優化”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
推薦閱讀:如何在云端進行性能優化
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。