
Cloudflare vừa ra mắt Workers Cache vào ngày 6/7/2026, và đây là tính năng mà mình đã chờ khá lâu. Nếu bạn đang chạy WordPress hoặc bất kỳ ứng dụng web nào trên Cloudflare Workers, tính năng này có thể giảm CPU time xuống gần bằng 0 cho phần lớn request. Mình sẽ hướng dẫn chi tiết từ A đến Z cách bật và tối ưu Workers Cache cho website của bạn.
Workers Cache là gì và tại sao bạn nên quan tâm?
Workers Cache là một tầng cache phân cấp (tiered cache) nằm trực tiếp phía trước Worker entrypoint của bạn. Khi một request đến, Cloudflare kiểm tra cache trước. Nếu có response tươi trong cache, Cloudflare trả về ngay lập tức — Worker của bạn không cần chạy, và bạn không tốn CPU time cho request đó.
Trước đây, Worker luôn chạy cho mọi request dù response giống hệt nhau. Với Workers Cache, bạn chỉ trả CPU cho lần render đầu tiên. Các request sau được serve từ cache cho đến khi hết hạn. Điều này đặc biệt quan trọng với các site server-side rendering, nơi mỗi page load đều là một lần render đầy đủ.
Cách bật Workers Cache trong 2 phút
Để bật Workers Cache, bạn chỉ cần thêm một block config vào file wrangler.toml hoặc wrangler.jsonc:
{
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2026-05-01",
"cache": {
"enabled": true
}
}Sau đó, bạn kiểm soát caching thông qua HTTP headers quen thuộc. Không cần cấu hình zone riêng biệt, không cần rules engine, không cần đăng nhập thêm product nào. Worker của bạn ở đâu, cache theo đến đó — custom domain, workers.dev, hay service binding.
Cách cấu hình Cache-Control cho hiệu quả tối đa
Sau khi bật cache trong config, bạn thiết lập Cache-Control header trên response để báo cho Cloudflare biết cache bao lâu. Dưới đây là pattern mình dùng cho hầu hết project:
export default {
async fetch(request) {
const html = await renderPage(request);
return new Response(html, {
headers: {
"Content-Type": "text/html; charset=utf-8",
"Cache-Control": "public, max-age=300, stale-while-revalidate=3600",
},
});
},
};Với config này, max-age=300 nghĩa là response được xem tươi trong 5 phút. stale-while-revalidate=3600 cho phép Cloudflare serve response cũ trong tối đa 1 giờ nữa, đồng thời chạy Worker ngầm để refresh cache. Người dùng cuối không bao giờ phải chờ.
Stale-while-revalidate hoạt động thế nào trong thực tế?
Đây là phần mình thích nhất. Khi cache hết hạn (qua max-age), thay vì bắt user chờ Worker render lại page, Cloudflare trả về response cũ ngay lập tức và chạy Worker ngầm để cập nhật. User nhận được response với tốc độ cache, Worker vẫn chạy đủ thường xuyên để nội dung luôn tươi.
Mình thường chia ra 3 cửa sổ thời gian để dễ hình dung: cửa sổ tươi (max-age) — Cloudflare serve cache, Worker không chạy. Cửa sổ stale (stale-while-revalidate) — Cloudflare vẫn serve cache, Worker chạy ngầm refresh. Ngoài cả hai — Cloudflare chạy Worker, user chờ render lần đó.
Với blog archive ít thay đổi, mình dùng max-age=86400, stale-while-revalidate=2592000 (cache 1 ngày, stale 30 ngày). Với product catalog cập nhật liên tục, max-age=300, stale-while-revalidate=3600 là điểm ngọt.
Cách purge cache theo tag khi nội dung thay đổi
Workers Cache hỗ trợ purge theo tag, giúp bạn invalidate cache chính xác thay vì purge toàn bộ. Khi response có header Cache-Tag, bạn có thể purge theo tag đó:
// Set tag khi tạo response
return new Response(body, {
headers: {
"Cache-Control": "public, max-age=300",
"Cache-Tag": "products,product:123",
},
});
// Purge khi product thay đổi
await ctx.cache.purge({ tags: ["product:123"] });Đây là tính năng mà các plugin cache WordPress truyền thống khó làm được chính xác. Với Workers Cache, bạn kiểm soát hoàn toàn ở mức code, purge đúng nội dung đã thay đổi mà không ảnh hưởng phần còn lại.
Ứng dụng Workers Cache cho WordPress như thế nào?
Nếu bạn chạy WordPress truyền thống trên VPS, Workers Cache không áp dụng trực tiếp. Tuy nhiên, có hai kịch bản mà mình thấy rất đáng đầu tư:
Thứ nhất, Headless WordPress. Khi bạn tách frontend ra (Next.js, Astro, SvelteKit) và deploy trên Cloudflare Workers, backend WordPress chỉ lo data qua REST API/GraphQL. Frontend Worker render page và cache qua Workers Cache. Tốc độ tải trang gần như tức thì, server WordPress giảm tải đáng kể.
Thứ hai, Reverse proxy trên Workers. Bạn đặt Worker phía trước WordPress origin, Worker có thể cache HTML response từ WordPress. Mỗi request đến Worker trước, nếu cache hit thì trả luôn, nếu miss thì forward đến WordPress origin. Kết hợp với stale-while-revalidate, site WordPress của bạn sẽ nhanh như static site.
Vary header: Cache nhiều phiên bản cùng URL
Workers Cache hỗ trợ đầy đủ Vary header, cho phép cache nhiều phiên bản response cho cùng một URL. Ví dụ, cùng một product page có thể trả HTML cho browser và JSON cho API client:
return new Response(body, {
headers: {
"Cache-Control": "public, max-age=600",
"Vary": "Accept",
},
});Cloudflare sẽ cache riêng biệt response cho Accept: text/html và Accept: application/json. Tương tự, bạn có thể vary theo Accept-Encoding cho format ảnh (WebP vs JPEG), hoặc theo ngôn ngữ.
So sánh Workers Cache với Cache Level truyền thống
Nhiều bạn sẽ hỏi: Cloudflare đã có Cache Level, Page Rules, Tiered Cache rồi, Workers Cache khác gì? Mình tóm tắt như sau:
Cache Level và Page Rules hoạt động ở tầng proxy, cache static assets (CSS, JS, images) theo URL pattern. Workers Cache hoạt động ở tầng application, cache response do code Worker tạo ra. Hai tầng này bổ sung cho nhau — static assets vẫn đi qua CDN cache thông thường, dynamic content do Worker render thì đi qua Workers Cache.
Điểm quan trọng nhất: Workers Cache miễn phí trên mọi plan. Không cần nâng cấp để dùng. Bạn chỉ trả CPU time cho Worker khi cache miss, và với stale-while-revalidate, cache miss thực sự rất hiếm.
Những lưu ý khi triển khai Workers Cache
Đầu tiên, hãy chắc chắn compatibility_date trong Wrangler config từ 2026-05-01 trở đi. Các phiên bản cũ hơn có thể không nhận diện được cache block.
Thứ hai, cache key mặc định dựa trên URL method và path. Nếu app của bạn có logic phân biệt theo user (ví dụ: nội dung riêng cho user đã đăng nhập), bạn cần dùng ctx.props để tạo cache key an toàn theo tenant, hoặc tắt cache cho những route đó.
Thứ ba, Vary header tăng số lượng cache entry. Nếu bạn Vary theo header có quá nhiều giá trị khác nhau (như Cookie), cache hit rate sẽ giảm mạnh. Chỉ Vary theo những header thực sự cần thiết.
Cuối cùng, monitor qua Cloudflare Analytics. Sau khi bật Workers Cache, bạn sẽ thấy Cache Ratio tăng lên và CPU time giảm xuống. Nếu không thấy cải thiện, kiểm tra lại Cache-Control header có đúng không.
Kết luận: Workers Cache đáng dùng không?
Mình đã triển khai Workers Cache cho 3 project trong tuần qua, và kết quả rất rõ ràng. Tốc độ tải trang trung bình giảm 60-70%, CPU time giảm hơn 80%. Đặc biệt với các trang blog, docs, hay landing page, cache hit rate đạt trên 95%.
Nếu bạn đang chạy ứng dụng trên Cloudflare Workers, không có lý do gì để không bật Workers Cache. Một dòng config, vài HTTP header, và website của bạn nhanh hơn đáng kể mà không tốn thêm chi phí. Mình sẽ tiếp tục cập nhật khi Cloudflare ra thêm tính năng mới cho Workers Cache trong thời gian tới.