package com.smartgwt.client.docs;
/**
* <h3>Caching</h3>
* Standard web browsers can cache server responses, associating the locally-cached files with
* the URLs (including query parameters) that were used to fetch the files from the
* server. Each file may be assigned an explicit expiration time. Requests for the associated
* URL will always be served from the local cache, without accessing the server, until the file
* expires.
* <p>
* The recommended approach is to move as much content as possible into cacheable assets
* (these can be images, html, css, and js) and tell the browser to cache those for as long as
* possible (ideally indefinitely). Clearly, most things can't simply be cached permanently -
* new versions of the application will often require changes to these assets. To allow for
* this, the pages that direct the loading of the cached assets should be dynamic and should
* create version-specific URLs to these cacheable assets. This can be done by tacking the
* version number as a query parameter or as a path component. Here's an example of loading a
* javascript file versioned with a query parameter:
* <pre>
* <script src='/foo/bar.js?version=13'></script>
* </pre>
* Generally, the version number wouldn't be hard-coded into the dynamic page, but would
* instead pick up the value of a variable, such that you can simply bump up the value in one
* configuration file and have all versioned URLs change dynamically.
* <p>
* Because Smart GWT performs the assembly of image URLs dynamically, versioning of
* Smart GWT skins must be done with a path component. You can do this by changing the base
* skinDir using {@link com.smartgwt.client.util.Page#setSkinDir Page.setSkinDir} - e.g:
* <pre>
* isc.Page.setSkinDir('/version/5.6/isomorphic/skins/Smart GWT/');
* </pre>
* You can then either deploy the new skins under the versioned directory above or use a URL
* rewriting engine such as mod_rewrite for Apache to map all such versions into a single
* deploy directory.
* <p>
* To actually tell the browser to cache images for a longer length of time than the browser
* session, you need to set the HTTP 'Expires' header.
* If you're not using the Smart GWT Java back-end there are several caching solutions
* available, depending on your server of choice. Microsoft's IIS has built-in caching
* capability, please check the reference manual for details. If you're using Apache, you can
* use <a href='http://httpd.apache.org/docs/2.0/mod/mod_expires.html'
* onclick="window.open('http://httpd.apache.org/docs/2.0/mod/mod_expires.html');return false;">mod_expires</a>. Some
* servlet
* containers also natively support the setting of caching headers.
* <p>
* The Smart GWT Java back-end supports setting caching headers via the FileDownload service
* on a per-mimetype basis. To use it, first register the FileDownload servlet in your web.xml
* as follows:
* <pre>
* <servlet>
* <servlet-name>FileDownload</servlet-name>
* <init-param>
* <param-name>expires</param-name>
* <param-value>text/javascript:3600,image/gif:86400</param-value>
* </init-param>
* <servlet-class>com.isomorphic.servlet.FileDownload</servlet-class>
* </servlet>
* </pre>
* The expires parameter controls the expiration time in seconds. In the block above,
* javascript files are set to expire in 1 hour and gif images are set to expire in 1 day from
* the time they are served to the browser. If you don't set explicit expires mappings, all
* images and css files will be set to expire in 1 day and javascript files will expire in 1
* hour, by default.
* <p>
* Next, map any resource that you want to serve with caching headers to the FileDownload
* servlet in your web.xml. Typically, you'll want to serve the Smart GWT modules and all
* skin images with caching headers. You can do so by adding the following servlet-mapping
* directives to your web.xml:
* <pre>
* <servlet-mapping>
* <servlet-name>FileDownload</servlet-name>
* <url-pattern>/isomorphic/system/modules/*</url-pattern>
* </servlet-mapping>
*
* <servlet-mapping>
* <servlet-name>FileDownload</servlet-name>
* <url-pattern>/isomorphic/skins/*</url-pattern>
* </servlet-mapping>
* </pre>
*/
public interface Caching {
}