優化Laravel效能的17種方法

優化Laravel效能的17種方法

您是否正在尋找成功的方法來加快Laravel的效能,同時在您的專案上工作?你來對地方了!

Laravel是一個流行的開源PHP框架,以其強大的安全性和簡單而複雜的編碼架構而聞名。它是構建能夠推動收入和推動業務發展的尖端Web應用程式的絕佳選擇。

儘管如此,如果你不使用正確的優化技術,Laravel的效能可能會變慢。

幸運的是,有許多技巧可以最大限度地提高Laravel的效能。我們彙總了您可以遵循的最有效的優化技巧列表。

  1. Laravel效能優化的重要性
  2. 如何測量Laravel效能
  3. 如何優化Laravel效能(17 種方法)

Laravel效能優化的重要性

開發者在釋出之前必須非常關注每個Laravel應用程式的效能,以確保其成功。這是Laravel開發人員應該具備的幾個品質之一。

通過程式碼調整和命令來優化Laravel效能可以幫助實現這一點,並且可以對你的應用程式的效率產生重大影響。

Laravel慢嗎?

Laravel是一個快速的框架,帶有大量特性和功能(例如Memcache、資料庫支援、Redis 等)以幫助提高效能。Laravel還讓軟體專業人員能夠以相對較少的精力來生成健壯的程式碼來滿足他們大大小小的專案目標。由於資料以鍵值對的形式儲存在伺服器的RAM中,因此使用者可以儘可能多地快取,以快速流暢地維護他們的應用程式或網站。Laravel基於Google Trend,是目前最流行的PHP後端工具。

Laravel在Google上的受歡迎程度

