- There isn’t anything that would make it automatically incompatible, but the things you can do with Workers is basically limitless. If a Worker is doing things like altering Cache Control headers, it certainly could interfere with parts of the plugin. Again, not inherently incompatible, but it really would depend on what the Worker was doing to the underlying HTTP request.
- This plugin handles things like browser cache already. It’s probably not a great idea to have two plugins trying to do the exact same thing, but it would *probably* be okay. Might be a little weird if you think one plugin is doing something specific (like setting length of time for browser cache), then the other plugin sets it to something different. Handling it with multiple plugins isn’t going to make it better/faster or anything, only slightly slower (double the code running) and possibly confusing when one plugin uses its settings when you expect the settings from the other one.
- I personally wouldn’t, but it would be specific to your site. It would make sense to benchmark it and see if having what is effectively a cache for a cache makes your site faster or slower. This plugin avoids the request even going to your origin server when it can (serves direct from Cloudflare data center closest to the user), so there may not be a ton of value in having a cache that resides on your origin server.
Yep, you are basically creating a cache for a cache. Seems like a lot of added complexity and potential for something to break for little upside. Maybe there are cases where a site gets a crazy amount of traffic (like thousands of page views per second) and a secondary cache that is automatically distributed to multiple web servers and generated before requests are made for the pages or something. I could see edge cases like that where it makes sense. But best thing to do is benchmark it and see if having a cache for a cache is beneficial for your site or not.
Hi, Thank you and great explanation.
I turned off browser cache in litespeed and i will test how it works, this means only your plugin will do browser cache and LS will do other cache.
I am trying to achieve this on workers, but i am not sure if i am right on this.
See the code:
// URLs to bypass cache completely
const BYPASS_URL_PATTERNS = [
/\/wp-admin\/.*/, // WordPress admin
/\/wp-login\.php$/, // WordPress login
/\/cart\/?.*/, // WooCommerce cart
/\/checkout\/?.*/, // WooCommerce checkout
/\/my-account\/?.*/, // WooCommerce account
/\/robots\.txt$/, // robots.txt
/\/wp-content\/.*/, // static assets
/\/wp-includes\/.*/ // WordPress core assets
];
// Only cookies that truly change page content
const PERSONALIZATION_COOKIES = [
"wmc_current_currency",
"trp_language"
];
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
// 1️⃣ Bypass cache for admin/cart/checkout/account pages
for (const pattern of BYPASS_URL_PATTERNS) {
if (url.pathname.match(pattern)) {
return fetch(request);
}
}
// 2️⃣ Parse cookies
const cookieHeader = request.headers.get("cookie");
let cookies = {};
if (cookieHeader) {
cookies = Object.fromEntries(
cookieHeader.split(";").map(c => {
const [k, v] = c.trim().split("=");
return [k, v];
})
);
}
// 3️⃣ Only use currency + language for cache-busting
let cacheBuster = [];
for (const name of PERSONALIZATION_COOKIES) {
if (cookies[name]) {
cacheBuster.push(${name}=${cookies[name]});
}
}
if (cacheBuster.length) {
url.searchParams.set("cf_cache_bust", cacheBuster.join("_"));
}
// 4️⃣ Create new request with modified URL
const newRequest = new Request(url.toString(), request);
// 5️⃣ Fetch response from origin / LiteSpeed
return fetch(newRequest);
}
The main reason is for the wmc & trp cookies so as to ensure seperate currencies and languages are cached properly, this is why i left litespeed cache active as it cache seperate cookies and languages.
I haven’t tested that Worker code (I also don’t have LiteSpeed installed anywhere), but I don’t see anything in there that would interfere with this plugin.
If your Cloudflare zone is on a paid plan (anything except “Free”), you may want to look at Snippets. They are lightweight Workers that have no per request cost (Workers are free for up to 100,000 requests/day, but there’s a cost after that). That’s fairly simple Worker code, so should work just fine as a Snippet.
This can be done without Cloudflare Workers or even a Page Rule (done with a single Cache Rule on Cloudflare’s side, and custom code in the plugin).
how your plugin cache the pages. Does it without cloudflare workers or kv workers I dont have much information.
can you explain it so we can understand how the plugşn works