1. Giới hạn số lượng kết quả
Luôn chỉ định số lượng bài viết cụ thể trong mỗi truy vấn, thay vì để mặc định hoặc -1:
$query = new WP_Query( array(
'posts_per_page' => 10
));
2. Bỏ qua sticky post & số lượng dòng
Theo mặc định, WordPress xử lý sticky post và đếm tổng số bài viết khớp truy vấn. Nếu bạn không cần hai thứ này (ví dụ hiển thị ở sidebar, footer, hoặc section phụ), hãy tắt để tăng tốc:
$query = new WP_Query( array(
'posts_per_page' => 10,
'ignore_sticky_posts' => true,
'no_found_rows' => true
));
Lưu ý: Khi dùng no_found_rows => true, bạn sẽ không thể sử dụng phân trang dựa vào $query->max_num_pages.
3. Chỉ lấy ID nếu không cần toàn bộ dữ liệu
Nếu bạn chỉ cần danh sách ID bài viết để xử lý tiếp bằng PHP, nên dùng:
$query = new WP_Query( array(
'posts_per_page' => 10,
'fields' => 'ids'
));
4. Cẩn trọng với meta_query
Truy vấn sử dụng meta_query sẽ gây chậm đáng kể nếu không có index phù hợp. Ưu tiên dùng taxonomy nếu có thể, hoặc dùng plugin tối ưu index như:
5. Không dùng orderby => rand trên site lớn
Truy vấn ngẫu nhiên với 'orderby' => 'rand' gây chậm vì MySQL phải scan toàn bảng. Nếu bắt buộc phải random, nên cache ID trước rồi chọn bằng PHP.
6. Tắt cache nếu truy vấn không cần dùng lại
Nếu truy vấn chỉ chạy 1 lần trong request và không cần lưu vào object cache:
$query = new WP_Query( array(
'posts_per_page' => 10,
'cache_results' => false
));
Kết luận
Việc tối ưu WP_Query giúp bạn giảm tải cho database và tăng tốc toàn trang – đặc biệt quan trọng với các site có nhiều bài viết hoặc nhiều truy vấn động. Hãy áp dụng linh hoạt từng thủ thuật theo ngữ cảnh sử dụng thực tế.
Bình luận