Turbolinks

Turbolinks в Rails - это отличный способ ускорить загрузку страниц. Суть фишки - в том, чтобы вместо полной перезагрузки страницы при нажатии на ссылку подгружать только изменившуюся часть. Как я выяснил, пока делал этот блог, подход имеет и подводный камень. При обновлении части страницы не происходит события ready, из-за чего такие вещи, как highlight.js, отвечающий тут за подсветку синтаксиса, не обрабатывают обновлённый контент.

Решением проблемы является использование событий, добавляемых Turbolinks'ом:

  • page:before-change a Turbolinks-enabled link has been clicked (see below for more details)
  • page:fetch starting to fetch a new target page
  • page:receive the page has been fetched from the server, but not yet parsed
  • page:change the page has been parsed and changed to the new version and on DOMContentLoaded
  • page:update is triggered whenever page:change is PLUS on jQuery's ajaxSucess, if jQuery is available (otherwise you can manually -trigger it when calling XMLHttpRequest in your own code)
  • page:load is fired at the end of the loading process.

Т.о. для того, чтобы подсветка синтаксиса работала при переходах между страницами я использую такой код (warning: coffeescript sintax!):

$(document).on 'page:change', ->
  $('pre code').each (i, e) ->
    hljs.highlightBlock(e)