Giải thích các tùy chọn của plugin perfmatters (phần 6)

Bạn có thể xem phần 5 của chuỗi bài viết giải thích các tùy chọn của Perfmatters ở link vừa dẫn.

1. Heartbeat API

WordPress Heartbeat API sử dụng /wp-admin/admin-ajax.php để chạy các lời gọi AJAX từ trình duyệt web. Trong khi đây là tính năng hay thì nó đồng thời cũng là nguyên nhân gây tăng sử dụng CPU và tạo ra số lượng lớn lời gọi PHP. Lấy ví dụ, nếu bạn để trang dashboard mở, nó sẽ tiếp tục gửi đi các yêu cầu POST tới file này ở tần số thông thường, tức là 15 giây một lần. Ví dụ bên dưới cho thấy điều đó xảy ra như thế nào:

Các yêu cầu Admin-ajax trong logs
Các yêu cầu Admin-ajax trong logs

Chúng tôi có ba tùy chọn tích hợp trong plugin để giảm thiểu điều này:

  1. Để như mặc định (Default)
  2. Vô hiệu hóa ở tất cả mọi nơi (Disable Everywhere)
  3. Chỉ cho phép khi bạn biên tập bài post/page (Only Allow When Editing Posts/Pages)

Chúng tôi khuyên dùng cái cuối cùng và đó là cài đặt chúng tôi sử dụng trên các trang của mình. Điều này sẽ giúp bạn giảm đáng kể số lượng các yêu cầu.

Vô hiệu hóa Heartbeat API bằng plugin Perfmatters
Vô hiệu hóa Heartbeat API bằng plugin Perfmatters

Giải quyết rắc rối

Nếu bạn sử dụng plugin để xây dựng trang (page builder) như kiểu Elementor, bạn sẽ muốn sử dụng tùy chọn thứ ba ở trên. Vô hiệu hóa Heartbeat ở tất cả mọi nơi đôi khi là nguyên nhân gây vấn đề cho chức năng của page builder.

Bạn nhớ đọc thêm tùy chọn khác của chúng tôi về việc thay đổi tần số của Heartbeat API (được đề cập ngay bên dưới).

2. Tần số Heartbeat

Chúng tôi xây dựng các tùy chọn để bạn có thể thay đổi tần số của lời gọi. Bạn hiện có các tùy chọn sau:

  • 15 giây (mặc định)
  • 30 giây
  • 45 giây
  • 60 giây

Chúng tôi khuyên bạn sử dụng tùy chọn 60-giây. Đây là cái mà chúng tôi sử dụng trên tất cả các trang web của mình.

Thay đổi tần số Heartbeat bằng plugin perfmatters
Thay đổi tần số Heartbeat bằng plugin perfmatters

3. Revisions

WordPress tự động lưu các bản revision khi bạn thực hiện biên tập, chỉnh sửa trên các bài post và page. Chúng có thể gia tăng số lượng khá nhanh. Theo mặc định, không có giới hạn nào cho số lượng revision! Chúng tôi đã từng chứng kiến một bài post có hơn 1000 revision. Nhân con số đó với 50 trang, bạn có thể có đến 50000 revison trong cơ sở dữ liệu (xem thêm cách tối ưu database WordPress). Vấn đề ở đây là bạn hầu như không bao giờ sử dụng đến chúng và chúng có thể làm chậm database của bạn cũng như chiếm dụng không gian ổ đĩa.

Vì thế chúng tôi khuyến khích bạn vô hiệu hóa hoặc giới hạn số lượng revision. Sẽ hay hơn khi bạn có nhiều lựa chọn bởi tất cả chúng ta đều có sơ suất dù ít dù nhiều. Đó là lý do tại sao chúng tôi xây dựng nhiều lựa chọn để bạn tùy cơ ứng biến:

  • Mặc định (không giới hạn)
  • Vô hiệu hóa post revision
  • 1
  • 2
  • 3
  • 4
  • 5
  • 10
  • 15
  • 20
  • 25
  • 30

Cách vô hiệu hóa hoặc giới hạn post revision

Click vào phần setting của plugin Perfmatters. Bên dưới tab “Options” với các tùy chọn mặc định, bạn cuộn chuột xuống dưới tới tùy chọn “Limit Post Revisions”.

Lựa chọn số lượng revision bạn muốn lưu, hoặc bạn có thể vô hiệu hóa chúng ngay và luôn. Cá nhân chúng tôi thích lựa chọn tối thiểu 3 revison, nhưng không nhiều hơn để giữ cơ sở dữ liệu được nhỏ gọn và linh hoạt.

Vô hiệu hóa hoặc giới hạn số lượng revision trong WordPress
Vô hiệu hóa hoặc giới hạn số lượng revision trong WordPress

Cảnh báo WP_POST_REVISIONS

Nếu bạn nhận được cảnh báo nói rằng WP_POST_REVISIONS đã được bật ở đâu đó trên trang, điều đó có khả năng cao là do một trong các nguyên nhân sau:

  • Bạn đã sử dụng tính năng này trong plugin khác, chẳng hạn như WP-Rocket. Bạn chỉ cần bật tính năng này trong một plugin mà thôi, cái này có rồi thì thôi cái kia.
  • Bạn đã có đoạn mã bên dưới đây được định nghĩa trong file wp-config.php. Nếu vậy, bạn cần loại bỏ nó:
define('WP_POST_REVISIONS', 3);

4. REST API

WordPress REST API cung cấp API điểm cuối cho các kiểu dữ liệu WordPress để người lập trình tương tác với website từ xa bằng cách gửi và nhận các đối tượng JSON.

Điều này được thực hiện bằng cách mapping các điểm cuối khác nhau thông qua URI, chẳng hạn như:

https://editwp.com/wp-json/

Dù WordPress REST API khá thú vị, vấn đề của nó là theo mặc định nó sẽ để lại username của bất cứ ai từng xuất bản bài viết trên trang WordPress thông qua URL sau:

https://editwp.com/wp-json/wp/v2/users
Danh sách user của WP-JSON
Danh sách user của WP-JSON

Đây là thông tin mà bạn không muốn tất cả mọi người đều biết. Tại sao? Bởi vì ai đó có thể dựa vào tất cả tên người dùng hiện có để đoán mật khẩu qua kiểu tấn công vét cạn (brute-force attack). Dù cho các tác giả, người cộng tác, và quản trị viên sử dụng mật khẩu mạnh thì việc công khai danh sách username chẳng phải là ý tưởng hay.

Vì vậy, chúng tôi hiện có tùy chọn trong plugin Perfmatters cho phép bạn vô hiệu hóa WordPress REST API.

Ai/Cái gì sử dụng REST API?

Vì trong thực tế có các plugin, dịch vụ và ứng dụng sử dụng REST API nên bạn có khả năng không muốn vô hiệu hóa hoàn toàn REST API. Do đó chúng tôi xây dựng một mô hình cấp quyền. Dưới đây là một vài ví dụ sử dụng REST API:

  • Bảng điều khiển của Yoast SEO và Ryte
  • Một số widget cụ thể của WooCommerce
  • Trình biên tập mới Gutenberg sử dụng REST API để giao tiếp khi bạn tạo trang và biên tập bài viết. Nếu bạn vô hiệu hóa nó hoàn toàn, bạn sẽ nhận được thông báo lỗi: “Updating failed / Cập nhật không thành công”.

Vì thế chúng tôi đưa ra các quyền khác nhau để bạn có thể sử dụng. Lấy ví dụ, bạn có thể lựa chọn tùy chọn “Disable for Non-Admins / Vô hiệu hóa với những ai không phải là Admin” hoặc “Vô hiệu hóa nó khi bạn đăng xuất”.

Làm thế nào để vô hiệu hóa WordPress REST API

Để vô hiệu hóa REST API bạn click vào phần setting của Perfmatters, lựa chọn tùy chọn “Disable REST API”.

Có ba tùy chọn khác nhau ở đây. Theo mặc định, REST API sẽ được bật. Bạn có thể lựa chọn vô hiệu hóa nó cho những ai không phải là admin (đây là lựa chọn chúng tôi khuyên dùng), hoặc vô hiệu hóa nó khi bạn đăng xuất. Nếu bạn làm việc với nhiều tác giả khác nhau, bạn sẽ muốn bật tính năng này.

Vô hiệu hóa REST API WordPress bằng Perfmatters
Vô hiệu hóa REST API WordPress bằng Perfmatters

Khi bạn vô hiệu hóa các yêu cầu REST API như trên, nếu có yêu cầu đến nó mà không được cấp quyền nó sẽ hiển thị thông báo lỗi như sau:

{"code":"rest_authentication_error","message":"Sorry, you do not have permission to make REST API requests.","data":{"status":401}}

Bạn cũng có thể loại bỏ các liên kết REST API trên trang WordPress, phần tiếp sau sẽ nói về điều đó.

5. Các liên kết REST API

WordPress REST API cho phép CMS giao tiếp với các ứng dụng web khác, không thành vấn đề ngôn ngữ lập trình bạn sử dụng là gì. Theo cuốn sổ tay dành cho WordPress thì:

WordPress REST API cung cấp API điểm cuối cho các kiểu dữ liệu WordPress để người lập trình tương tác với website từ xa bằng cách gửi và nhận các đối tượng JSON.

WordPress handbook

Tuy nhiên rất nhiều trang không sử dụng nó, và vì thế trong nhiều trường hợp, nó là đoạn mã không cần thiết. Theo mặc định, mọi trang bao gồm liên kết sau trong header:

<link rel='https://api.w.org/' href='https://domain.com/wp-json/' />

Ngoài ra còn có một header được gửi trên mỗi yêu cầu:

function rest_output_link_header() {
 if ( headers_sent() ) {
 return;
 }
 
 $api_root = get_rest_url();
 
 if ( empty( $api_root ) ) {
 return;
 }

Tiếp đó còn có một thẻ API được thêm vào điểm cuối Really Simple Discovery (RSD).

<api name="WP-API" blogID="1" preferred="false" apiLink="<?php echo esc_url( $api_root ); ?>" />

Bạn có thể dễ dàng loại bỏ các liên kết WordPress REST API bằng cách bật tùy chọn “Remove REST API Links”.

Loại bỏ các liên kết WordPress REST API trong header
Loại bỏ các liên kết WordPress REST API trong header

Đoạn trên chỉ loại bỏ mã trong phần front-end.

Bạn có thể xem tiếp phần 7 ở liên kết này.

Leave a Comment