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