Hi all,

I am working on a custom ResourceLoader module whose style contents are 
compiled from Sass stylesheets. These Sass stylesheets take as input 
user-defined theme variables that affect the output.
I am looking for a way to invalidate ResourceLoader URLs that include such 
style modules, when these variables change as a result of an user 
action—primarily so that the user can see their own changes.

ResourceLoader will cache such style URLs for 5 minutes on the CDN and in the 
user’s browser cache, so by default the user would have to wait until their 
cached copy of styles expire before they would receive the updated version. 
Accordingly, I have tried to explore if following the document steps to empty 
one’s browser cache[1] after making changes would cause the browser to fetch 
the updated resource from the backend. Unfortunately, both Chrome and Firefox 
appear to send a “Cache-Control: no-cache” request header for the style URL if 
the page is hard refreshed, which seems to cause most CDNs (including WMF’s) to 
act as the source of truth and serve the asset from cache if it is already 
there, without triggering a backend fetch or conditional revalidation. In the 
case of a simple refresh, Chromium and derivatives will not trigger a 
conditional revalidation of resources including on a page since 2017,[2] so 
they just continue to use the asset that was already in the browser’s cache. 
Thus, the standard instructions for emptying one’s cache do not seem to be 
sufficient to allow the user to see the effect of their styling changes.

Given the above, the only option I see that would allow the user to see the 
updated styles after modifying input variables would be to append a version 
hash to the style URL included in the page HTML—something which ResourceLoader 
does not
currently do.

Do you know of a better approach to this problem? Are there any examples in 
MediaWiki core or extensions that accomplish something similar? I have 
consulted the code for ResourceLoaderSiteStylesModule, but it does not seem to 
have any specific invalidation behaviour, nor does it use a version hash in 
style URLs in the page HTML, so it seems that any updates to it take 5 minutes 
to propagate.

Thanks in advance!

—
[1] https://en.wikipedia.org/wiki/Wikipedia:Bypass_your_cache
[2] https://bugs.chromium.org/p/chromium/issues/detail?id=505048

Cheers,

Máté Szabó 
SOFTWARE ENGINEER
+36 30 947 5903

Fandom Poland sp. z o.o. z siedzibą w Poznaniu, ul. Abp. A. Baraniaka 6
Sąd Rejonowy Poznań – Nowe Miasto i Wilda w Poznaniu, VIII Wydział Gospodarczy 
Krajowego Rejestru Sądowego, KRS 0000254365
NIP: 5252358778
Kapitał zakładowy: 50.000,00 złotych


_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to