Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-3021

Add timestamp part to resource filenames for better caching

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.5-M1
    • 1.5-M2.1
    • wicket
    • None

    Description

      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.

      Attachments

        1. timestamp-for-resources.patch
          25 kB
          Peter Ertl

        Activity

          People

            ivaynberg Igor Vaynberg
            pete Peter Ertl
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: