Tối ưu WP-Cron bằng WP Crontrol và linux’s cronjob

Mặc định WordPress sử dụng wp-cron để chạy các even, khi có một người khách vào site, nó tự động chạy wp-cron (tuy thế nó chỉ hoạt động khi trang được tải, back-end hoặc front-end) để kiểm tra các update như theme, plugin, hay như WP Rocket thì thường là tạo mới cache và database optimization hoặc 1 số yêu cầu post bài vào 1 thời điểm nào đó …

Tối ưu WP-Cron bằng WP Crontrol và cronjob

Tổng thế là thế, nhưng ở đây sẽ nảy sinh vài vấn đề

  1. Site bạn thời điểm cần chạy even lại không ai vào :]] Ví dụ bạn viết 1 bài viết, và hẹn nó sẽ được public vào 0h ngày 01/01/2018 để Happy New Year 2018 chẳng hạn, nhưng nếu lúc đó không ai vào, nó sẽ không chạy wp-cron, và bài viết đó sẽ treo ở đó cho tới khi có người vào site
  2. Cứ có khách vào, là nó lại chạy file wp-cron
    Việc này sẽ khiến truy cập của user bị chậm hơn do phải gánh chạy thêm cái wp-cron

Bạn có thể dùng WP Crontrol, cho phép bạn xem và kiểm soát những gì đang xảy ra trong hệ thống wp-cron, cần thiết thì sửa, xóa nó đi cho phù hợp với nhu cầu sử dụng, nhiều plugin bạn cài vào rồi kể cả xóa đi nhưng nó vẫn còn rác trong database và wp-cron, hãy xóa đi cho nhẹ bớt, bạn có thể tăng giảm thời gian chạy các even cho phù hợp nhu cầu, như chuyện check theme, plugin khi hệ thống đã ổn định, thì để 1-2 tháng check 1 lần là vừa, check nhiều quá cũng chẳng để làm gì …

Tất nhiên, bạn nên thay đổi những gì bạn hiểu, đừng vì cải thiện hiệu năng mà cái gì cũng chỉnh sang cả tháng khiến việc đồng bộ trên site bạn có vấn đề, cá nhân mình thì cũng chỉ xóa các even rác (do test plugin xong xóa đi nó vẫn còn lại) và tăng thời gian kiểm tra update plugin, theme, hay phiên bản WordPress mới nhất lên 1 tháng 1 lần thôi 😀 còn lại đa phần giữ mặc định cả

Mình không chắc là mình hiểu về wp-cron như thế có đúng không 😀 nhưng khi làm ngoirungdui.com mình cứ thấy nó nhanh hơn rất nhiều so với bibica.review, điểm quái lạ là thậm chí thèng bibica.review dùng theme nhẹ hơn, ít plugin hơn mới chó cắn 😀 Kẹt cái lúc làm thèng ngoirungdui.com, mình add vào quá nhiều thứ, tới nổi không nhớ chắc là vấn đề do đâu 😛 vài hôm trước ngồi coi lại bài viết Better wp-cron using linux’s crontab từ EasyEngine mới thấy hóa ra thèng ngoirungdui.com đang dùng cách này :]]

Trong bài viết từ EasyEngine họ cũng nói rõ rồi, mình lược dịch lại cơ bản như sau

1. Vô hiệu hoá wp-cron

Thêm dòng bên dưới vào file wp-config.php để tắt sử dụng mặc định WordPress wp-cron

define('DISABLE_WP_CRON', true);

2. Thiết lập một cronjob thực từ linux’s (VPS của bạn)

Từ terminal Linux của bạn, chạy lệnh:

crontab -e

Sau đó, thêm một dòng như dưới đây:

