溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Laravel如何優(yōu)化性能

發(fā)布時(shí)間:2022-12-03 09:13:49 來源:億速云 閱讀:120 作者:iii 欄目:編程語言

這篇文章主要講解了“Laravel如何優(yōu)化性能”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Laravel如何優(yōu)化性能”吧!

Laravel 的性能優(yōu)化為何如此重要?

這篇文章將介紹幾個(gè)重要的技巧,每個(gè)步驟指導(dǎo)優(yōu)化你的 Laravel 網(wǎng)站。雖然有些步驟可能聽起來很有技術(shù)含量,但這些步驟很容易遵循并在你自己的屏幕上重新創(chuàng)建。

1. 路由緩存

Laravel 允許緩存路由。你可以執(zhí)行 Artisan 命令:

php artisan route:cache

所有的路由都會(huì)緩存在 routes.php 文件中。

下次需要路由時(shí),將訪問緩存而不是路由文件。這可以通過快速路由請求來提高站點(diǎn)性能。

要清除緩存,可以使用類似的命令:

php artisan route:clear

路由緩存是一種可以讓你的網(wǎng)站更流暢、加載更快的簡單方法。

2. 有效的使用 Artisan 命令

Laravel 最好的特性之一是它的命令行工具 Artisan 。如果有效地使用它,可以提高應(yīng)用程序的性能。

你可以緩存路由和配置。你可以執(zhí)行下面的命令來緩存配置和路由:

php artisan config:cache

php artisan route:cache

Note: Artisan Optimize 在 Laravel 5.5 中被移除,在之前的版本中可以工作。

php artisan optimize --force

在添加新配置或新路由時(shí),一定要記得清除緩存??梢允褂孟旅娴拿钣行У厍宄彺妗?/p>

php artisan config:clear
php artisan route:cache
php artisan view:clear

3. 配置緩存

Laravel 提供了一個(gè)非常有趣的命令:Artisan Cache Config,它對提升性能非常有幫助。命令的基本用法是:

php artisan config:cache

緩存配置后,不會(huì)對你所做的更改產(chǎn)生任何影響。 如果你想刷新配置,只需再次運(yùn)行上述命令。如果需要清除配置緩存,請使用以下命令:

php artisan config:clear

4. 直接獲取數(shù)據(jù)

當(dāng)你在 Laravel 中執(zhí)行任何查詢時(shí),Laravel會(huì)延遲執(zhí)行該查詢(懶加載),它僅在需要時(shí)獲取數(shù)據(jù)。

在某些情況下,這種延遲加載行為會(huì)增加執(zhí)行的查詢數(shù),同時(shí)會(huì)降低應(yīng)用程序的性能。

讓我們看一個(gè)簡單的例子來詳細(xì)了解這種行為。 如果你想獲取圖書館中書籍的作者姓名。

使用延遲加載,你最終將執(zhí)行 N+1 個(gè)查詢來查找結(jié)果。 你可以從下面的代碼示例中看到它。

$books = Book::all();foreach ($books as $book) {
  echo $book->author->name;}

在下面的代碼中,每次執(zhí)行 for 循環(huán)時(shí),都會(huì)執(zhí)行查詢。 為了解決這個(gè)問題,Laravel 允許你直接加載數(shù)據(jù)。

這會(huì)增加你的查詢執(zhí)行時(shí)間并減少查詢數(shù)量。 下面的代碼示例展示了我們?nèi)绾卧谝粋€(gè)查詢中輕松加載完整列表。

$books = Book::with('author')->get();foreach ($books as $book) {
  echo $book->author->name;}

讓我們看一個(gè)簡單的例子來詳細(xì)了解這種行為。
如果想獲取圖書館中書籍的作者姓名。

如果不使用預(yù)先加載,最終將執(zhí)行 N+1 個(gè)查詢來查找結(jié)果。
你可以從下面的代碼示例中看到它。

$books = Book::all();foreach ($books as $book) {
  echo $book->author->name;}

在下面的代碼中,每次執(zhí)行 for 循環(huán)時(shí),都會(huì)執(zhí)行一次查詢。
為了解決這個(gè)問題,Laravel 允許預(yù)先加載關(guān)聯(lián)數(shù)據(jù)。

