你的網站慢嗎?加載需要很長時間嗎?用戶是否抱怨它幾乎 無法使用 ?您應該檢查您的數據庫查詢。我將向您展示一種輕松分析所有數據庫查詢的簡潔方法。

Laravel 9 保姆級視頻教程,想學不會都難!進入學習
當然,您的網站速度慢的原因有很多,但最常見的原因之一是數據庫查詢速度慢。
但是在 laravel 中,我們(大多數時候)不使用 SQL 從數據庫中獲取數據,我們使用 Eloquent ORM 和 查詢構建器 ,這有時會導致很難查明造成我們網站如此緩慢的查詢。
DB::listen()
幸運的是,在 laravel 中,我們可以定義一個在每次執行查詢時調用的回調(參見 此處)。為此,請將以下代碼添加到任何服務提供者(例如 AppServiceProvider):
public function boot() { DB::listen(function ($query) { // TODO: make this useful }); }
如您所見,我們接收了一個變量 $query,這個變量是 QueryExecuted 類的一個實例。這意味著我們可以訪問有關已執行查詢的一些信息:
DB::listen(function ($query) { $query->sql; // 執行的 sql 字符串 $query->bindings; // 傳遞給sql查詢的參數(這將替換sql字符串中的 "?") $query->time; // 執行查詢所用的時間; });
這是非常有用的信息,現在我們可以通過查看 $query->time 屬性來識別慢查詢。 但這并沒有告訴我們在我們的代碼中查詢執行的位置。
我怎么知道查詢是在哪里執行的?
即使該 $query 變量沒有給我們任何關于其來源的信息, 我們仍然可以使用 PHP 內置函數 debug_backtrace() 獲取該信息。
DB::listen(function ($query) { dd(debug_backtrace()); });
如果你在你的項目上運行它,你會在瀏覽器上看到類似這樣的東西:
array:63 [▼ 0 => array:7 [▼ "file"=>"/home/cosme/Documents/projects/cosme.dev/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php" "line" => 404 "function" => "AppProviders{closure}" "class" => "AppProvidersAppServiceProvider" "object" => AppProvidersAppServiceProvider {#140 ▶} "type" => "->" "args" => array:1 [▶] ] 1 => array:7 [▼ "file" => "/home/cosme/Documents/projects/cosme.dev/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php" "line" => 249 "function" => "IlluminateEvents{closure}" "class" => "IlluminateEventsDispatcher" "object" => IlluminateEventsDispatcher {#27 ▶} "type" => "->" "args" => array:2 [▶] ] 2 => array:7 [▼ "file" => "/home/cosme/Documents/projects/cosme.dev/vendor/laravel/framework/src/Illuminate/Database/Connection.php" "line" => 887 "function" => "dispatch" "class" => "IlluminateEventsDispatcher" "object" => IlluminateEventsDispatcher {#27 ▶} "type" => "->" "args" => array:1 [▶] ] ....
這是一個數組,其中包含請求中到目前為止的每個函數調用。我將只關注每個數組中的 file 和 line 鍵。
如果你仔細看,你會發現在我的例子中有 63 個函數調用,這是一個簡單的應用程序,如果在更復雜的應用程序中,可能會
站長資訊網