提高Laravel應(yīng)用性能的方法-創(chuàng)新互聯(lián)

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

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的阜平網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

使用Laravel做開(kāi)發(fā)是高效而愉悅的體驗(yàn)。
通常,當(dāng)你準(zhǔn)備部署應(yīng)用的時(shí)候,你可能會(huì)意識(shí)到應(yīng)用也許會(huì)在真實(shí)環(huán)境下表現(xiàn)不佳。

需要明白的是,沒(méi)有銀彈。通過(guò)努力去對(duì)應(yīng)用的每個(gè)細(xì)節(jié)完成所有的優(yōu)化,速度可能會(huì)變慢,但使用下面這些技巧會(huì)讓你感到恰到好處。

緩存配置文件


laravel 的配置項(xiàng)分布在數(shù)十個(gè)配置文件中,在每次的請(qǐng)求中都將每個(gè)文件 including 進(jìn)來(lái)很消耗性能。為了將所有的配置文件都合并為一個(gè),可以使用:

php artisan config:cache

記住修改了配置文件后不會(huì)影響已有的配置文件緩存。為了刷新緩存,可以再次上述的命令。如果你想完全清除緩存,執(zhí)行:

php artisan config:clear

路由緩存


在laravel中,路由也需要昂貴的開(kāi)銷(xiāo)。用以下命令緩存 routes.php 文件:

php artisan route:cache

請(qǐng)注意,它不適用于閉包。 如果你正在使用閉包,這是一個(gè)很好的機(jī)會(huì)將它們移動(dòng)到控制器中,因?yàn)?artisan 命令在嘗試編譯綁定到閉包的路徑而不是正確的控制器方法時(shí)會(huì)拋出異常。
與配置緩存相同,對(duì) routes.php 的任何更改都不會(huì)有任何影響。 要刷新緩存,請(qǐng)?jiān)诿看胃穆窂轿募r(shí)運(yùn)行上面的命令。 要完全清理干凈路由緩存,請(qǐng)運(yùn)行以下命令:

php artisan route:clear

類(lèi)映射加載優(yōu)化


在一個(gè)中型項(xiàng)目中,存在數(shù)百個(gè) PHP 源文件是很正常的事情,由于良好的編程習(xí)慣,我們會(huì)把代碼做一些分離,每一個(gè) php 文件都有自己的職責(zé)。當(dāng)然,這并非沒(méi)有缺點(diǎn),Laravel 必須為每一次請(qǐng)求都加載這數(shù)百個(gè)文件,這是一件很消耗性能的事情。

因此,一個(gè)比較好的辦法是聲明哪些文件是用戶(hù)每一次請(qǐng)求(如:服務(wù)提供者,中間件等)都需要載入的 ,然后將這些需要每次加載的文件寫(xiě)入同一個(gè)文件中,減少 include 文件的數(shù)量。

這類(lèi)似于 javascript 將文件合并為一個(gè)沒(méi)有區(qū)別 (webpack, gulp),會(huì)減少游覽器會(huì)服務(wù)器的請(qǐng)求。

如果需要添加其他的源文件,可以在 config / compile.php 的files key中聲明。

當(dāng)你把需要為每個(gè)請(qǐng)求都加載的文件設(shè)置好之后,它們就會(huì)寫(xiě)入同一個(gè)文件中,減少加載文件的性能消耗

php artisan optimize --force

優(yōu)化 composer 的自動(dòng)加載


這不僅適用于 laravel,而且適用于任何使用 composer 的應(yīng)用程序。

我將首先解釋 PSR-4 自動(dòng)加載器的工作原理,然后向您展示應(yīng)該運(yùn)行什么命令來(lái)優(yōu)化它。如果您對(duì)了解 composer 如何工作不感興趣,我建議您直接跳到關(guān)于控制臺(tái)命令的段落處。

當(dāng)您向 compsoser 請(qǐng)求 App\Controllers\AuthController 類(lèi)時(shí),它首先在類(lèi)映射中搜索直接關(guān)聯(lián)。classmap 是一個(gè)由類(lèi)和文件組成的 1 到 1 關(guān)聯(lián)的數(shù)組。當(dāng)然,由于您沒(méi)有手動(dòng)將 Login 類(lèi)及其相關(guān)文件添加到類(lèi)映射中,composer 將繼續(xù)在命名空間中搜索。

因?yàn)?App 是一個(gè) PSR-4 命名空間,默認(rèn)情況下是與 Laravel 一起提供的,并且與 app/ 文件夾相關(guān)聯(lián),所以 composer 將嘗試使用基本的字符串操作過(guò)程將 PSR-4 類(lèi)名轉(zhuǎn)換為文件名。最后,它猜測(cè) App\Controllers\AuthController 必須位于 AuthController.php 文件中,它位于 Controllers/ 文件夾中,恰巧的是,該文件夾正好位于名稱(chēng)空間文件夾中,即 app/。

