亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    淺析Laravel 中怎么找到最慢的查詢

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

    淺析Laravel 中怎么找到最慢的查詢

    Laravel 9 保姆級(jí)視頻教程,想學(xué)不會(huì)都難!進(jìn)入學(xué)習(xí)

    當(dāng)然,您的網(wǎng)站速度慢的原因有很多,但最常見的原因之一是數(shù)據(jù)庫查詢速度慢。

    但是在 laravel 中,我們(大多數(shù)時(shí)候)不使用 SQL 從數(shù)據(jù)庫中獲取數(shù)據(jù),我們使用 Eloquent ORM 和 查詢構(gòu)建器 ,這有時(shí)會(huì)導(dǎo)致很難查明造成我們網(wǎng)站如此緩慢的查詢。

    DB::listen()

    幸運(yùn)的是,在 laravel 中,我們可以定義一個(gè)在每次執(zhí)行查詢時(shí)調(diào)用的回調(diào)(參見 此處)。為此,請(qǐng)將以下代碼添加到任何服務(wù)提供者(例如 AppServiceProvider):

    public function boot() {     DB::listen(function ($query) {     // TODO: make this useful     }); }

    如您所見,我們接收了一個(gè)變量 $query,這個(gè)變量是 QueryExecuted 類的一個(gè)實(shí)例。這意味著我們可以訪問有關(guān)已執(zhí)行查詢的一些信息:

     DB::listen(function ($query) {      $query->sql; // 執(zhí)行的 sql 字符串      $query->bindings; // 傳遞給sql查詢的參數(shù)(這將替換sql字符串中的 "?")      $query->time; // 執(zhí)行查詢所用的時(shí)間;  });

    這是非常有用的信息,現(xiàn)在我們可以通過查看 $query->time 屬性來識(shí)別慢查詢。 但這并沒有告訴我們?cè)谖覀兊拇a中查詢執(zhí)行的位置

    我怎么知道查詢是在哪里執(zhí)行的?

    即使該 $query 變量沒有給我們?nèi)魏侮P(guān)于其來源的信息, 我們?nèi)匀豢梢允褂?PHP 內(nèi)置函數(shù) debug_backtrace() 獲取該信息。

    DB::listen(function ($query) {     dd(debug_backtrace()); });

    如果你在你的項(xiàng)目上運(yùn)行它,你會(huì)在瀏覽器上看到類似這樣的東西:

    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 [▶]   ]   ....

    這是一個(gè)數(shù)組,其中包含請(qǐng)求中到目前為止的每個(gè)函數(shù)調(diào)用。我將只關(guān)注每個(gè)數(shù)組中的 fileline 鍵。

    如果你仔細(xì)看,你會(huì)發(fā)現(xiàn)在我的例子中有 63 個(gè)函數(shù)調(diào)用,這是一個(gè)簡單的應(yīng)用程序,如果在更復(fù)雜的應(yīng)用程序中,可能會(huì)

    贊(1)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)