Conditional Caching is usually something that many developers forget while deploying to production.
In this post, I will refresh your memory by summarizing those options and improving your application performance.
Setting etag
or/and last_modified
in the response
The request will return 304 status code if nothing changed.
fresh_when example
class ArticleController < ApplicationController def show @article = Article.find(params[:id]) fresh_when(etag: @article, last_modified: @article.updated_at) end end
Note: check the fresh_when documentation for all possible options.
Checking etag
and last_modified
against the client request with slate?
class ArticleController < ApplicationController def show @article = Article.find(params[:id]) if stale?(@article) @statistics = @article.statistics # very long task respond_to do |format| format.html # show.html.erb end end end end
Note: slate API
slate?
is similar to fresh_when
but adds an additional helper to make responses efficiently.
My rule: If you have special response processing, use slate?
helper. Otherwise, fresh_when
is your default choice.
Happy Hacking!
Top comments (0)