Đánh giá và phân tích hiệu năng Eloquent ORM và Query builder Laravel Framework

Là một lập trình viên chắc hẳn ai cũng từng biết về PHP và vô vàn các framework sử dụng PHP.

Một Framework được đánh giá cao hiện nay là Laravel. Đi cùng với sự phát triển của công nghệ, các Framework cũng ngày càng hoàn thiện hơn, kèm theo đó thì tính bảo mật và hiệu năng cũng tốt hơn. Hôm nay chúng ta sẽ bàn một chút về hiệu năng khi sử dụng Query Builder và Eloquent ORM của Laravel Framework.

Nhắc tới hiệu năng, đây là một tiêu chí đánh giá cực kỳ quan trọng với bất kể hệ thống nào. Đặc biệt là hệ thống web, chẳng ai muốn vào một website mà phải đợi mỏi mắt mới thấy từng phần được hiện ra cả. Hiện nay có rất nhiều kỹ thuật, công nghệ được sử dụng để tối ưu hiệu năng của một hệ thống, ngoài ra việc tối ưu code, truy vấn cơ sở dữ liệu cũng cực kỳ quan trọng để giúp cho vấn đề hiệu năng được cải thiện.

Về Eloquent ORM và Query builder, các bạn có thể đọc thêm ở link sau: https://viblo.asia/hoang.thi.tuan.dung/posts/aKYMNBN1M83E

Sau đây là thử nghiệm đo thời gian thực hiện của Query builder và Eloquent ORM:

  • Số lượng bản ghi: 10-200000
  • Code test:
 $start1 = microtime(true);
 $test = DB::select("select * from tests limit $limit");
 $end1 = microtime(true);
 $test = null;
 $start2 = microtime(true);
 $test1 = Test::take($limit)->get();
 $end2 = microtime(true);
  • Kết quả:

42.png https://infogr.am/7272b29d-c5a5-40f6-8f44-b64ceb1b0c5d

50.png https://infogr.am/502286d7-736b-4900-b200-e996af1f41ee

51.png https://infogr.am/5e020932-aa78-4bab-913e-b75ab914c702

52.png https://infogr.am/d5d83c54-a355-462f-9fbe-4e3ce109a197

  • Có thể thấy khi số lượng bản ghi lấy ra càng nhiều thì thời gian càng chênh lệch, Query builder luôn cho kết quả tốt hơn Eloquent ORM. Vậy nguyên nhân do đâu?
  • Đơn giản là ORM sau khi lấy kết quả xong thì tiếp tục một bước nữa chuyển đổi kết quả thành các Model instance, vậy nên dù trong mọi trường hợp thì ORM sẽ luôn chậm hơn.
$instance = (new static)->setConnection($connection);
$items = array_map(function ($item) use ($instance) {
return $instance->newFromBuilder($item);
}, $items);
return $instance->newCollection($items);
  • Vậy mục đích tại sao dùng ORM, bởi vì query builder chỉ lấy ra một mảng các bản ghi, ngoài ra không còn các thông tin gì khác. Còn ORM thì cung cấp cho chúng ta nhiều thông tin khác về model nữa, cụ thể các bạn có thể tham khảo ở đây https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html

  • Vậy là chúng ta đã đánh giá xong hiệu năng giữa Eloquent ORM và Query builder. Hãy cân nhắc việc sử dụng 1 trong 2 cách trên hoặc kết hợp cả 2 cách cho dự án của bạn để có được hiệu năng tốt nhất. Nếu lấy ra số lượng bản ghi nhỏ, chúng ta có thể cân nhắc giữa ORM và Query builder, còn với số lượng bản ghi lớn thì hãy dùng Query builder thôi nhé, ORM sẽ khiến bạn phát điên vì phải chờ đợi đấy.