Laravel在Google上的受歡迎程度(圖片來源:Google Trend

最近釋出的Laravel 9提供了新的效能改進。例如,它具有最小的PHP規範,並且需要Symphony 6.0,它在PHP 8.1上執行速度提高了20.65%route:list命令的新設計現在減少了複雜命令的混亂檢視。Laravel 9還包括一個更高效的查詢構建器介面,以及更多的特性。

然而,一些因素導致Laravel效能緩慢。很多開發者有不良習慣,比如上傳大量重圖,使用舊的PHP版本,編譯大量不需要的資料,或者忽略從專案中刪除不必要的檔案。

Laravel複雜的MVC PHP架構和相關庫提供了安全性、效能和可用性的完美結合。這就是為什麼學習一些Laravel優化技巧來獲得更高效能是一個很好的經驗法則。

網站速度很重要

對於任何品牌形象來說,第一印象都是持久的。網站速度是您給網站訪問者留下的第一印象。您是否知道大約50%的線上客戶會放棄載入時間超過3秒的網站?

網站速度

網站速度(圖片來源:Cuso Magazine

網站速度(又名網站效能)是指瀏覽器從特定網站載入完全可操作的網頁所花費的時間。因此,它對使用者體驗(UX)和轉化率有直接影響。

網站效能也會影響您在搜尋引擎上的SEO排名。如果有多個網站提供您的訪問者所尋求的資訊,那麼速度更快的網頁將首先出現。如果您的網站執行緩慢,那麼它在Google搜尋結果中排名靠前的可能性就會降低。

因此,您應該投入一些時間來應用有效的網站效能優化解決方案

Laravel效能優化的好處

雖然你可能設計了一個很棒的Laravel應用程式,但總有改進的餘地以達到完美。提高Laravel效能有很多好處:

  • 促進業務增長:改進的Laravel效能意味著更高效的網站或應用程式。因此,您接觸更廣泛受眾的機會就會增加。
  • 更流暢的開發環境:下面列出的Laravel效能優化技巧可幫助開發人員節省更多的編碼時間,更快地執行任務,並消耗更少的資源。
  • 更好地處理流量:學習如何巧妙地使用Laravel佇列系統可以幫助您的網站在增長和獲取大量流量時管理請求數量。

如何測量Laravel效能

你已經投入了大量的時間和精力來讓你的時髦的網路應用程式執行起來,但是如果它很慢,沒有人會使用它,你就會像頭疼的熊一樣。這就是Laravel效能測試的用武之地。

您可以使用各種工具對您寶貴的創作進行效能測試。讓我們來看看其中的三個。

1. Blackfire.io

Blackfire.io

Blackfire.io(來源:Blackfire.io

Blackfire.io是一個直觀的Web應用程式分析器,可識別基本路徑,因此您可以專注於PHP應用程式的重要領域。

它包括多個效能監控功能並顯示記憶體使用情況、CPU時間以及I/O。Blackfire.io還允許您對函式呼叫和路徑進行排序,以檢視您的Laravel應用程式是如何工作的。

2. Laravel Dusk

Laravel Dusk

Laravel Dusk(來源:ELSNER

Laravel Dusk讓您可以測試您的應用程式並從使用者的角度檢查它的功能。您無需安裝Selenium或JDK即可使用Dusk,因為它預設包含Chromedriver。

使用Dusk等開發人員友好的API,您可以自動執行瀏覽器測試,無需ChromeDriver和PHP WebDriver分別要求的嚴格流程。

此外,Dusk儲存失敗測試的螢幕截圖和瀏覽器控制檯輸出,以便您能夠找出任何錯誤。

3.LoadForge

LoadForge

LoadForge(來源:LoadForge

LoadForge為Laravel量身定製,自動掃描您的網站,識別問題,並提供全面的圖表以及每個頁面的效能統計資訊。

在Chrome中,LoadForge允許您捕獲瀏覽器操作,然後將它們轉換為LoadForge測試。通過這種方式,您將能夠通過模擬使用者登入、瀏覽您的網站甚至下訂單來建立逼真的使用者體驗。

如何優化Laravel效能(17種方法)

在本節中,我們將通過細齒梳來幫助您提高Laravel效能的一些最佳想法和策略。

1. 路由快取

路由快取是一項出色的功能,特別是對於具有大量配置和分佈在程式碼中的路由的應用程式。它是將一組路線打包在一個命令中,以幫助減少手動繪製路線圖的繁瑣任務。因此,您網站的頁面將載入得更快。

路由快取允許Laravel定期從預編譯的快取中檢索路由,而不必為每個新使用者從頭開始。

使用此命令快取所需的路由資料:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan route:cache
php artisan route:cache
php artisan route:cache

請記住,當使用者離開您的站點時,快取就會過期。每次對您的網站進行結構更改(例如路由檔案和配置)後執行該路由快取命令也很重要,因為之後所做的任何修改都不會生效。

如果要清除路由快取,請執行以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan route:clear
php artisan route:clear
php artisan route:clear

2.Optimize Composer

Laravel使用一個名為Composer的單獨工具來管理不同的依賴項。當您最初安裝Composer時,預設情況下它會將開發依賴項載入到您的系統中。

這些依賴項對於開發網站很有用。但是,一旦您的網站完全投入運營,就不再需要它們,事實上,它們只會減慢速度。

在使用Composer安裝包時,使用--no-dev-o引數刪除開發依賴:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer install --prefer-dist --no-dev -o
composer install --prefer-dist --no-dev -o
composer install --prefer-dist --no-dev -o

此命令允許Composer建立用於優化自動載入器和提高效能的目錄。它只是請求獲取和打包官方發行版,沒有開發依賴項。

注意不要消除任何執行時依賴項。這可能會危及您網站的效能,甚至導致其崩潰。

3.減少自動載入的服務

Laravel的目標是讓開發過程儘可能輕鬆。例如,當您啟動Laravel時,它會自動載入config/app.php檔案中列出的大量服務提供程式,以幫助您快速開始您的專案。

雖然這是Laravel的一個有益步驟,但您不需要使用所有這些服務來構建應用程式。

以REST API為例。您不需要View Service Provider或Session Service Provider等服務。此外,許多開發人員不遵循預設的框架設定。您可以簡單地禁用對您的需求多餘的服務(例如分頁服務提供者、翻譯服務提供者、身份驗證服務提供者等)。

通過將相同的原理應用於其他應用程式,您將能夠提高Laravel應用程式的速度。只要確保你沒有刪除任何重要的服務,並在你放下錘子之前仔細檢查一切。

4. 有效使用Artisan命令和快取

Artisan是Laravel自帶的一個流行的命令列工具。它使開發人員可以輕鬆地自動執行重複性和複雜的任務。網站建立者也可以使用它來進行測試和生成命令。

巧妙地使用Artisan命令可以提高您的應用程式效能。下面,我們列出了幾個您可以使用的最佳快取命令。
配置快取
快取配置是獲得速度提升的絕佳命令。它將應用程式的所有配置值編譯到一個檔案中,以便框架可以更快地載入。您只需要執行:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan config:cache
php artisan config:cache
php artisan config:cache

請注意,您不應在本地開發期間執行配置快取命令。這是因為在您的應用程式開發過程中可能需要經常更改配置設定。

要清除配置快取,請執行以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan config:clear
php artisan config:clear
php artisan config:clear

檢視快取
檢視快取是包含快取的應用程式的另一個方面。檢視快取儲存生成的 Blade 模板以提高專案的速度。您可以使用下面的 artisan 命令手動編譯所有檢視並優化效能:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan view:cache
php artisan view:cache
php artisan view:cache

上傳新程式碼時記得清除快取;否則,Laravel將使用您的舊檢視,您將花費大量時間嘗試解決此問題。執行以下命令清除檢視快取:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan view:clear
php artisan view:clear
php artisan view:clear

應用快取
這是Laravel中的主要快取。它儲存您在應用程式中手動快取的所有資料。使用Laravel的快取是加速常用資料和優化Laravel效能的一種聰明方法。如果您使用標籤或多個快取儲存,則只能重新整理快取的某些元素。

這是清除Laravel快取的artisan命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan cache:clear
php artisan cache:clear
php artisan cache:clear

請記住,此命令不會刪除/bootstrap/cache/資料夾中的任何路由、配置或檢視快取。

5.減少包裝使用

作為一個擁有大量社羣的開源框架,在Laravel中看到越來越多的包釋出或現有包中的新版本是很自然的。您可以直接在您的應用程式中自由使用它們及其功能。

您必須在檔案composer.json中包含這些包。Laravel隨後將安裝它們以及它們的依賴項。

然而,在向任何應用程式新增新包之前,需要考慮一些因素。例如,它們並非都是為同一目的而設計的。還建立了一些包來執行廣泛的功能。

當您包含具有大量依賴項的包時,應用程式的大小會增加,其效能最終會受到影響。這就是為什麼在新增任何包之前仔細檢查依賴關係至關重要的原因。

6.升級到最新版本的PHP

就像任何其他程式碼或軟體程式一樣,最好將您的PHP版本更新到最新版本。

使用最新PHP版本的主要原因是安全性。兩年來,每個PHP版本都會收到安全補丁和錯誤修復。如果您繼續使用不再維護的早期版本,您的系統可能會受到威脅。

許多開發人員可能還沒有意識到PHP版本越舊,其效能就越慢。為了提高效率,當前的PHP版本具有出色的效能改進,例如更快地執行請求、列舉、纖程和繼承快取。

7.使用佇列

將緩慢的任務解除安裝到佇列作業是一種快速最大化Laravel應用程式速度的簡單技術。

有時您不需要立即使用UI中的資訊。在這種情況下,此類任務可以推遲並稍後通過單獨的程序在後臺執行(例如傳送電子郵件)。這可以顯著提高應用程式線上請求的效能。

使用佇列傳送電子郵件的示例(圖片來源:GeekFlare

Laravel支援多種佇列驅動程式,例如IronMQ、Redis、Amazon SQS和Beanstalkd。它還包括一個內建的佇列工作者,可以使用以下命令執行:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan queue:work
php artisan queue:work
php artisan queue:work

您可以使用以下方法將新作業新增到佇列中:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Queue::push('SendEmail', array('message' => $message));
Queue::push('SendEmail', array('message' => $message));
Queue::push('SendEmail', array('message' => $message));

如果您想推遲執行其中一個排隊的作業,請通過Carbon使用以下方法。例如,假設您要安排在客戶建立帳戶後10分鐘向客戶傳送電子郵件的作業:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$date = Carbon::now()->addMinutes(10);
Queue::later($date, 'SendEmail@send', array('message' => $message));
$date = Carbon::now()->addMinutes(10); Queue::later($date, 'SendEmail@send', array('message' => $message));
$date = Carbon::now()->addMinutes(10);
Queue::later($date, 'SendEmail@send', array('message' => $message));

8.使用部署工具呼叫所有命令

好的,我們意識到這不是一個純粹的Laravel效能技巧,但對於開發人員來說,它是一種極好的節省時間的技術,對於提高生產力同樣重要。

Deployer是一個基於PHP的部署工具,允許您將程式碼部署到不同的伺服器。它包括流行框架的指令碼,例如Laravel、Symfony、Zend、Magento、CakePHP等。

如果您之前沒有使用Composer來管理您的專案依賴項,那麼您將很快熟悉Deployer。使用此工具可自動執行所有機器部署操作,例如啟動伺服器、克隆到遠端伺服器和監控遠端主機。

Deployer具有使用單個命令在Laravel應用程式中執行遷移、種子和優化功能的設定:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php deployer.phar deploy production
php deployer.phar deploy production
php deployer.phar deploy production

9. 在小型專案中使用Lumen

有時開發小型應用程式(例如移動或Angular應用程式)不需要使用像Laravel這樣的全棧框架。在這種情況下,請考慮改用Lumen。

Lumen是由Laravel的同一建立者開發的微框架。就像Laravel的輕量級版本一樣,Lumen是關於微服務的速度和效能的。在構建Web應用程式時,它需要最少的設定和替代路由引數,從而加快開發過程。

例如,Lumen每秒可以處理100個請求。您還可以整合來自第三方的工具或軟體包以獲得新功能。此外,Lumen支援所有平臺並允許您升級到Laravel。

10. 利用JIT編譯器

PHP是一種伺服器端語言,需要直譯器將程式碼翻譯成計算機可以理解的位元組碼。

這個過程需要大量的時間並且消耗大量的資源。這就是為什麼程式設計師會使用Zend引擎之類的指令碼引擎來執行C子例程,每次執行應用程式時都必須重複這些子例程,這會減慢您的應用程式的速度。

為了提高效率,開發人員使用即時 (JIT) 編譯器重複該過程一次。HHVM是由Facebook發明並廣泛使用的,是Laravel的首選JIT編譯器。Etsy、維基百科和許多其他網站也使用它。

11. 利用即時載入

為了愉快地與資料庫互動,Laravel提供了一個很棒的物件關係對映器 (ORM),稱為Eloquent。它使您能夠以簡單的格式關聯表並處理PHP中的所有CRUD函式。

當您從資料庫中檢索模型,然後對它們的關係執行任何型別的處理時,關係資料是“延遲載入的”。這意味著在您訪問關係之前不會載入資料。

您最終將執行N+1個查詢以通過延遲載入找到您的響應,如以下示例所示:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$books = AppBook::all();
foreach ($books as $book) {
echo $book->author->name;
}
$books = AppBook::all(); foreach ($books as $book) { echo $book->author->name; }
$books = AppBook::all();
foreach ($books as $book) {
echo $book->author->name;
}

為了優化Laravel效能並解決N+1查詢問題,Laravel 可以“即時載入”資料,如下所示:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$books = AppBook::with('author')->get();
foreach ($books as $book) {
echo $book->author->name;
}
$books = AppBook::with('author')->get(); foreach ($books as $book) { echo $book->author->name; }
$books = AppBook::with('author')->get();
foreach ($books as $book) {
echo $book->author->name;
}

12.壓縮影象

影象在網站設計中起著重要作用。它們對於增強使用者體驗 (UX) 和提升搜尋排名至關重要。

一個網站的平均載入時間是兩秒。沉重的影象會降低網站的載入速度。如果您的網站速度較慢,那麼您很有可能最終會失去許多訪問者。

影象壓縮可在不犧牲質量的情況下最小化原始影象的大小,有助於優化網站速度。出於這個原因,Laravel提供了簡潔的照片壓縮選項,例如TinyPNG、reSmush.it或ImageMin。

13. 使用CDN

使用內容交付網路 (CDN)可以真正優化Laravel效能。通過從CDN伺服器而不是直接從託管檔案的機器載入靜態內容,資料可以更快地到達您的受眾。

換句話說,它將您網站的最新版本快取到全球雲伺服器網路。因此,即使您的訪問者在地理位置上遠離您的位置,他們仍然能夠快速訪問您的網站。

Cloudflare允許從您的主域而不是輔助CDN域傳遞您網站的快取檔案,從而提高您的SEO排名。

CDN還有助於從您的JavaScript (JS)和CSS檔案中刪除不需要的元件。這大大減少了網站頁面載入所需的時間,並減少了頻寬消耗。

14. 最小化JS和CSS程式碼

在繼續進行資產捆綁過程之前,通過最小化JavaScript和CSS檔案來提高Laravel效能。

此縮小步驟會從您的應用程式中刪除任何不必要的程式碼,例如空格、註釋和使用縮短名稱的變數重新命名。如有必要,您可以調整影象大小以建立縮圖。

因此,您將改善您的使用者體驗,同時減少HTTP呼叫。

15. 使用資產捆綁

有幾種工具可用於將Javascript和CSS之類的檔案壓縮和捆綁到一個檔案中,例如Laravel Mix和Laravel Packer。

所有Laravel應用程式都預設包含Laravel Mix。它是一個使用者友好的API,用於為您的PHP應用程式建立Webpack構建,使用一系列常見的JavaScript和CSS前處理器。

假設您的應用程式檔案需要一定的樣式格式集合,您可以輸入如下內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mix.styles([
'public/css/vendor/normalize.css',
'public/css/styles.css'
], 'public/css/all.css');
mix.styles([ 'public/css/vendor/normalize.css', 'public/css/styles.css' ], 'public/css/all.css');
mix.styles([
'public/css/vendor/normalize.css',
'public/css/styles.css'
], 'public/css/all.css');

現在,Laravel Mix會自動all.cssnormalize.cssstyle.css檔案生成一個檔案。因此,您可以將它們組合成一個all.css檔案,而不是單獨獲取每個樣式表。

Laravel Packer是一個命令列工具,可以通過Composer安裝。它可以讓你減少和捆綁你的JS和CSS程式碼。但是,它比Laravel Mix更難使用。

儘管這個技巧對於提升Laravel效能非常有用,但合併大量檔案會使其變得龐大並最終產生相反的效果。要解決此問題,請使用Laravel Mix通過執行以下命令來縮小檔案:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
npm run prod
npm run prod
npm run prod

16. 限制包含的庫

Laravel讓您可以自由新增任意數量的庫。雖然這是一個很棒的功能,但新增大量庫會給應用程式的效能帶來很大壓力。它還會影響整個使用者體驗。

因此,掃描程式碼中當前使用的所有庫資料至關重要。您可以在config/app.php file. 在檢查庫時,刪除您知道對您不再有用的庫。

composer.json檢查不需要的依賴項也是一個好主意。

17.考慮使用New Relic

New Relic是開發人員在其Laravel應用程式中整合的應用程式效能管理 (APM) 工具。它用於分析和監控反映其效能的統計資料,以優化效率並避免實時中斷。

New Relic可以幫助您評估Apdex分數並衡量您的應用與市場上的競爭對手相比如何。它還使您能夠根據您的條件建立警報策略。

小結

Laravel是一個快速發展的PHP框架,有很多教程可供各類使用者學習Laravel,無論他們的知識水平如何。

當談到數字世界中的使用者體驗時,效能是建立強大線上形象的關鍵因素。組織投入更多時間和資源來提供高質量的使用者體驗也就不足為奇了。

如果您是Laravel開發人員,您可以確信通過使用上述方法,您會發現效能有了顯著提高,並且能夠保持應用程式的流暢執行。

評論留言