Time-based HTTP Caching in Sinatra
It's always a pleasant surprise to come across a library that behaves exactly the right way in the first place rather than forcing you to build helpers from its primitives. Sinatra's
last_modified response helper is a great example of this.
Time-based HTTP caching is a simple technique to give smart clients a significant performance boost when accessing content. After receiving a single
Last-Modified header, they can pass the pass the same timestamp back to the server on the next response via the
If-Modified-Since header, giving the server the opportunity to respond with a
304 Not Modified if the content is still fresh. When responding with a 304, no body is transferred in the response, curbing bandwidth use, and perhaps more importantly, saving the end user from having to re-render the content.
last_modified does all the right things:
- If the client sent a
If-Modified-Since, halts the executing block if the timestamp matches.
- Otherwise, allows execution to continue normally.
Most importantly, its usage results in simple and readable code:
get "/:id" do |id| @article = Article.first(slug: id) || raise(Sinatra::NotFound) last_modified(@article.updated_at) slim :show end