Я не думал, что предпочту Turbolinks одностраничному фреймворку приложений, например ReactJS или Angular, но я предпочитаю!

Прошло почти 5 лет с тех пор, как я работал над серьезным приложением на Rails. Последней основной версией, которую я использовал, была Rails 3. Мне всегда нравилось писать на Ruby и использовать Rails для веб-приложений. Когда мы решили использовать Rails для нашей новой (еще не запущенной) службы LODR.IO, я был очень взволнован. Три года использования Java и создания настольного приложения стали утомительными.

LODR.IO делает загрузку файлов в RedShift простой и масштабируемой. Он использует бессерверную архитектуру для обработки данных в сочетании с приложением Rails для управления заданиями. Я напишу об этом позже, но это чертовски круто!

При всем волнении вокруг ReactJS и Angular я отказался, когда узнал о Turbolinks. Каждый щелчок по ссылке как вызов Ajax для рендеринга представлений на стороне сервера? Разве рендеринг на стороне клиента не будет быстрее, поскольку он позволяет избежать обхода сети? По сравнению с этим он не может быть достаточно отзывчивым.

Turbolinks превращает каждый щелчок по ссылке в вашем приложении в вызов Ajax. Ваш сервер отображает представление с помощью ERB (или любого механизма шаблонов) и отправляет ответ в формате html. Затем Turbolinks удаляет текущее тело и заменяет его ответом. Как и все одностраничные фреймворки Javascript, большинство файлов Javascript и CSS загружаются и анализируются при первой инициализации приложения. Таким образом, каждый щелчок по ссылке просто обновляет представление.

Со страницы GitHub Turbolinks:

Turbolinks ускоряет навигацию по вашему веб-приложению. Получите преимущества производительности одностраничного приложения без дополнительной сложности клиентской инфраструктуры JavaScript. Используйте HTML, чтобы отображать ваши представления на стороне сервера и ссылаться на страницы как обычно. Когда вы переходите по ссылке, Turbolinks автоматически выбирает страницу, меняет ее <body> и объединяет ее <head>, и все это без затрат на полную загрузку страницы.

Так в чем же разница между чисто клиентским фреймворком и Turbolinks? Немного. В первом случае вам все равно придется делать запросы к серверу на ресурсы. Ответ представляет собой просто JSON, и его необходимо проанализировать и отобразить на стороне клиента. Turbolinks возвращает ресурс в виде полностью визуализированного представления. Это действительно дает вам лучшее из обоих миров. Вы по-прежнему можете выполнять рендеринг на стороне клиента, когда вам это нужно. Для LODR.IO мы используем рендеринг на стороне клиента для сильно интерактивных частей нашего приложения. Здесь частые поездки туда и обратно могут ухудшить пользовательский опыт. Однако для простых частей CRUD нашего приложения (около 80%) лучше всего использовать Turbolinks.

Turbolinks отлично работает с фреймворком Rails. Вчера вечером я обнаружил, что если вы вручную отправите форму с помощью Ajax и ваше действие Rails выполняет перенаправление, вы получите следующий ответ:

Turbolinks.clearCache();
Turbolinks.visit("your redirected path")

Это просто офигенно!