This project is not covered by Drupal’s security advisory policy.

RefreshLess makes navigating your web site faster by only loading the parts that change between pages. Uses the ideas behind Turbolinks technique (pioneered by Rails). But it goes further: thanks to Drupal 8's architecture, we're able to automatically figure out which parts of a page change. So, we only need to send the parts of the page that actually change.

When clicking a link that points to a URL within the Drupal site, we then keep the current page, but just swap the parts that change between the current page and the next. This means less data on the wire, and — most importantly — less work for the browser.

How does this work?

  1. During rendering, we annotate the regions on the page so JavaScript can find them reliably. For now, RefreshLess works at the region level (and not the block level) to ensure it works with any page, no matter whether it uses Blocks, Panels or Page Manager.
  2. Drupal 8 already has all the necessary cacheability metadata, and in particular cache contexts, which describe how each part of the page varies.
  3. The RefreshLess module uses the cache contexts associated with a particular region to determine whether this region changes compared to the page the user is currently on. It only sends the updated markup for that region if it actually changes.
  4. This results in hugely improved front-end/perceived performance.

So, unlike Turbolinks in Rails, using RefreshLess requires zero code and configuration.

Combined with the BigPipe module (which offers significant improvements for the initial page load), this should make just about any Drupal site feel significantly faster.

Don't forget to apply the included core patch! We're working on making this unnecessary, but for now it is required. See #2708619: Remove reliance on core patch.

Supporting organizations: 
Sponsored all development, including the necessary API support in Drupal 8

Project Information