*/1 * * * * curl https://bibica.net/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Thay 1 bằng số phút bạn muốn wp cron tự chạy, thay https://bibica.net/ bằng domain của bạn, một số người khuyên là khoảng 30 phút chạy 1 lần là đủ, với các host share thì thậm chí con số này còn lên tới 6h / 1 lần, hay các blog cá nhân thì thậm chí để 12h chạy 1 lần cũng được, nói chung là có chạy là được :]]

Cách làm trên host share thì bạn google tí là ra hé, cũng tương tự thế thôi

Cá nhân mình thì táng hẳn 1 phút check 1 lần 😀 trên con VPS cùi nhất của Vultr chạy cả 2 trang bibica.review và ngoirungdui.com thấy vẫn ổn, chẳng vấn đề gì 😀

Đánh giá hiệu năng

Việc dùng cronjob trực tiếp từ VPS gần như đã được đồng tình của 100% số người là cải thiện hiệu năng cho WordPress rồi

Thời điểm khi vẫn chạy wp-cron trực tiếp

Khi chạy thông qua cronjob

Nói chung là hơi tiếc tẹo là khi làm mình không chụp lại cái ảnh cụ thể hơn, thành ra giờ nhìn cũng không rõ ràng lắm, như bạn thấy thời điểm dùng wp-cron trực tiếp có khi nó lên tới gần 2s, khi dùng cronjob thì cao nhất còn khoảng 1.2s …. thật ra cái này cũng không chắc là do gì, vì thật ra site chậm nhanh còn 1001 lý do khác, demo để bạn để hình dung thôi 😀

Như bạn thấy, đây là tốc độ phản hồi trung bình của ngoirungdui.com, khoảng ~ 350 ms lúc bình thường, và ~ 1000 ms (1s) khi có khách vào tạo đơn mua hàng …

Còn thèng bibica.review, config è cổ ra vẫn hơn 700 ms =))

Thậm chí thèng ngoirungdui.com còn cài WooCommerce, một plugin làm shop khá là hoành tráng trên đó, nói chung ngày xưa thêm vào nhiều thứ quá, tới nổi giờ không nhớ nó là cái gì để config lại bên thèng bibica.review nữa :]]

Việc sử dụng cronjob và WP Crontrol giúp bạn quản lý và chạy các even của site bạn tốt hơn, đây là 1 tip được mọi người khuyến cáo nên dùng, cá nhân mình chạy thì thấy ổn, không thấy có trục trặc gì, chuyện tạo xóa cache cho WP Rocket ổn, backup từ Duplicator Pro ổn … cronjob giúp bạn chạy wp-cron dưới nền, user không còn phải chạy wp-cron trực tiếp nữa, cải thiện hiệu năng hơn

3. Thiết lập một cronjob từ Cloudflare Worker

Workers

  • Create a Worker mới, có thể đặt tên là bibica-net-cron cho dễ nhớ

Nhập nội dung đoạn code bên dưới vào

addEventListener("scheduled", event => {
  event.waitUntil(handleScheduled(event))
})

async function handleScheduled(event) {
  await fetch("https://example.com/wp-cron.php?doing_wp_cron")
}

Thay example.com bằng domain bạn muốn dùng

Cron Triggers

  • Bên trong Worker, đi tới tab Triggers -> Add Cron Trigger

Cron Triggers

Chọn 1 phút chạy 1 lần

Lý thuyết Cloudflare cho tài khoản free mỗi ngày 100.000 request, cron chạy 1 phút 1 lần thì 1 ngày chạy 1.440 lần, nên coi như là dùng miễn phí 😀 (mỗi cái chưa rõ lắm lý do, vì sau 24h, Cloudflare hiển thị tới ~ 1600 request :D)

2023-06-15_4-28-35

Dùng qua Cloudflare Worker thì được cái chỉ phải add 1 lần duy nhất, đỡ phải nhớ nhiều 😛

Dùng thử thì thấy mọi thứ hoạt động bình thường, không gặp vấn đề gì, vote mọi người dùng qua Cloudflare Worker cho nhàn 😛

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied