php debugbar,Laravel 调试工具 laravel-debugbar使用介绍
Debugbar 在 Laravel 5 中集成了 PHP Debug Bar ,用于顯示調試及錯誤信息以方便開發工具,就像php的高度式具一樣了,我們下面來看Laravel 調試工具 laravel-debugbar使用.
給 Laravel 項目安裝了 debugbar 調試工具,在 debug 模式下打開頁面底部會出現一個工具條,點開可以查看各項性能統計,最重要的是打印頁面執行的 sql 語句和調試內容。下面利用 debugbar 工具找到一個 sql 查詢的優化點。
優化頁面 sql 查詢
這里有兩個模型,目的地模型和游記模型,他們是一對多的關系,在目的地模型 Destination.php 的 Model 中關系定義如下:
PHP
/**
* 定義目的地-游記的一對多關系
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function travel()
{
return $this->hasMany(Travel::class, 'destination_id');
}
為了統計每個目的地下有多少篇游記,用到了 Laravel 模型很好用的一個特性 appends,定義 appends 數組就是自定義了表字段:
PHP
/**
* 自定義字段
* @var array
*/
protected $appends = [
'url',
'first_travel_url',
'total',
];
這里 total 指的就是目的地下一共有多少篇游記,優化前的代碼是這樣的:
/**
* 目的地游記數
* @return mixed
*/
public function getTotalAttribute()
{
return $this->travel()->count();
}
這樣就導致遍歷目的地查詢游記的總數,增加 sql 語句頻次。這本來是個很好的特性,但是如果要額外查詢數據庫可能會增加查詢開銷。debugbar 工具在頁面上打印了該頁面執行的所有 sql 語句,如圖:
顯然這里需要進行優化,需要用 group by 目的地的方式統計,只需要一條 sql 語句就可以了。
Laravel 中使用
用 group by 進行統計
在游記模型 Travel.php 的 Model 中增加一個方法:
/**
* 獲取每個目的地的游記總數
* @return array
*/
public function getTravelNumsGroupByDestination()
{
$travelNums = [];
$result = $this->groupBy('destination_id')->get(['destination_id', DB::raw('count(*) as total')]);
foreach ($result as $item) {
$travelNums[$item->destination_id] = $item->total;
}
return $travelNums;
}
這里 $result 返回的是一個 Collection 對象,里面是 Travel 類的集合,實際上執行的 sql 語句是:select destination_id, count(*) as total from travel group by destination_id
group-by-select-count
在頁面控制器 TravelController.php 的 index 方法中調用這個方法,然后賦值給模板即可。
PHP
/**
* 游記首頁
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function index()
{
$data = Cache::remember('travel.index', self::CACHE_TIME, function () {
$destinationList = $this->destination->getList(12);
$travelList = $this->travel->latest('begin_date')->take(12)->get();
$travelNums = $this->travel->getTravelNumsGroupByDestination();
return [
'destinationList' => $destinationList,
'travelList' => $travelList,
'travelNums' => $travelNums
];
});
return view('travel.index', $data);
}
這里把數據庫的相關查詢結果進行了緩存,只有在緩存過期會查詢數據庫。
在模板中做出相應的修改后,就完成了這個 sql 的性能優化,如果查詢多的話這可以減少大量的 sql 查詢。
優化后頁面執行 sql 的情況:
通過 debugbar 工具可以很好的掌握各項性能,不僅如此,他是個很好的調試工具,我們可以通過打印 log 的方式調試代碼,也可以用 debugbar 提供的調試方法打印內容,很方便,使用 Laravel 開發必備的調試工具。
總結
以上是生活随笔為你收集整理的php debugbar,Laravel 调试工具 laravel-debugbar使用介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 客快物流大数据项目(二十):物流管理系统
- 下一篇: 教你凭单号查询跟踪包裹物流