這會(huì)增加的查詢執(zhí)行時(shí)間并減少查詢次數(shù)。
下面的代碼示例展示了我們?nèi)绾卧谝粋€(gè)查詢中輕松加載完整列表。

$books = Book::with('author')->get();foreach ($books as $book) {
  echo $book->author->name;}

5.  Composer 優(yōu)化

Laravel 使用一個(gè)名為 Composer 的包管理工具來管理不同的依賴項(xiàng)。 當(dāng)你最初安裝 Composer 時(shí),默認(rèn)情況下它會(huì)將開發(fā)依賴項(xiàng)加載到你的系統(tǒng)中。

這些依賴項(xiàng)對于開發(fā)網(wǎng)站很有用。 但是,一旦你的網(wǎng)站完全投入運(yùn)營,就不再需要它們,事實(shí)上,它們只會(huì)減慢速度。

當(dāng)使用 Composer 安裝包時(shí),使用 --no-dev-o 參數(shù)來移除 dev 依賴:

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

此命令允許 Composer 創(chuàng)建用于優(yōu)化自動(dòng)加載器和提高性能的目錄。 它只是請求獲取和打包官方發(fā)行版,沒有開發(fā)依賴項(xiàng)。

注意不要消除任何運(yùn)行時(shí)依賴項(xiàng)。 這可能會(huì)危及網(wǎng)站的性能,甚至導(dǎo)致其崩潰。

6. 壓縮綁定配置

Laravel mix 可以在這里為你提供幫助,它編譯所有 CSS 并提供單個(gè) app.css 文件,從而將多個(gè) HTTP 請求減少為單個(gè)。 你還可以使用 laravel-mix-purgecss 包從項(xiàng)目中刪除未使用的 CSS,只需將其安裝在你的開發(fā)項(xiàng)目中:

npm install laravel-mix-purgecss --save-dev

# or

yarn add laravel-mix-purgecss --dev

在你的文件 webpack.mix.js

const mix = require('laravel-mix');require('laravel-mix-purgecss');mix.js('resources/js/app.js', 'public/js').sass('resources/sass/app.scss', 'public/css').purgeCss();

7. 隊(duì)列

Laravel 隊(duì)列就像你的 CPU 一樣工作。 每當(dāng)你的計(jì)算機(jī)處理一項(xiàng)任務(wù)時(shí),它都會(huì)以最有效的方式執(zhí)行,而不會(huì)降低用戶體驗(yàn)的質(zhì)量。 這意味著當(dāng)你渲染文件或執(zhí)行資源密集型操作時(shí),你的 CPU 會(huì)確保你仍有剩余的處理能力用于其他任務(wù),直到達(dá)到其限制。

例如,當(dāng)用戶注冊到網(wǎng)站時(shí),我們必須在后端執(zhí)行許多操作,例如存儲(chǔ)用戶信息、發(fā)送激活郵件、發(fā)送歡迎郵件等。如果我們只是發(fā)送一封郵件(沒有隊(duì)列),那么它會(huì)大約需要 4-5 秒。并且用戶必須等到請求。因此,對于隊(duì)列,我們只需要在執(zhí)行所需的驗(yàn)證并顯示用戶成功消息后將操作推送到隊(duì)列中。之后,我們只需要在隊(duì)列執(zhí)行時(shí)處理基本的事務(wù)。

簡單的例子是:

  • 發(fā)送電子郵件

  • 下載文件

  • 上傳文件

這些任務(wù)不需要用戶看到,可以作為后臺(tái)進(jìn)程完成。

Laravel 還有幾個(gè)隊(duì)列驅(qū)動(dòng)程序支持文檔,并為每個(gè)文檔提供獨(dú)特的解決方案,例如 Horizon,一個(gè)監(jiān)控隊(duì)列系統(tǒng)的儀表板。

8. 快速緩存或會(huì)話驅(qū)動(dòng)程序

