Series Laravel Debugbar Thực chiến #3: Tự định nghĩa Timeline & Messages – Đo lường độ trễ API (Trạm cuối)
1. Tab Messages: Công cụ Debug "Tàng hình"
Khi bạn muốn kiểm tra nhanh một biến mảng (Array) hay một JSON Payload dài ngoằng chuẩn bị gửi đi, lệnh dd($payload) (Dump and Die) sẽ lập tức giết chết luồng chạy của chương trình. Điều này cực kỳ bất tiện nếu bạn đang test một luồng thanh toán hoàn chỉnh.
Thay vào đó, hãy ném dữ liệu vào tab Messages của Debugbar:
use Barryvdh\Debugbar\Facades\Debugbar;
public function syncOrphanTransactions()
{
$payload = [
'batch_id' => 'BATCH_20260711_001',
'transactions' => [
// ... danh sách hàng trăm giao dịch mồ côi
]
];
// Thay vì dd(), hãy đẩy nó vào Debugbar
Debugbar::info($payload);
Debugbar::warning('Cảnh báo: Lô dữ liệu này có chứa giao dịch quá hạn 24h');
// Code vẫn tiếp tục chạy mượt mà, gửi API đi...
}
Bây giờ, chương trình của bạn vẫn chạy hết từ đầu đến cuối mà không bị gián đoạn. Khi màn hình render xong, bạn chỉ việc mở tab Messages dưới đáy màn hình để soi chi tiết từng biến $payload với giao diện cây thư mục rất dễ nhìn.
2. Tab Timeline: Đo lường chính xác từng Mili-giây
Đây là tính năng "ăn tiền" nhất của Debugbar khi làm việc với Microservices hoặc 3rd-party API.
Bạn nghi ngờ API đồng bộ dữ liệu của Hitachi đang bị quá tải (bottleneck)? Hãy dùng cặp hàm startMeasure và stopMeasure để bọc lại đoạn code đó.
use Barryvdh\Debugbar\Facades\Debugbar;
use Illuminate\Support\Facades\Http;
public function processOfflineSync()
{
// Bắt đầu bấm giờ tổng quá trình
Debugbar::startMeasure('total_sync_process', 'Tổng thời gian xử lý đồng bộ');
// 1. Đo lường thời gian query Database
Debugbar::startMeasure('db_fetch_orphans', 'Query Database lấy Orphan Transactions');
$orphans = Transaction::where('status', 'offline')->get();
Debugbar::stopMeasure('db_fetch_orphans');
// 2. Đo lường thời gian gọi API của Hitachi
Debugbar::startMeasure('htc_api_call', 'Gọi API đồng bộ tới Hitachi');
$response = Http::timeout(10)->post('https://api.partner.com/sync', [
'data' => $orphans
]);
Debugbar::stopMeasure('htc_api_call');
// 3. Đo lường thời gian cập nhật trạng thái
Debugbar::startMeasure('db_update_status', 'Cập nhật trạng thái thành công');
if ($response->successful()) {
Transaction::whereIn('id', $orphans->pluck('id'))->update(['status' => 'synced']);
}
Debugbar::stopMeasure('db_update_status');
// Kết thúc bấm giờ tổng
Debugbar::stopMeasure('total_sync_process');
}
Khi bạn mở tab Timeline của Debugbar, một biểu đồ Gantt Chart tuyệt đẹp sẽ xuất hiện. Bạn sẽ thấy rõ ràng từng thanh thời gian (bar):
- Query Database: 15ms
- Gọi API Hitachi: 2800ms (Cực kỳ chậm!)
- Update trạng thái: 40ms
Nhờ bằng chứng đanh thép này, bạn có thể tự tin viết báo cáo Defect Notification (DNF) gửi cho đối tác yêu cầu tối ưu lại hạ tầng API của họ, thay vì phải ngồi mò mẫm nghi ngờ chính đoạn code của mình.
3. Bắt lỗi thầm lặng (Exceptions)
Đôi lúc, có những khối code try...catch bạn chủ động nuốt lỗi (không văng Exception ra màn hình để tránh ảnh hưởng khách hàng). Nhưng khi đang dev, bạn vẫn muốn biết cái lỗi đó thực chất mang thông điệp gì.
Hãy bắt nó bỏ vào tab Exceptions của Debugbar:
use Barryvdh\Debugbar\Facades\Debugbar;
use Illuminate\Support\Facades\Http;
public function checkHardwareStatus()
{
try {
$status = Http::timeout(2)->get('http://10.0.0.50/tvm/status')->json();
} catch (\Exception $e) {
// Log lỗi ngầm vào Debugbar
Debugbar::addThrowable($e);
// Trả về dữ liệu mặc định để UI không bị sập
$status = ['is_online' => false];
}
return $status;
}
Tab Exceptions sẽ lưu giữ toàn bộ Stack Trace của cái lỗi timeout đó để bạn từ từ nhâm nhi phân tích, trong khi luồng phần mềm vẫn lướt đi êm ái.
Tổng kết Series Laravel Debugbar
Chỉ với 3 bài học thực chiến, chúng ta đã biến một công cụ gỡ lỗi thông thường thành một hệ thống giám sát hiệu năng chuẩn Enterprise.
- Bạn đã biết thiết lập Boong-ke bảo mật để bảo vệ cấu hình nhạy cảm khỏi ánh mắt của kẻ gian trên Production.
- Bạn đã tiêu diệt triệt để N+1 Query, giúp giải phóng hàng chục ngàn kết nối rác cho Database nhờ khả năng soi SQL mạnh mẽ.
- Bạn đã biến Debugbar thành đồng hồ bấm giờ (Timeline) để kiểm toán và phân tích hiệu năng của bất kỳ một luồng gọi API nào trong hệ thống, vạch mặt chính xác nút thắt cổ chai.
Với Laravel Debugbar trong tay, kết hợp cùng Opcodes Log Viewer mà chúng ta đã làm trước đó, bạn đã trang bị đủ "Mắt Thần" để soi rọi mọi ngóc ngách của hệ thống. Chúc hệ thống AFC của bạn luôn đạt ngưỡng response time dưới 100ms!
All rights reserved