I really, really like the approach that this JavaScript library is taking in treating Ajax as a progressive enhancement:
Turbolinks intercepts all clicks on a href
links to the same domain. When you click an eligible link, Turbolinks prevents the browser from following it. Instead, Turbolinks changes the browser’s URL using the History API, requests the new page using XMLHttpRequest
, and then renders the HTML response.
During rendering, Turbolinks replaces the current body
element outright and merges the contents of the head
element. The JavaScript window
and document
objects, and the HTML html
element, persist from one rendering to the next.
Here’s the mustard it’s cutting:
It depends on the HTML5 History API and Window.requestAnimationFrame. In unsupported browsers, Turbolinks gracefully degrades to standard navigation.
This approach matches my own mental model for building on the web—I might try playing around with this on some of my projects.