為了提高 Laravel 應(yīng)用程序的性能,我們可以存儲(chǔ)會(huì)話并將它們緩存在 RAM 中。 Memcached 是最好和最快的緩存和會(huì)話驅(qū)動(dòng)程序。 Laravel 可以靈活地將一個(gè)緩存/會(huì)話驅(qū)動(dòng)器切換到另一個(gè)。

對于會(huì)話驅(qū)動(dòng),我們可以在 config/session.php 中更改驅(qū)動(dòng)鍵,對于緩存,我們可以在 config/cache.php 文件中更改驅(qū)動(dòng)鍵。

9. 數(shù)據(jù)庫索引

當(dāng)我們談?wù)撎岣邞?yīng)用程序的性能時(shí),我們會(huì)遵循 Laravel 中的許多實(shí)踐,例如緩存、數(shù)據(jù)加載、資產(chǎn)縮小等。但是還有一件事可以幫助我們提高性能,即數(shù)據(jù)庫索引。 這基本上是一種數(shù)據(jù)庫級(jí)技術(shù)。

在技術(shù)實(shí)現(xiàn)的角度看,數(shù)據(jù)庫索引是基于數(shù)據(jù)庫表的一個(gè)或多個(gè)列的數(shù)據(jù)結(jié)構(gòu)。索引背后的主要思想是加快數(shù)據(jù)檢索。它有助于輕松定位數(shù)據(jù),而無需在每次訪問數(shù)據(jù)庫時(shí)遍歷每一行。

使用列,索引有助于最小化處理的每個(gè)查詢的磁盤訪問。使數(shù)據(jù)庫索引成為一種強(qiáng)大的數(shù)據(jù)庫優(yōu)化技術(shù)還可以提高數(shù)據(jù)庫的整體性能。

在 Laravel 中,我們可以使用遷移來創(chuàng)建索引。下面是示例:

Schema::create(‘users’, function (Blueprint $table) {
   $table->string(’email’)->index();});

10. 利用 JIT 編譯器

PHP 是一種計(jì)算機(jī)機(jī)器和服務(wù)器端語言。它本身不理解 PHP 代碼。通常,程序員使用編譯器將代碼編譯成字節(jié)碼并解釋 PHP 代碼。程序編譯過程會(huì)影響 Laravel 應(yīng)用程序的性能和用戶體驗(yàn)。所以,Laravel 程序員可以使用 Zend Engine 自帶的即時(shí)編譯器來快速編譯代碼。

11. 壓縮圖像

如果你的項(xiàng)目中包含許多圖像,你應(yīng)該壓縮所有圖像以優(yōu)化性能。
有一些方法可以進(jìn)行優(yōu)化。
但是不同的圖像需要不同的工具來保持圖像的質(zhì)量和分辨率。

如果你使用 Laravel Mix,建議在編譯圖像時(shí)使用像 ImageMin 這樣的 NPM 包。
對于非常大的圖片,先試試 TinyPNG 壓縮圖片,然后再用 ImageMin 盡量壓縮。

12. 視圖緩存

另一個(gè)方面是視圖緩存。
視圖緩存存儲(chǔ)編譯后的的 Blade 模板以提高項(xiàng)目的速度。
你可以使用下面的 artisan 命令手動(dòng)編譯所有視圖并優(yōu)化性能:

php artisan view:cache

上傳新代碼時(shí)記得清除緩存;否則,Laravel 將使用你的舊視圖,你將花費(fèi)大量時(shí)間嘗試解決此問題。運(yùn)行以下命令清除視圖緩存:

php artisan view:clear

13. 刪除未使用的服務(wù)

你可以使用 Laravel 提供的服務(wù)容器框架輕松地注入服務(wù)。你只需在 config/app.php 文件中的 providers[] 數(shù)組中添加服務(wù)的名稱。

但同時(shí),你應(yīng)該只打開你正在使用的那些服務(wù)。應(yīng)停止所有其他未使用的服務(wù)。

你可以通過在 config/app.php 文件中注釋掉這些服務(wù)來停止這些服務(wù)。這將減少你的應(yīng)用程序啟動(dòng)所需的時(shí)間并提高其性能

14. 使用 CDN 加載靜態(tài)內(nèi)容

