Transient API – Lưu cache cho đối tượng trong WordPress [NEW]

Thông thường chúng ta sử dụng WordPress và muốn tăng tốc website thì sẽ sử dụng cách cài các plugin tăng tốc như WP Super Cache, W3 Total Cache và một số ứng dụng khác trên máy chủ nếu có quyền.

Tuy nhiên, chúng ta cần biết rằng bản thân WordPress có các thuật toán riêng để xử lý và lưu trữ dữ liệu được tạo ra từ các tập lệnh PHP, nhưng nó sẽ chỉ áp dụng cho một số chức năng chính trong WordPress. đừng bận tâm. Cách đơn giản nhất để thử là sử dụng chức năng tìm kiếm chủ đề WordPress trong bảng quản trị, lần đầu tiên sẽ mất một khoảng thời gian nhưng lần thứ hai trên nó sẽ xử lý nhanh hơn, đó là nhờ WordPress đã lưu vào bộ nhớ cache truy vấn của bạn đã tìm kiếm trước đó.

Trong khuôn khổ bài viết này, mình sẽ giới thiệu cho các bạn một tính năng rất hữu ích trong WordPress mà nếu bạn thường xuyên làm việc với code ở đây sẽ giúp ích rất nhiều cho bạn trong việc tối ưu quá trình xử lý, Đó là một API tạm thời.

API tạm thời là gì?

API tạm thời là kỹ thuật cache dữ liệu đã xử lý trong WordPress và nó sẽ tự động lưu vào cơ sở dữ liệu trong một khoảng thời gian nhất định, chúng ta có thể đặt thời gian hết hạn cho dữ liệu đã lưu này.

Sau khi lưu dữ liệu vào cơ sở dữ liệu với tên _transient_[tên-transient-key] trong bàn wp_optionsthì thay vì đợi dữ liệu trả về khi xử lý xong mã sẽ lấy trực tiếp dữ liệu đã lưu trong cơ sở dữ liệu và hiển thị trên website, khi đó bạn có lưu xử lý mã PHP.

Vì nó sẽ lưu dữ liệu vào cơ sở dữ liệu, nó sẽ có nhược điểm là làm cho cơ sở dữ liệu nặng hơn (tùy thuộc vào kích thước của transient của bạn). Vì vậy hiện nay có rất nhiều trang web lớn đã sử dụng Đã ghi nhớ, APC, XCache để lưu các dữ liệu đã lưu vào bộ nhớ đệm này vào RAM thay vì vào Cơ sở dữ liệu, tất nhiên nó sẽ ngốn nhiều RAM hơn.

Khi nào sử dụng API tạm thời

Vì nó sẽ lưu vào bộ nhớ cache các kết quả truy vấn, nó sẽ chỉ hữu ích nếu bạn cần giải quyết một việc gì đó có thời gian dài để thay đổi. Ví dụ như vòng lặp tự tạo, lấy dữ liệu từ Facebook (như số lượng, thông tin người dùng chẳng hạn),… Tóm lại chỉ nên dùng để lưu dữ liệu mà website khi tải sẽ không cần gọi ra. các trang, chẳng hạn như sử dụng để lưu các tùy chọn chủ đề / plugin không được khuyến khích.

Hướng dẫn API thoáng qua

Trước khi sử dụng API tạm thời, chúng tôi cần một mã mẫu trong hướng dẫn này. Trong bài viết này, mình sẽ viết một đoạn mã để lấy số lượng like Facebook cho bài đăng này.

Bạn có thể tạo một tệp có tên test-transient.php trong thư mục theme với nội dung bên dưới để tạo Mẫu trang tùy chỉnh để thử nghiệm. Sau khi tạo xong, bạn vào Pages -> Add New tạo trang mới và thiết lập Mẫu trang mới tạo.

<?php
/*
* Template Name: Facebook JSON
*/
$url = ‘https://thachpham.com/wordpress/wordpress-tutorials/serie-hoc-wordpress-co-ban-2013.html’;
$source = wp_remote_retrieve_body( wp_remote_get( &quot;https://graph.facebook.com/&quot; . $url ) );
$data = json_decode( $source );

echo $data->shares;

Kết quả sẽ trả về số lượt thích của bài viết kia phải không? Hãy xem mất bao lâu để tải trang này (Nhấp chuột phải -> Kiểm tra phần tử -> Mạng và F5).

Transient API – Lưu cache cho đối tượng trong WordPress [NEW]

Điều đó có nghĩa là tôi đã tải trang nội dung này trong 500 mili giây. Bây giờ mình sẽ tiến hành thiết lập Transient cho đoạn mã trên và xem nó sẽ thay đổi như thế nào.


<?php
/*
* Template Name: Facebook JSON
*/
$my_transient = get_transient ( ‘facebook-like’ ); // Gọi dữ liệu từ key ‘facebook-like’ trong Transient

// Kiểm tra, nếu chưa có thì tạo dữ liệu cho Transient mang tên ‘facebook-like’
if ( empty( $my_transient) ) {

$url = ‘https://thachpham.com/wordpress/wordpress-tutorials/serie-hoc-wordpress-co-ban-2013.html’;
$source = wp_remote_retrieve_body( wp_remote_get( ‘https://graph.facebook.com/’ . $url ) );
$data = json_decode( $source );

// Lưu dữ liệu cần hiển thị vào Array
$output = array(
‘shares’ =>; $data->shares
);

// Tạo key transient với tên là ‘facebook-like’
set_transient( ‘facebook-like’, $output, 60*60*12 ); // 60*60*12 nghĩa là mỗi 12 giờ (giây*phút*giờ)
} else {
echo $my_transient[‘shares’];
}

Đoạn mã trên tôi muốn giải thích như sau (tôi đánh số dựa trên số dòng trong mã):

  • 05: Tạo một biến để làm công việc gọi dữ liệu trong transient, nếu dữ liệu trong transient này không có sẵn thì kết quả trả về là false.
  • 08 đến 21: Kiểm tra nếu biến $ my_transient Nếu không có dữ liệu, nó sẽ tiến hành tạo khóa tạm thời và chứa dữ liệu đã nhận.
  • 15 đến 17: Vì transient chỉ được phép lưu dữ liệu theo biến nên mình tạm xếp dữ liệu nhận được vào một biến mảng $ output để tiện nếu bạn có nhiều dữ liệu.
  • 20: Sử dụng hàm set_transient để tạo khóa tạm thời với tên lượt thích Facebook mà tôi đã gọi ở trên.
  • 22: Nếu transient đã có dữ liệu, tôi sẽ hiển thị dữ liệu đó.

Bây giờ chạy code, lưu ý lần đầu chạy code sẽ không hiển thị gì vì database không có transient, đồng thời nó sẽ tiến hành tạo transient key trong database. Vui lòng tải lại trang và bạn sẽ thấy dữ liệu trả về.

after_transient

Như vậy là chúng ta đã tiết kiệm được thêm đến 77% tốc độ tải bằng phương pháp này, một con số quá tuyệt vời phải không?

Nếu bạn muốn biết nó được lưu như thế nào, chỉ cần vào cơ sở dữ liệu, mở bảng wp_options đi lên và tìm tên khóa là _transient_facebook-likeNgoài ra nó có một khóa có tên _transient_timeout_facebook-like chứa thời gian hết hạn tạm thời.

cơ sở dữ liệu tạm thời

Và như tôi đã nói ở trên, nếu bạn sử dụng Memcached, XCache hoặc APC để lưu trữ bộ đệm đối tượng trong WordPress, thì cơ sở dữ liệu sẽ không lưu thông tin này.

Phần kết

Vậy là bạn vừa tìm hiểu qua tính năng Transient API, nếu bạn đã sử dụng rất nhiều Query & Loop trong trang web của mình nhưng nó chưa được cache thì đây là cơ hội để bạn kiểm chứng tính ưu việt của nó. . : D

Đánh giá nội dung này