Turbo: Enhancing Rails 7 for Faster Web Apps

Published on

Turbo: Enhancing Rails 7 for Faster Web Apps

As web applications evolve, the need for faster, more efficient user experiences becomes paramount. Rails 7 introduces Turbo, a powerful tool that revolutionizes how we build web applications. In this article, we'll delve into the features of Turbo, explore its configuration, and present code snippets that illustrate how it can be utilized effectively to develop faster web apps.

What is Turbo?

Turbo is part of the Hotwire framework introduced by Basecamp in Rails 7, designed to create fast, efficient web applications without relying heavily on traditional JavaScript frameworks. It allows developers to accelerate page loads by speeding up interactions and reducing the complexity of JavaScript necessary for frontend development.

Here's a quick summary of Turbo's primary features:

  • Turbo Drive: Replaces traditional page navigation with AJAX, which means users stay on the page without full reloads for every interaction.
  • Turbo Frames: Allows sections of your HTML page to be updated independently, promoting the concept of partial page updates.
  • Turbo Streams: Facilitates real-time updates by sending HTML snippets to the client when data changes on the server.

Why Choose Turbo?

Implementing Turbo leads to several advantages:

  • Increased Performance: Faster navigations enhance user experience and engagement.
  • Reduced Load on the Server: Turbo minimizes the number of requests made resulting in lower server load.
  • Simplified Client-Side Code: By offloading more functionality to Turbo, the need for custom JavaScript solutions reduces significantly.

Getting Started with Turbo

Let’s dive into how to configure and use Turbo in a Rails 7 application.

Installing Turbo

To get started, you need to add Turbo to your Rails project. If you are creating a new Rails application, you can simply run:

rails new my_app --skip-javascript

This command creates a new Rails application without default JavaScript. Next, navigate into your app directory:

cd my_app

Then, add the turbo-rails gem to your Gemfile:

gem 'turbo-rails'

After you have added the gem, run:

bundle install

Finally, include Turbo in your JavaScript pack file:

import { Turbo } from "@hotwired/turbo-rails"

Using Turbo Drive

Turbo Drive allows for faster page navigation by fetching new page content via AJAX. Pages will render without a full reload.

For instance, replace your application layout file (e.g., app/views/layouts/application.html.erb) with:

<!DOCTYPE html>
<html>
<head>
  <title>MyApp</title>
  <%= csrf_meta_tags %>
  <%= csp_meta_tag %>
  <%= stylesheet_link_tag "application", media: "all" %>
  <%= javascript_include_tag "application" %>
</head>
<body>
  <%= yield %>
</body>
</html>

To utilize Turbo Drive, simply ensure your links are standard anchor tags:

<%= link_to 'Show Post', post_path(post) %>

This will now utilize Turbo for a seamless navigation experience.

Introducing Turbo Frames

Turbo Frames enable you to update specific parts of your page without a full reload. This is extraordinarily useful for large forms and dynamic components.

Example: Suppose you have a form that allows users to submit comments. Instead of refreshing the whole page to display the new comment, you can wrap your form in a Turbo Frame:

<turbo-frame id="new_comment">
  <%= form_with(model: @comment, local: false) do |form| %>
    <%= form.text_area :body %>
    <%= form.submit 'Add Comment' %>
  <% end %>
</turbo-frame>

In your CommentsController, after a successful comment creation, respond with Turbo-compatible response:

def create
  @comment = Comment.new(comment_params)
  if @comment.save
    respond_to do |format|
      format.turbo_stream { render turbo_stream: turbo_stream.prepend("comments", @comment) }
      format.html { redirect_to post_path(@post) }
    end
  else
    render :new
  end
end

The turbo_stream.prepend method inserts the newly created comment into the "comments" frame without needing a page refresh. This approach not only improves performance but also enhances user experience.

Real-Time Updates with Turbo Streams

Turbo Streams allow developers to provide real-time updates to the page from the server using ActionCable. This feature is crucial for collaborative applications that require live data updates.

First, set up ActionCable in your Rails application. This typically involves defining your channels and making sure you have the required configurations. Here’s a brief overview of creating a simple channel:

rails generate channel Comments

This generates a channel file where you can define the broadcasting logic:

class CommentsChannel < ApplicationCable::Channel
  def subscribed
    stream_from "comments"
  end
end

Whenever a new comment is added, broadcast it to the channel:

def create
  @comment = Comment.new(comment_params)
  if @comment.save
    ActionCable.server.broadcast("comments", {
      title: @comment.body,
      body: render_to_string(partial: "comment", locals: { comment: @comment })
    })
  end
end

In your view, listen for data from the channel:

<turbo-stream target="comments" action="append">
  <template>
    <%= render @comment %>
  </template>
</turbo-stream>

With this setup, any new comment created will seamlessly appear in the comments section without requiring the user to refresh the page.

In Conclusion, Here is What Matters

Turbo is a game-changer for developers working with Rails 7. By leveraging Turbo Drive, Frames, and Streams, you can craft faster, more responsive web applications. Its integrated approach reduces the need for extensive JavaScript while delivering an enhanced user experience.

For more insights on Turbo and Hotwire, you can check Hotwire’s official documentation and Rails Guides. Start today by integrating Turbo into your Rails application, and transform how users interact with your web applications.

Embrace the future of web development with Rails 7 and Turbo, and watch your web applications soar in performance and user engagement!


This blog post highlighted the transformative capabilities introduced with Turbo in Rails 7. Developing with Turbo not only boosts efficiency but also keeps your codebase neat and maintainable. As web technologies continue to progress, staying ahead of the curve is essential for every developer. Keep experimenting with Turbo and discover the best practices that fit your development needs. Happy coding!