
Mẹo nhỏ để tối ưu wp_query WordPress
Nếu bạn là lập trình viên WordPress bạn sẽ sử dụng truy vấn WP_Query rất nhiều, dưới đây là 1 mẹo nhỏ để bạn tối ưu được WP_Query
Ví dụ: Bạn muốn show 6 bài đăng mới nhất và hiển thị chúng trên một trang thì sẽ sử dụng query đơn giản như sau:
<?php $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'order' => 'DESC', 'orderby' => 'date', 'posts_per_page' => '6' ); $parent = new WP_Query( $args ); ?>
Truy vấn bên trên đúng và code vẫn làm việc bình thường, tuy nhiên nó thực sự chạy các truy vấn cơ sở dữ liệu bổ sung để lấy kết quả, như vậy sẽ không tối ưu, mà thay vào đó bạn có thể sử dụng đoạn code phía dưới đây để tối ưu.
<?php $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'order' => 'DESC', 'orderby' => 'date', 'posts_per_page' => '6', 'update_post_meta_cache' => false, // to do not run query for post meta 'update_post_term_cache' => false, // to do not run query for terms, remove if terms required 'ignore_sticky_posts' => true, // to ignore sticky posts 'no_found_rows' => true // to do not count posts – remove if pagination required ); $parent = new WP_Query( $args ); ?>
Nếu tham số update_post_meta_cache
của WP_Query không được đặt thành false
, thì sau khi các bài viết được truy xuất từ DB, thì hàm update_post_caches
sẽ được gọi, hàm này sẽ gọi hàm update_postmeta_cache
.
Hàm update_postmeta_cache
là một trình bao bọc cho update_meta_cache
và về cơ bản nó gọi một SELECT đơn giản với tất cả ID của các bài đăng được truy xuất. Điều này sẽ giúp nó nhận được tất cả postmeta
, cho tất cả các bài đăng trong truy vấn và lưu dữ liệu đó trong bộ đệm ẩn đối tượng (sử dụng wp_cache_add).
Khi bạn làm điều gì đó như get_post_custom()
, trước tiên nó sẽ kiểm tra bộ nhớ cache của đối tượng đó. Vì vậy, không phải truy vấn thêm để có được meta bài đăng vào thời điểm này. Nếu bạn đã nhận được bài đăng trong WP_Query, thì meta đã có trong bộ nhớ và nó sẽ lấy ngay từ đó.
Sau khi sử dụng đoạn code wp_query tối ưu kia bạn có check bằng Query Monitor hoặc tại 1 custom template để test với Google pagespeed sẽ thấy sự hiệu nghiệm.
Chúc bạn thành công.