CDN 是在全球范圍內(nèi)加載靜態(tài)內(nèi)容的好方法。如果你的應(yīng)用程序越來越流行,你可能需要為你的應(yīng)用程序使用 CDN 服務(wù)

讓我舉一個(gè)簡單的例子,你在美國的服務(wù)器上托管了你的應(yīng)用程序?,F(xiàn)在,如果你有來自印度的請求,你需要很長時(shí)間才能為該請求提供內(nèi)容。

為了解決這個(gè)問題,CDN 應(yīng)運(yùn)而生。 CDN 可以幫你緩存多個(gè)靜態(tài)頁面?,F(xiàn)在你的請求將首先到達(dá) CDN,如果內(nèi)容存在于 CDN 中,則直接提供頁面。這極大地提高了你的內(nèi)容服務(wù)速度以及最終用戶體驗(yàn)。

15. 壓縮 CSS 和 JS

在生產(chǎn)環(huán)境中實(shí)際捆綁這些文件之前,你應(yīng)該始終壓縮 CSS 和 JavaScript 文件。 這將增強(qiáng)你的用戶體驗(yàn)并減少 HTTP 調(diào)用。 這是一個(gè)很棒的 Laravel 性能優(yōu)化技巧。

有多種工具可用于壓縮這些文件并將它們捆綁為單個(gè)文件。 你可以使用 Laravel-packer,它允許你打包和壓縮你的 CSS 和 JavaScript 代碼。 如果需要,你還可以調(diào)整圖像大小以生成縮略圖。

16. 移除開發(fā)依賴

首次安裝 Laravel 或 composer 時(shí),通常會(huì)默認(rèn)將開發(fā)依賴項(xiàng)注入到你的系統(tǒng)中。 雖然這些依賴項(xiàng)確實(shí)有助于構(gòu)建你的網(wǎng)站,但當(dāng)你的網(wǎng)站啟動(dòng)并運(yùn)行時(shí),你不需要這些依賴項(xiàng)。

你可以通過 Artisan 輸入這個(gè)簡單的命令來刪除這些依賴項(xiàng):

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

注意: 開發(fā)依賴項(xiàng)不同于運(yùn)行時(shí)所需的依賴項(xiàng)。 不要?jiǎng)h除運(yùn)行時(shí)依賴項(xiàng),因?yàn)檫@可能會(huì)影響你網(wǎng)站的性能,甚至?xí)?dǎo)致你網(wǎng)站的某些部分崩潰。

17. 將Lumen用于小型項(xiàng)目

有時(shí)開發(fā)小型應(yīng)用程序(例如移動(dòng)或 Angular 應(yīng)用程序)不需要使用像 Laravel 這樣的全棧框架。 在這種情況下,請考慮改用 Lumen。

Lumen 是由 Laravel 的同一創(chuàng)建者開發(fā)的微框架。 就像 Laravel 的輕量級(jí)版本一樣,Lumen 是關(guān)于微服務(wù)的速度和性能的。 在構(gòu)建 Web 應(yīng)用程序時(shí),它需要最少的設(shè)置和替代路由參數(shù),從而加快開發(fā)過程。

例如,Lumen 每秒可以處理 100 個(gè)請求。 你還可以集成來自第三方的工具或軟件包以獲得新功能。 此外,Lumen 支持所有平臺(tái)并允許你升級(jí)到 Laravel。

18. 限制包含的庫

Laravel 讓你可以自由添加任意數(shù)量的庫。 雖然這是一個(gè)很棒的功能,但添加大量庫會(huì)給應(yīng)用程序的性能帶來很大壓力。 它還會(huì)影響整個(gè)用戶體驗(yàn)。

因此,掃描代碼中當(dāng)前使用的所有庫數(shù)據(jù)至關(guān)重要。 你可以在 config/app.php 文件中找到這些庫。 在檢查庫時(shí),刪除你知道對你不再有用的庫。

查看 composer.json 中不需要的依賴項(xiàng)也是一個(gè)好辦法。

感謝各位的閱讀,以上就是“Laravel如何優(yōu)化性能”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Laravel如何優(yōu)化性能這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI