Cloudflare Auto Cache Purge and Preload

Cloudflare Auto Cache Purge and Preload là combo tất cả trong một, giúp tự động xóa và preload cache Cloudflare mỗi khi bài viết, trang, bình luận, danh mục hoặc thẻ được thêm, sửa, xóa trong WordPress, bổ xung 2 nút Clear Cache và Preload Cache trên admin bar, để xóa và tạo mới toàn bộ cache thủ công nhanh chóng

Có thể tạo cache rule bằng Cloudflare Auto Cache Rules

Các tính năng chính:

1. Tự động xóa cache: xóa cache Cloudflare khi bài viết, trang, danh mục, thẻ bị thay đổi (thêm, sửa, xóa)

  • Bài viết: khi một bài viết được xuất bản, cập nhật hoặc chuyển vào thùng rác, plugin sẽ xóa cache cho các URL liên quan như URL bài viết, trang chủ, các trang phân trang, danh mục, thẻ, các URL tùy chỉnh được chỉ định thêm
  • Khi danh mục hoặc thẻ tạo mới, chỉnh sửa, hoặc bị xóa, plugin sẽ xóa cache cho các URL liên quan đến danh mục hoặc thẻ đó, kể cả các danh mục hoặc thẻ cũ, giúp xóa cache chính xác hơn

Ví dụ ban đầu bài viết ở danh mục A và B, sau đó thay đổi chuyển sang dùng danh mục C, khi cập nhập bài viết sẽ tự xóa cache danh mục A,B,C, sau đó nếu chỉ dùng danh mục C, khi cập nhập bài viết, chỉ xóa cache danh mục C

  • Trang: khi một trang được xuất bản, cập nhật hoặc chuyển vào thùng rác, chỉ duy nhất URL của trang đó được xóa khỏi cache.

Trang là 1 tình huống bất trị, mình không nghĩ ra bất cứ giải pháp nào để xóa các trang liên quan, vì không thể biết được trang đó liên quan với trang nào, nên chỉ xóa duy nhất URL của trang

  • Bình luận: chỉ xóa duy nhất bài viết khi thêm, sửa, xóa bình luận

Trong trường hợp cần xóa thêm URL khác, có thể thêm vào phần Custom URLs để Purge

2. Tự động preload cache: sau khi xóa cache thì tự động preload lại các URL đã xóa

3. Nút Clear Cache và Preload Cache nằm ở bên phải admin bar, để xóa và tạo mới toàn bộ cache thủ công

  • Đôi lúc sửa lại giao diện, sử dụng 2 nút này để xóa và làm mới nhanh lại toàn bộ cache

4. Tự động preload toàn bộ các trang mỗi ngày 1 lần theo giờ định sẵn

5. Hỗ trợ cấu hình qua giao diện web

6. Hỗ trợ ghi log: lưu trữ các thông báo về quá trình xóa và preload cache vào một file log để theo dõi.

Hướng dẫn sử dụng và cài đặt plugin

1. Cài đặt plugin

Tải file plugin

  • Download tại đây, cài đặt như 1 plugin WordPress thông thường, sau đó Activate
    Phiên bản Action Scheduler sử dụng là v3.9.2

Kích hoạt Plugin

  • Truy cập Admin DashboardPlugins → Tìm Cloudflare Auto Cache Purge And Preload → Bấm Activate.

2. Cấu hình plugin

