Hi there,
this may seem like a stupid question, but it seems I am struggling with the Browsers' cache handling of Javascript Code. Let me start by describing what happens: I change some javascript code in my Seaside app, deploy it onto the server and restart the image. For many (but not all) users, the changes don't get downloaded for days. They need to go to a page, press the Browser's reload button and from then on they are fine. This is both good to know and bad at the same time for several reasons:
The effect shows up both for Javascript that gets served from the
file system (using rewrite rules) and for code served directly
from Seaside in the render* methods. For the file system stuff, we have to work on the caching
settings on Apache. But I am really helpless in case of "freshly
rendered" JavaScript code. How could that even be cached by a
Browser???
Any hints are welcome
Joachim
-- ----------------------------------------------------------------------- Objektfabrik Joachim Tuchel [hidden email] Fliederweg 1 http://www.objektfabrik.de D-71640 Ludwigsburg http://joachimtuchel.wordpress.com Telefon: +49 7141 56 10 86 0 Fax: +49 7141 56 10 86 1 _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
Hi Joachim,
I recognize the problem when dealing with loading javascript resources, but not for Seaside-rendered javascript. I find the latter a bit strange since that gets injected in a load script or a script tag, and that cannot be cached unless your entire page is cached. So, when referencing javascript sources external to the Seaside image, this is what we do to ensure a browser does not use a cached version: https://stackoverflow.com/questions/9692665/cache-busting-via-params In summary: - add a query parameter to the url of the javascript resource (i.e. behind the ‘?’ character) - use some version string in the code base as value in that query parameter such that it is different from the value in the current previous production version (using a version number is most intuitive). Here is the implementation for that in Seaside: updateRoot: aRoot … aRoot javascript resourceUrl: '/js-libs/jquery.dataTables.min.js' version: resourceVersion. … with the implementation of resourceUrl:version: is: WAContentElement>>resourceUrl: aString version: versionString "Concatenates a version string to the resource url. The version string is put in the GET request's variables list and ignored by the webserver. Changing the version string can trigger a browser cache refresh when needed." self url: ((canvas absoluteUrlForResource: aString) addField: versionString) Now, I am puzzled by the resources that are cached for generated javascript… can you share some more code on how that is included in your webpage? cheers, Johan
_______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
Johan,
thanks for the tip on adding a parameter to avoid caching. We'll try that. On the freshly rendered javascript: I might have found a clue as to what is happening there. If a cached javascript file has a syntax error, the embedded Javascript seems to be affected as well. So this is probably just the collateral damage of js errors in static files.... Joachim Am 11.09.17 um 09:45 schrieb Johan Brichau: Hi Joachim,
-- ----------------------------------------------------------------------- Objektfabrik Joachim Tuchel [hidden email] Fliederweg 1 http://www.objektfabrik.de D-71640 Ludwigsburg http://joachimtuchel.wordpress.com Telefon: +49 7141 56 10 86 0 Fax: +49 7141 56 10 86 1 _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
Free forum by Nabble | Edit this page |