[ https://issues.apache.org/jira/browse/WICKET-3021?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12903825#action_12903825 ]
Peter Ertl commented on WICKET-3021: ------------------------------------ I would consider this an alternate approach. Using MAC's sounds like a good idea either. It is not that hard to add some kind of IResourceVersionProvider once we get an basic version running errors-free. However keep in mind that creating hashes is more expensive then getting the last modified date of a file. So some kind of caching would be appropriate. Even for the timestamps caching would eventually make sense. I consider this a second step. The timestamp that gets delivered from wicket resources comes straight out off the jar file *afaik*. It should be the time of the file in the file system when it was packaged. So the timestamp should be the equal when running the same jar file on multiple cluster nodes. Even in case the timestamps were different it would not matter. The whole purpose of timestamps is not to be unique. They just have to change when the files contents change. This will cause your browser to not look up the cache for the resource.In fact it looks like a different resource as the file name is different. The web application does not care about the timestamp but always deliver the most current one (which is included in the jar). Not hitting the cache when touching resources is all we want. Conceptionally things will be the same when running an exploded jar. In that case the timestamps are taken from the files in the file system. > Add timestamp part to resource filenames for better caching > ----------------------------------------------------------- > > Key: WICKET-3021 > URL: https://issues.apache.org/jira/browse/WICKET-3021 > Project: Wicket > Issue Type: Improvement > Components: wicket > Affects Versions: 1.5-M1 > Reporter: Peter Ertl > Attachments: timestamp-for-resources.patch > > > Even though we have > getResourceSettings().setAddLastModifiedTimeToResourceReferenceUrl() this > still is far from perfect. It will add a query parameter to resource > filenames so caches should invalidate when the parameter changes. However if > caching is very aggressive altering the query param might not be enough. Then > there will be stale resources left in the cache of the browser or some > intermediate proxy. Users will complain and you have to tell them to press > F5, clear the cache, or whatever :-( > So I decided to implement support for adding the timestamp of the resource as > part of the filename. > When you have a resource link like > <link rel="stylesheet" type="text/css" > href="wicket/resource/my.great.app.HomePage/css/style.css"/> > a timestamp (the last modified timestamp of the file) will be injected into > the base name of the file > <link rel="stylesheet" type="text/css" > href="wicket/resource/my.great.app.HomePage/css/style-ts1282376261000.css"/> > the format is > [path-component]* / [base-filename] "-ts" [timestamp-in-milliseconds] > (.extension) > The prefix "-ts" (TS = timestamp) is to avoid naming conflicts with filenames > that already got with a numeric part before the extension. > Locales, style and variations are taken into consideration (e.g. style.css, > style_de.css, style_en.css) > When running your test cases the MockApplication which WicketTester provides > in the default case has timestamps disabled so you can check you rendered > markup against some predictable url. > You can control and check timestamp behavior with > getResourceSettings().setUseTimestampOnResources() > and > getResourceSettings().getUseTimestampOnResources() > Default behavior is 'enabled' > You are now able to configure your resource caching for a very large lifetime > (say 'infinite' :-) and get the best possible network performance and > utilization of proxies. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.