所有這些艱苦的工作只是為了得到 App\Controllers\AuthController 類(lèi)存在于 app/Controllers/AuthController.php 文件中。為了讓 composer 掃描整個(gè)應(yīng)用程序并創(chuàng)建類(lèi)和文件的直接 1 對(duì) 1 關(guān)聯(lián),運(yùn)行以下命令:

composer dumpautoload -o

請(qǐng)記住,如果您已經(jīng)運(yùn)行了 php artisan optimize --force,那么您就不必再運(yùn)行這個(gè)函數(shù)了。因?yàn)閮?yōu)化命令已經(jīng)告訴 composer 創(chuàng)建一個(gè)優(yōu)化的自動(dòng)加載器。

JIT 編譯器(即時(shí)編譯器)


PHP 并不是天然就被計(jì)算機(jī)理解的。你不能把它編譯為字節(jié)碼然后讓計(jì)算機(jī)運(yùn)行。PHP 必須要經(jīng)過(guò)一個(gè)中介,像是 Zend 引擎,它會(huì)解釋 PHP 文件并執(zhí)行相應(yīng)的 C 例程。如你所想,它的速度很慢。每次你的服務(wù)器執(zhí)行一個(gè) PHP 文件,都必須把它轉(zhuǎn)換成 tokens —— 這個(gè)過(guò)程由 AST 解析器完成并解釋。不幸的是,解析器必須每次都編譯 PHP 文件,即使它每次都得到相同的結(jié)果。

為了讓你的應(yīng)用速度更快,你需要一個(gè) 編譯一次,終生運(yùn)行 的方法,而這就是一個(gè) JIT 編譯器所做的事情。

對(duì)于 Laravel 所推薦使用的 JIT 編譯器是 HHVM,由 Facebook 創(chuàng)立并廣泛使用。Wikipedia、Etsy 和其他上千項(xiàng)目也在使用它。

使用更快的緩存和會(huì)話(huà)驅(qū)動(dòng)


將 session 保存在文件中是種足夠快速而又優(yōu)雅的方法,自 PHP 開(kāi)始的時(shí)代就在這樣做了。但是如果你追求性能,那么文件系統(tǒng)就是你需要注意的一件事,因?yàn)樗苈R环N更好的做法是將 cache 和 session 存儲(chǔ)在內(nèi)存中,因?yàn)樗峁┝艘环N高效讀寫(xiě)數(shù)據(jù)的方式。幸運(yùn)的是,laravel 支持一些基于內(nèi)存的 cache 和 session 驅(qū)動(dòng)。

我的建議是使用 memcached 作為 cache 和 session 的驅(qū)動(dòng),但你可以選擇任何你喜歡的,只要它是基于內(nèi)存工作的。

要更改 session 驅(qū)動(dòng),需要檢查以下文件中「driver」項(xiàng):

app/config/session.php

要更改 cache 驅(qū)動(dòng),需要檢查以下文件中「driver」項(xiàng):

app/config/cache.php

不要低估通過(guò)優(yōu)化查詢(xún)語(yǔ)句帶來(lái)的查詢(xún)速度的提升
就像你看到的,大部分優(yōu)化都是在不同的層面使用緩存。但當(dāng)面臨數(shù)據(jù)庫(kù)優(yōu)化時(shí),你不應(yīng)該依賴(lài)緩存。緩存應(yīng)是優(yōu)化查詢(xún)的最后手段。

緩存查詢(xún)結(jié)果


MySQL 不會(huì)替你做這件事,也不如你自己做的好。當(dāng)然了你肯定不會(huì)把應(yīng)用中每個(gè)查詢(xún)的結(jié)果都做緩存,看看數(shù)據(jù)統(tǒng)計(jì),在應(yīng)用程序中那些高頻率的查詢(xún)語(yǔ)句,它們真的有必要被頻繁地執(zhí)行?每 15 分鐘運(yùn)行一次然后把相同的結(jié)果提供給用戶(hù)不是更好嗎?

在查詢(xún)構(gòu)造器中移除了 removing方法是件好事(它曾經(jīng)是個(gè)很好的功能,但不夠好 - 人們似乎高估了它的作用)。然后你可以更多地使用 Cache::remember 方法,就像這樣:

$posts = Cache::remember('index.posts', 30, function()

{

return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();

});

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

當(dāng)前標(biāo)題:提高Laravel應(yīng)用性能的方法-創(chuàng)新互聯(lián)
本文鏈接:http://bm7419.com/article2/ddhsic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司品牌網(wǎng)站制作、微信小程序、全網(wǎng)營(yíng)銷(xiāo)推廣、搜索引擎優(yōu)化、App開(kāi)發(fā)

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)