目錄
快取設定檔
路由緩存
類別映射載入最佳化
優化composer 的自動載入
JIT 編譯器(即時編譯器)
使用更快的缓存和会话驱动
不要低估通过优化查询语句带来的查询速度的提升
缓存查询结果
首頁 php框架 Laravel 提高Laravel應用效能

提高Laravel應用效能

Jun 21, 2019 pm 04:31 PM
laravel 應用效能

提高Laravel應用效能

使用Laravel做開發是高效率且愉悅的體驗。
通常,當你準備部署應用程式的時候,你可能會意識到應用程式也許會在真實環境下表現不佳。

要明白的是,沒有銀彈。透過努力去對應用程式的每個細節完成所有的優化,速度可能會變慢,但使用下面這些技巧會讓你感到恰到好處。

快取設定檔

laravel 的設定項分佈在數十個設定檔中,在每次的請求中都將每個檔案including 進來很消耗效能。為了將所有的設定檔合併為一個,可以使用:

php artisan config:cache
登入後複製

記住修改了設定檔後不會影響現有的設定檔快取。為了刷新緩存,可以再次上述的命令。如果你想完全清除緩存,執行:

php artisan config:clear
登入後複製

路由緩存

在laravel中,路由也需要昂貴的開銷。用以下命令快取 routes.php 檔案:

php artisan route:cache
登入後複製

請注意,它不適用於閉包。如果你正在使用閉包,這是一個很好的機會將它們移動到控制器中,因為 artisan 命令在嘗試編譯綁定到閉包的路徑而不是正確的控制器方法時會拋出異常。
與配置快取相同,對 routes.php 的任何變更都不會有任何影響。若要刷新快取,請在每次更改路徑檔案時執行上面的命令。要完全清理乾淨路由緩存,請執行以下命令:

php artisan route:clear
登入後複製

類別映射載入最佳化

#在一個中型專案中,存在數百個PHP 來源檔案是很正常的事情,由於良好的程式設計習慣,我們會把程式碼做一些分離,每個php 檔案都有自己的責任。當然,這並非沒有缺點,Laravel 必須為每一次請求都載入這數百個文件,這是一件很消耗效能的事情。

因此,一個比較好的方法是聲明哪些檔案是使用者每個要求(如:服務提供者,中間件等)都需要載入的,然後將這些需要每次載入的檔案寫入在同一個檔案中,減少include 檔案的數量。

這類似於 javascript 將檔案合併為一個沒有差異 (webpack, gulp),會減少遊覽器會伺服器的請求。

如果需要新增其他的來源文件,可以在 config / compile.php 的files key中宣告。

當你把需要為每個請求都加載的檔案設定好之後,它們就會寫入同一個檔案中,減少載入檔案的效能消耗

php artisan optimize --force
登入後複製

優化composer 的自動載入

這不僅適用於laravel,也適用於任何使用composer 的應用程式。

我將首先解釋 PSR-4 自動載入器的工作原理,然後向您展示應該執行什麼命令來最佳化它。如果您對了解 composer 如何運作不感興趣,我建議您直接跳到關於控制台命令的段落處。

當您向 compsoser 要求 App\Controllers\AuthController 類別時,它會先在類別映射中搜尋直接關聯。 classmap 是一個由類別和檔案組成的 1 到 1 關聯的陣列。當然,由於您沒有手動將 Login 類別及其相關檔案新增至類別對應中,因此composer 將繼續在命名空間中搜尋。

因為App 是一個PSR-4 命名空間,預設是與Laravel 一起提供的,並且與app/ 資料夾相關聯,所以composer 將嘗試使用基本的字串操作過程將PSR-4 類別名轉換為檔案名稱。最後,它猜測App\Controllers\AuthController 必須位於AuthController.php 檔案中,它位於Controllers/ 資料夾中,剛好的是,該資料夾正好位於名稱空間資料夾中,即app/

所有這些艱苦的工作只是為了得到 App\Controllers\AuthController 類別存在於 app/Controllers/AuthController.php 檔案中。為了讓composer 掃描整個應用程式並建立類別和檔案的直接1 對1 關聯,請執行以下命令:

composer dumpautoload -o
登入後複製

請記住,如果您已經執行了php artisan optimize --force,那麼您就不必再執行這個函數了。因為優化命令已經告訴 composer 創建一個優化的自動載入器。

JIT 編譯器(即時編譯器)

PHP 並不是天然就被電腦理解的。你不能把它編譯為字節碼然後讓電腦運作。 PHP 必須要經過一個中介,像是 Zend 引擎,它會解釋 PHP 檔案並執行對應的 C 例程。如你所想,它的速度很慢。每次你的伺服器執行一個 PHP 文件,都必須把它轉換成 tokens —— 這個過程由 AST 解析器完成並解釋。不幸的是,解析器必須每次都編譯 PHP 文件,即使它每次都得到相同的結果。

為了讓你的應用程式速度更快,你需要一個 編譯一次,終生執行 的方法,而這就是一個 JIT 編譯器所做的事情。