Cloudflare Auto Cache Purge and Preload

  • Truy cập Admin Dashboard → Tools → Cloudflare Auto Cache Purge and Preload.
  • Cloudflare API Email: Địa chỉ email của bạn trên Cloudflare.
  • Cloudflare API Key: API key của bạn từ Cloudflare.
  • Cloudflare Zone ID: Zone ID của website trên Cloudflare.
  • Sitemap URL: Đường dẫn đến Sitemap để preload cache thủ công, mặc định plugin sẽ tự thêm vào, còn vì lý do thần thánh nào đó, kiếm không ra sitemap, sẽ tự dùng theo/sitemap.xml (trong trường hợp bạn dùng sitemap nào lạ quá, sửa thủ công lại là được)
  • Custom URLs to Purge: (mặc định để trống) danh sách các URL tùy chỉnh nếu cần xóa cache
    Tính năng này thuần túy do dùng cá nhân, trang archives là danh sách bài viết, luôn phải xóa khi bài viết có cập nhập, nên phải thêm vào, có thể sử dụng đường dẫn tương đối (ví dụ: /archives/) hoặc URL tuyệt đối (ví dụ: https://bibica.net/archives/)
  • Logging: (mặc định tắt) ghi lại quá trình chạy, đa phần cũng chỉ check vài ngày đầu, xem chạy, xóa đúng, đủ không, dùng bình thường thì tắt đi cho nhẹ (/wp-content/cloudflare_purge_preload.log)
  • Auto Preload: (mặc định tắt) stick chọn thì sẽ mở ra tùy chọn Thời gian chạy Auto Preload (mặc định chạy lúc 2h sáng)
    Chọn 1 giờ nào đó VPS ít chạy để nó tự chạy preload toàn bộ các trang qua sitemap (tương tự tính năng Preload Cache khi gọi ra ở admin bar)

    • Ban đầu tính năng này không có, mà chạy ít hôm mới nhớ ở các trang ít tương tác, Cloudflare sẽ tự xóa cache sau 1 vài ngày gì đó, nên bổ xung thêm tính năng này
    • Sau khi bật lên nó sẽ tạo 1 cron có tên cloudflare_daily_preload_cache
    • Không dùng thì tắt, nó sẽ tự xóa
  • Reset: gần như xóa tất cả mọi thứ liên quan tới plugin, đúng nghĩa đen là làm sạch

Nói dài dòng chứ điền API của Cloudflare vào là xong (điền sai nó tự báo), còn lại nó tự chạy, vài hôm đầu có thể check log, test xem khi chạy nó dùng CPU nhiều không, xóa có đúng không … còn lại gần như cũng quên cả

3. Tối ưu hiệu năng (quan trọng)

Nếu không cấu hình phần này, mặc định Action Scheduler gọi hành động trong thời gian 60 giây, hên thì 3-4s chạy, xui thì 30-40s mới chạy

Plugin được viết hoàn toàn theo hướng gọi cron cho các hành động, nên cấu hình như bên dưới để có hiệu quả tối ưu

1. Sử dụng Systemd Timer, WP-CLI hoặc các bash script để tạo, gọi WP-Cron nhanh nhất có thể, tầm 1s chạy 1 lần

2. Thêm cấu hình WP_CRON_LOCK_TIMEOUT trong wp-config.php, set 1s

define('WP_CRON_LOCK_TIMEOUT', 1); // Set thời gian chờ 1 giây

3. Dùng các plugin quản lý cron như WP Crontrol, Tạo 1 cron schedules mới, tiếp tục là 1s

Cloudflare Auto Cache Purge and Preload

4. Đổi hook action_scheduler_run_queue về 1s

Cloudflare Auto Cache Purge and Preload

Lúc này tốc độ Action Scheduler gọi Scheduled Actions có thể nói là xé gió, có thể vào Tools -> Scheduled Actions để kiểm tra log, xem các hành động chạy có bị lỗi gì không

Trên các VPS tầm 1 Core, 1 GB RAM set các giá trị bên trên khoảng 5s là vừa
  • Sau khi chạy ít ngày, thấy mọi thứ hoạt động ổn, có thể xóa và tắt hẳn phần ghi log của Action Scheduler đi cho nhẹ
// Xóa log và các hành động đã hoàn thành/thất bại
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->prefix}actionscheduler_logs"); // Xóa log
$wpdb->query("DELETE FROM {$wpdb->prefix}actionscheduler_actions WHERE status IN ('complete', 'failed')"); // Xóa hành động đã hoàn thành/thất bại

// Tắt chức năng ghi log
add_filter('action_scheduler_store_logs', '__return_false');

4. Cấu hình để xóa bình luận

  • 4.1 Không dùng cookie, lưu trực tiếp thông tin tài khoản trên thiết bị

Dùng Code Snippets thêm vào đoạn script bên dưới

function disable_comment_cookies() {
    remove_action('set_comment_cookies', 'wp_set_comment_cookies');
}
add_action('init', 'disable_comment_cookies');

