Random Number Appended to Images,JS and CSS files

I am really curious... what is up with the random number being appended to the query string of calls to JS, CSS and Image files? At first I thought it was just for development mode so that files would not be cached but when I went to my site in production mode the random number where appended as well. Does anyone know the design decision behind this? Or if the number really is random?

Is their a function to get that random number for when I create my own helpers?

Thanks for your insite.

Your Friend,

John Kopanas

I am really curious... what is up with the random number being appended to the query string of calls to JS, CSS and Image files? At first I thought it was just for development mode so that files would not be cached but when I went to my site in production mode the random number where appended as well. Does anyone know the design decision behind this? Or if the number really is random?

Is their a function to get that random number for when I create my own helpers?

Quote from Peak Obsession (*1.12.1* (April 6th, 2006)):

Added automated timestamping to AssetTagHelper methods for stylesheets, javascripts, and images when Action Controller is run under Rails [DHH]. Example:

  image_tag("rails.png") # => '<img alt="Rails" src="/images/rails.png?1143664135" />'

…to avoid frequent stats (not a problem for most people), you can set RAILS_ASSET_ID in the ENV to avoid stats:

  ENV["RAILS_ASSET_ID"] = "2345"   image_tag("rails.png") # => '<img alt="Rails" src="/images/rails.png?2345" />'

This can be used by deployment managers to set the asset id by application revision

=== end of quote ===

Regards, Rimantas

Thanks Rimantas... I appreciate it. Stilld does not explain why though. I am a big why type of guy. Anyone know why?

The reason for the timestamps on assets is to deal with browser caching. Browsers tend to cache css and js for a while when they have the same name and url. This just forces the browser to reload the css or js or image when you make changes to it. This way your users don't get stale assets that don't match the html like they should. Its especially helpful in dev mode when often you are making frequent changes to the css and js and you want them to reload in the browser without the need for you to flush your browsers cache.

-Ezra

I understand this is very helpful in dev mode but is this a good thing in production mode? Downloading the CSS file every single time the user accesses a page of yours slows things down doesn't it. Isn't one of the benefits of putting CSS in a seperate file the fact that it can be cached?

Do people tend to turn this off for production?

You know what... you might be right. Refreshing the page does not get me a new timestamp.