Bootstrap

Vũ Thành Lâm

Content - Code - SEO - MMO
17/10/1979
Tây Mỗ - Nam Từ Liêm - Hà Nội
thanhlam19792003

Lamvt – Vũ Thành Lâm – bắt đầu Code 2005 Freelancer từ 2006 với hàng ngàn dự án lớn nhỏ cho nước ngoài và hàng trăm dự án web cho Việt Nam.

SEO thành công rất nhiều dự án lớn, độ khó cao.
MOD (Moderator) và Admin (Administraror) của nhiều diễn đàn về SEO và CODE web MMO tại Việt Nam
Dạy Lập trình Thiết kế Web và SEO Miễn phí 15++ Năm (Từ 2006 đến Nay)

Tối ưu hóa WordPress hiệu quả với WP_Query

5/5 - (6 bình chọn)

Hầu hết các developer WordPress khi lấy các bài viết, các trang và các nội dung khác phù hợp với các tiêu chí cụ thể từ cơ sở dữ liệu. Thông thường chúng ta không cần phải tạo các truy vấn SQL (và thường thì chúng ta không nên làm) vì lớp WP_Query và các phương thức của nó cung cấp cho chúng ta một cách an toàn và hiệu quả để lấy dữ liệu từ cơ sở dữ liệu. Chúng ta chỉ cần khai báo một mảng các đối số và đối tượng $query sẽ xây dựng truy vấn SQL thực tế.

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query

Trong bài này, tôi sẽ giả sử bạn đã biết các vấn đề cơ bản của lớp WP_Query, các phương thức và thuộc tính của nó, và nơi để tìm một danh sách các biến có sẵn.

Khi lưu lượng truy cập và nội dung bị hạn chế, chúng tôi thường không quan tâm đến hiệu quả của các truy vấn của chúng tôi. WordPress xây dựng các truy vấn SQL được tối ưu hóa tốt và cung cấp một hệ thống bộ nhớ đệm.

Khi lưu lượng truy cập và nội dung trang web phát triển đáng kể, lên đến hàng nghìn bài đăng, thì chúng ta phải xem xét thời gian thực hiện truy vấn.

Hộp công cụ

Đoạn mã mà tôi sẽ cho bạn thấy dưới đây đã được thử nghiệm với màn hình truy vấn, một plugin miễn phí cung cấp thông tin cần thiết về hiệu suất truy vấn, các trình khởi chạy (triggered hooks), yêu cầu HTTP, viết lại các quy tắc và nhiều hơn nữa.

Thay thế cho một plugin, chúng ta có thể buộc WordPress để lưu trữ thông tin truy vấn bằng cách thêm hằng số sau trong wp-config.php:

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-2

Khi SAVEQUERIES được thiết lập là true, WordPress đăng ký các truy vấn và một loạt thông tin hữu ích trong mảng $wpdb->queries. Do đó, tên của các hàm được gọi và sự mất hiệu lực của mỗi truy vấn có thể được in bằng cách thêm đoạn code sau trong một tệp mẫu như footer.php

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-3

Đây là một ví dụ về những gì được lặp lại:

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-4

WP_Query – Tại sao chúng ta không đếm hàng

Chúng ta có thể truy vấn cơ sở dữ liệu với hàm get_posts, nó trả về một mảng các bài viết, hoặc một new instance của đối tượng WP_Query. Trong cả hai trường hợp chúng ta có thể xác định kết quả của các truy vấn bằng cách thiết lập các giá trị thích hợp cho các biến cụ thể.

Chúng ta hãy bắt đầu với một ví dụ cho thấy một vòng lặp thông thường như nó thường xuất hiện trong một file template

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-5

$args là một mảng cặp key/value. Các cặp này được đặt tên là các truy vấn vars, và xác định hoặc ảnh hưởng đến query SQL thực tế.

Khi truy vấn cơ sở dữ liệu từ một plugin, chúng tôi có thể sử dụng bộ lọc pre_get_posts, như trong ví dụ sau:

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-6

Một điều quan trọng cần chú ý ở đây là đối tượng $query được truyền bằng tham chiếu chứ không phải theo giá trị, có nghĩa là các đối số truy vấn chỉ ảnh hưởng tới một $query instance hiện có.

Thiết lập phương thức thêm một truy vấn mới var đến truy vấn đặc tả và sẽ dùng WordPress để lấy tất cả các bài viết từ thể loại webdev. Đây là truy vấn kết quả:
Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-7

Trong ví dụ này, giá trị LIMIT đã được thiết lập bởi người dùng quản trị trong các tùy chọn đọc (mục Reading), được thể hiện trong hình dưới đây.

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-8

Trong các truy vấn tùy chỉnh, chúng ta có thể thiết lập số hàng cần được lấy ra từ cơ sở dữ liệu nhờ tham số pagination posts_per_page.

Tùy chọn SQL_CALC_FOUND_ROWS buộc truy vấn đếm số hàng đã tìm thấy. Số này sẽ được trả về bởi hàm FOUND_ROWS() SQL, được thể hiện trong ví dụ sau:

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-9

Thật không may khi hàm SQL_CALC_FOUND_ROWS có thể làm chậm đáng kể đến thời gian thực hiện truy vấn. Tuy nhiên chúng ta có thể buộc WordPress loại bỏ tùy chọn cung cấp biến non_found_rows dưới dạng đã được sử dụng.

Nếu SQL_CALC_FOUND_ROWS bị bỏ qua, hàm FOUND_ROWS() trả về số hàng lên đến giá trị giới hạn (LIMIT). Trong cài đặt WordPress với vài trăm bài đăng, ví dụ meta query dưới đây đã mất 0.0107 giây.

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-10

Loại bỏ SQL_CALC_FOUND_ROWS thiết lập no_found_rows thành false, cùng một truy vấn đó nhưng mất có 0.0006 giây.

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-11Khi bảng wp_post chứa hàng ngàn hàng, việc thực hiện truy vấn có thể mất vài giây. Nhưng khi chúng ta không cần pagination, chúng ta nên đặt no_found_rows thành true, làm cho truy vấn chạy nhanh hơn đáng kể.

Để bộ nhớ Cache hoặc không để bộ nhớ Cache

WordPress cung cấp một hệ thống tích hợp sẵn trong bộ nhớ đệm. Mặc dù bộ nhớ đệm sẽ cải thiện tốc độ tải trang, nhưng nó có thể gây ra một số truy vấn thêm để chạy chống lại cơ sở dữ liệu. Thêm vào đó, bất cứ lúc nào một truy vấn được thực hiện một bó dữ liệu không cần thiết có thể được yêu cầu.

May mắn thay, WordPress cho phép chúng tôi vô hiệu hóa bộ nhớ đệm với việc cung cấp ba thông số cụ thể:

– cache_results:  Có nên lưu trữ thông tin đăng không. Mặc định là true

– update_post_meta_cache: Có nên cập nhật bộ nhớ post meta cache. Mặc định true

– update_post_term_cache: Có nên cập nhật bộ nhớ post term cache. Mặc định true

Nếu một hệ thống lưu trữ tạm thời được kích hoạt, chẳng hạn như Memcached, chúng tôi không cần phải quan tâm đến các thông số bộ nhớ cache bởi vì WordPress sẽ thiết lập để false các đối số theo mặc định.

Trong bất kỳ tình huống nào khác, chúng ta có thể xây dựng một truy vấn nhanh hơn với mã sau:

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-12

Khi một hệ thống lưu trữ tạm thời không có sẵn, các truy vấn trả lại một lượng nhỏ dữ liệu không nên được lưu trữ.

Xem thêm:

Trường trả về

Như một quy tắc chung, chúng ta không bao giờ nên truy vấn cơ sở dữ liệu cho các lĩnh vực không cần thiết. Lớp WP_Query cung cấp các trường đối số, cho phép hạn chế các trường trả về cho các id hoặc các trường ‘id => parent‘.

Các biến trường (fileds variable) nhận ‘id’ và ‘id => parent’, và mặc định là * (bất kỳ giá trị nào khác), mặc dù bạn sẽ nhận thấy rằng theo mặc định, WordPress sẽ đặt giá trị cho id trong một số truy vấn.

Cuối cùng, chúng ta có thể tối ưu hóa truy vấn đầu tiên của mình:

Tối ưu hóa WordPress hiệu quả với WP_Query xay-dung-cac-truy-van-wordpress-hieu-qua-voi-wp_query-13

Khi không yêu cầu các trường cụ thể, giới hạn các trường trả về là ID

Kết luận

Xem xét tốc độ truy vấn có thể không mang lại lợi ích to lớn cho các trang web nhỏ với một vài trăm bài viết. Nếu bạn muốn sẵn sàng cho sự tăng trưởng hoặc bạn đang chạy một trang web lớn với các truy vấn đắt tiền thì bạn nên tối ưu hóa các truy vấn WordPress của bạn. Các truy vấn không hiệu quả có thể làm chậm đáng kể việc tải trang nhưng với một vài điều chỉnh đơn giản bạn có thể tăng tốc độ trang web của mình một cách đáng kể.

Tin mới nhất

VR PLUS (https://vrplus.vn/ ) Là một trong những dự án do Lamvt thực hiện trong thời gian gần đây. Như...

Trong một năm qua, chúng tôi đã xuất bản khoảng 79 bài viết SEO trên blog Ahrefs. Các bài viết...

Khám phá kĩ thuật viết nội dung SEO Nếu không có SEO, nội dung của bạn có thể bị chìm...

Các website về lĩnh vực làm đẹp cần phải có một thiết kế (design) hấp dẫn và bắt mắt. Điều...

Core Web Vitals được đo lường như thế nào? Làm thế nào để bạn biết các bản sửa lỗi đã...

Tin được yêu thích

Như đã nói, phần mềm chỉnh sửa video đang ngày càng chứng tỏ được tầm quan trọng của mình, nhất...

Nhiều bạn thắc mắc là sau khi cài đặt Plugin cho Google AMP thì làm thế nào để kiểm tra,...

Các trang web giáo dục và các trang web của chính phủ có một lợi thế hơn trong bảng xếp...

Nội dung là một trong 3 tiêu chí quan trọng để google đánh giá thứ hạng tìm kiếm cho website...

Thẻ <span> </span> Thẻ <span> là thẻ khá đặc biệt trong HTML, theo mặc định thì thẻ <span> được thêm...

Khách đang xem

  1. Quản lý việc tải lên thế nào khi người dùng không đăng nhập? Các vấn đề liên quan tới thông...
    14 giây trước
  2. Trong hiểu biết đơn giản về SEO của một người mới học SEO, tôi xin giới thiệu và chia sẻ...
    29 giây trước
  3. Một trong những cách dễ nhất để tăng doanh số bán trang web của bạn là tăng lưu lượng truy...
    12 giây trước
  4. Nếu bạn đang kinh doanh xưởng may mặc thời trang, và mong muốn những sản phẩm mới khi tung ra...
    17 giây trước
  5. Chào mừng các bạn đến với buổi tọa đàm trực tuyến do Google Adsence tổ chức ngày hôm nay Mình...
    18 giây trước
  6. Một trong những điều tuyệt vời về internet là bạn có thể kinh doanh từ sự tự do của chính...
    13 giây trước
  7. Trong những năm gần đây, việc xây dựng liên kết đang tạo ra rất nhiều hiệu quả cho SEO. Và...
    21 giây trước
  8. Hình ảnh luôn là công cụ khiến bài viết của chúng ta trở nên sinh động hơn, AutoDraw phần mềm...
    21 giây trước
  9. Một trong những mục tiêu lớn nhất của bất kỳ người khởi động blogger hoặc quản trị trang web là...
    20 giây trước
  10. Bất kể một ai cũng muốn mình được quan tâm và chú ý, không một ai muốn mình là một...
    15 giây trước