Laravel性能優(yōu)化的技巧有哪些

本篇內(nèi)容介紹了“Laravel性能優(yōu)化的技巧有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了敖漢免費(fèi)建站歡迎大家使用!

1. 路由緩存

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

php artisan route:cache

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

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

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

php artisan route:clear

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

2. 有效的使用 Artisan 命令

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

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

php artisan config:cache

php artisan route:cache

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

php artisan optimize --force

在添加新配置或新路由時(shí),一定要記得清除緩存。可以使用下面的命令有效地清除緩存。

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

3. 配置緩存

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

php artisan config:cache

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

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è)簡(jiǎn)單的例子來(lái)詳細(xì)了解這種行為。 如果你想獲取圖書館中書籍的作者姓名。

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

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

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

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

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

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

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

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

在下面的代碼中,每次執(zhí)行 for 循環(huán)時(shí),都會(huì)執(zhí)行一次查詢。
為了解決這個(gè)問(wèn)題,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 的包管理工具來(lái)管理不同的依賴項(xiàng)。 當(dāng)你最初安裝 Composer 時(shí),默認(rèn)情況下它會(huì)將開發(fā)依賴項(xiàng)加載到你的系統(tǒng)中。

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

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

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

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

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

6. 壓縮綁定配置

Laravel mix 可以在這里為你提供幫助,它編譯所有 CSS 并提供單個(gè) app.css 文件,從而將多個(gè) HTTP 請(qǐng)求減少為單個(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)用戶注冊(cè)到網(wǎng)站時(shí),我們必須在后端執(zhí)行許多操作,例如存儲(chǔ)用戶信息、發(fā)送激活郵件、發(fā)送歡迎郵件等。如果我們只是發(fā)送一封郵件(沒有隊(duì)列),那么它會(huì)大約需要 4-5 秒。并且用戶必須等到請(qǐng)求。因此,對(duì)于隊(duì)列,我們只需要在執(zhí)行所需的驗(yàn)證并顯示用戶成功消息后將操作推送到隊(duì)列中。之后,我們只需要在隊(duì)列執(zhí)行時(shí)處理基本的事務(wù)。

簡(jiǎn)單的例子是:

  • 發(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è)。

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

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

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

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

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

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

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

10. 利用 JIT 編譯器

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

11. 壓縮圖像

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

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

12. 視圖緩存

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

php artisan view:cache

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

php artisan view:clear

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

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

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

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

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

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

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

為了解決這個(gè)問(wèn)題,CDN 應(yīng)運(yùn)而生。 CDN 可以幫你緩存多個(gè)靜態(tài)頁(yè)面。現(xiàn)在你的請(qǐng)求將首先到達(dá) CDN,如果內(nèi)容存在于 CDN 中,則直接提供頁(yè)面。這極大地提高了你的內(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)。

你可以通過(guò) Artisan 輸入這個(gè)簡(jiǎn)單的命令來(lái)刪除這些依賴項(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 這樣的全??蚣?。 在這種情況下,請(qǐng)考慮改用 Lumen。

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

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

18. 限制包含的庫(kù)

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

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

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

“Laravel性能優(yōu)化的技巧有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

本文題目:Laravel性能優(yōu)化的技巧有哪些
文章路徑:http://www.muchs.cn/article28/geesjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)軟件開發(fā)、企業(yè)建站建站公司、ChatGPT、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)