function custom_comment_localstorage_script() {
    ?>
    <script>
    document.addEventListener("DOMContentLoaded", function() {
        let commentForm = document.querySelector("#commentform");
        if (commentForm) {
            commentForm.addEventListener("submit", function() {
                let author = document.querySelector("#author")?.value || "";
                let email = document.querySelector("#email")?.value || "";
                let url = document.querySelector("#url")?.value || "";

                // Lưu vào localStorage thay vì cookie
                localStorage.setItem("comment_author", author);
                localStorage.setItem("comment_author_email", email);
                localStorage.setItem("comment_author_url", url);
            });

            // Tự động điền lại thông tin từ localStorage khi tải lại trang
            document.querySelector("#author").value = localStorage.getItem("comment_author") || "";
            document.querySelector("#email").value = localStorage.getItem("comment_author_email") || "";
            document.querySelector("#url").value = localStorage.getItem("comment_author_url") || "";
        }
    });
    </script>
    <?php
}
add_action('wp_footer', 'custom_comment_localstorage_script');

Khi comment ở các trang đã cache, nó sẽ load lại dữ liệu cũ, cần dùng 1 hình thức ajax để comment, Ajaxify Comments là đủ

Làm 2 điều này, user vẫn có thể tự lưu lại thông tin khi comment, mà không ảnh hưởng vấn đề HIT của trang

5. Hoạt động và hiệu quả

Plugin không tham gia vào bất cứ quá trình nào khi viết bài, cập nhập hay xóa bài viết …. nó chỉ gửi đi yêu cầu chạy bất đồng bộ, thực hiện tuần tự quá trình tổng hợp URL -> clear cache -> preload cache

  • Tùy chọn Clear Cache trên admin bar, gửi lệnh xóa trực tiếp tới Cloudflare, các quá trình khác đều chạy ngầm, lý thuyết bạn “rất khó” thấy sự “chậm” của khi sử dụng

Mình đang gọi cron tần xuất cao nhất hệ thống có thể chạy, là 2s gọi 1 lần thì chưa gặp vấn đề gì liên quan tới hiệu năng …

  • Quá trình preload cache không có quá nhiều tác dụng

Về mặt lý thuyết, việc giả lập truy cập qua các hình thức headers User-Agent, nó chỉ tạo được HIT, chứ không thực sự tạo ra 1 phiên bản cache cho trình duyệt, tác dụng thực tế là không đáng kể

Muốn quá trình preload cache đạt hiệu quả, phải tạo 1 trình duyệt thực sự, sau đó dùng nó để truy cập vào từng trang cần tạo cache, việc cài đặt như này thì lại đồ sộ quá mức cho 1 plugin trên WordPress, vì cần cài thêm khá nhiều addon, tạm từ từ tính sau 😛

Từ phiên bản v1.2.1 sẽ tự động điều chỉnh số lượng request dựa vào CPU load và tổng số core CPU, hiệu năng thực tế trên Oracle 4 core:

  • Preload 600 trang mới: ~30-45 giây.
  • Preload 600 trang đã có cache: ~3-5 giây.
  • Xóa & preload bài viết mới: ~7-10 giây.

6. Lỗi

[13-Feb-2025 08:16:08 UTC] Cron reschedule event error for hook: action_scheduler_run_queue, Error code: could_not_set, Error message: The cron event list could not be saved., Data: {"schedule":"2 gi\u00e2y","args":["WP Cron"],"interval":2}

Ở điều kiện tested, tôi có thử cập nhập 10 bài viết khác nhau liên tục, ấn khoảng 20 lần thì thấy xuất hiện lỗi could_not_set, tạm cũng không chắc là do cấu hình phần cứng chịu không nổi 😀 hay do gọi hành động nhanh quá, Action Scheduler chịu không nổi

  • Sử dụng thực tế thì chắc cũng ít ai cập nhập 10 bài viết liên tục trong 3-5s như thế nên chắc cũng khó thấy lỗi này
Nếu bạn sử dụng, gặp vấn đề gì, xin comment bên dưới bài viết này

Kết luận

Rất hài lòng về hiệu năng của phiên bản Cloudflare Auto Cache Purge and Preload chạy qua Action Scheduler, quy trình mượt mà như sách giáo khoa, hôm nào rỗi rãi chuyển hết mọi plugin đang dùng sang chạy qua Action Scheduler thì cứ gọi là xé gió luôn

Tất cả những thứ mình cần liên quan tới cache, phiên bản này đã đáp ứng đầy đủ, nếu thêm được phần khi điền thông tin API Cloudflare vào, tự check và tùy chỉnh lại hết các cấu hình trong setting của Cloudflare nữa thì tiện hẳn

Tự tin giới thiệu mọi người dùng thử phiên bản này 😀


Related Posts

Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.

• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.

✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!