对于 Laravel 所推荐使用的 JIT 编译器是 HHVM,由 Facebook 创立并广泛使用。Wikipedia、Etsy 和其他上千项目也在使用它。

使用更快的缓存和会话驱动

将 session 保存在文件中是种足够快速而又优雅的方法,自 PHP 开始的时代就在这样做了。但是如果你追求性能,那么文件系统就是你需要注意的一件事,因为它很慢。一种更好的做法是将 cache 和 session 存储在内存中,因为它提供了一种高效读写数据的方式。幸运的是,laravel 支持一些基于内存的 cache 和 session 驱动。

我的建议是使用 memcached 作为 cache 和 session 的驱动,但你可以选择任何你喜欢的,只要它是基于内存工作的。

要更改 session 驱动,需要检查以下文件中「driver」项:

app/config/session.php
登入後複製

要更改 cache 驱动,需要检查以下文件中「driver」项:

app/config/cache.php
登入後複製

不要低估通过优化查询语句带来的查询速度的提升

就像你看到的,大部分优化都是在不同的层面使用缓存。但当面临数据库优化时,你不应该依赖缓存。缓存应是优化查询的最后手段。

缓存查询结果

MySQL 不会替你做这件事,也不如你自己做的好。当然了你肯定不会把应用中每个查询的结果都做缓存,看看数据统计,在应用程序中那些高频率的查询语句,它们真的有必要被频繁地执行?每 15 分钟运行一次然后把相同的结果提供给用户
不是更好吗?

在查询构造器中移除了 removing方法是件好事(它曾经是个很好的功能,但不够好 - 人们似乎高估了它的作用)。然后你可以更多地使用 Cache::remember 方法,就像这样:

$posts = Cache::remember('index.posts', 30, function()
{
    return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});
登入後複製

更多Laravel相关技术文章,请访问Laravel教程栏目进行学习!

以上是提高Laravel應用效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1272
29
C# 教程
1252
24
laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 Apr 18, 2025 am 09:24 AM

在使用CraftCMS開發網站時,常常會遇到資源文件緩存的問題,特別是當你頻繁更新CSS和JavaScript文件時,舊版本的文件可能仍然被瀏覽器緩存,導致用戶無法及時看到最新的更改。這個問題不僅影響用戶體驗,還會增加開發和調試的難度。最近,我在項目中遇到了類似的困擾,經過一番探索,我找到了wiejeben/craft-laravel-mix這個插件,它完美地解決了我的緩存問題。

Laravel如何學習 怎麼免費學習Laravel Laravel如何學習 怎麼免費學習Laravel Apr 18, 2025 pm 12:51 PM

想要學習 Laravel 框架,但苦於沒有資源或經濟壓力?本文為你提供了免費學習 Laravel 的途徑,教你如何利用網絡平台、文檔和社區論壇等資源,從入門到掌握,為你的 PHP 開發之旅奠定堅實基礎。

laravel用戶登錄功能 laravel用戶登錄功能 Apr 18, 2025 pm 12:48 PM

Laravel 提供了一個全面的 Auth 框架,用於實現用戶登錄功能,包括:定義用戶模型(Eloquent 模型)創建登錄表單(Blade 模板引擎)編寫登錄控制器(繼承 Auth\LoginController)驗證登錄請求(Auth::attempt)登錄成功後重定向(redirect)考慮安全因素:哈希密碼、防 CSRF 保護、速率限制和安全標頭。此外,Auth 框架還提供重置密碼、註冊和驗證電子郵件等功能。詳情請參閱 Laravel 文檔:https://laravel.com/doc

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

laravel有哪些版本 laravel新手版本選擇方法 laravel有哪些版本 laravel新手版本選擇方法 Apr 18, 2025 pm 01:03 PM

在面向初学者的 Laravel 框架版本选择指南中,本文深入探討了 Laravel 的版本差異,旨在協助初學者在眾多版本之間做出明智的選擇。我們將重點介紹每個版本的關鍵特徵、比較它們的優缺點,並提供有用的建議,幫助新手根據他們的技能水準和項目需求挑選最合適的 Laravel 版本。對於初學者來說,選擇一個合適的 Laravel 版本至關重要,因為它可以顯著影響他們的學習曲線和整體開發體驗。

laravel怎麼查看版本號 laravel查看版本號方法 laravel怎麼查看版本號 laravel查看版本號方法 Apr 18, 2025 pm 01:00 PM

Laravel框架內置了多種方法來方便地查看其版本號,滿足開發者的不同需求。本文將探討這些方法,包括使用Composer命令行工具、訪問.env文件或通過PHP代碼獲取版本信息。這些方法對於維護和管理Laravel應用程序的版本控制至關重要。

laravel和thinkphp的區別 laravel和thinkphp的區別 Apr 18, 2025 pm 01:09 PM

Laravel 和 ThinkPHP 都是流行的 PHP 框架,在開發中各有優缺點。本文將深入比較這兩者,重點介紹它們的架構、特性和性能差異,以幫助開發者根據其特定項目需求做出明智的選擇。

See all articles