- vừa được xem lúc

7 Mẹo Tối Ưu Hiệu Suất Ứng Dụng Ruby on Rails

0 0 5

Người đăng: Đặng Đình Luân

Theo Viblo Asia

Rails là một framework mạnh mẽ nhưng nếu không tối ưu đúng cách, ứng dụng của chúng ta sẽ dễ bị chậm hoặc tốn tài nguyên không cần thiết. Dưới đây là 7 mẹo giúp cải thiện hiệu suất khi làm việc với Ruby on Rails.

1. Tránh N+1 Query bằng Eager Loading

Rails có thể tự động gọi thêm nhiều truy vấn nếu chúng ta không load dữ liệu liên quan đúng cách:

# Bad: mỗi comment gọi riêng 1 query cho post
Comment.all.each do |c| puts c.post.title
end # Good: eager load bằng includes
Comment.includes(:post).each do |c| puts c.post.title
end

👉 Sử dụng includes, preload hoặc eager_load khi cần lấy dữ liệu liên kết.

2. Cache Fragment để giảm render view

Sử dụng cache trong view giúp Rails không phải render lại đoạn HTML nếu dữ liệu không đổi.

<% cache @post do %> <%= render @post %>
<% end %>

👉 Kết hợp với touch: true trong model để cache tự cập nhật khi dữ liệu thay đổi.

3. Sử dụng select để tránh tải dữ liệu không cần thiết

Không nên gọi Model.all nếu chỉ cần vài cột.

# Bad
User.all # Good
User.select(:id, :email).where(active: true)

👉 Giảm thời gian truy vấn và dung lượng RAM tiêu tốn.

4. Dùng find_each để xử lý dữ liệu lớn

Khi lặp qua hàng ngàn bản ghi, hãy dùng find_each thay vì each:

# Good
User.find_each do |user| user.send_newsletter
end

👉 Rails sẽ chia nhỏ bản ghi thành từng batch (mặc định 1000), giúp tiết kiệm RAM.

5. Ghi log hiệu quả – tránh spam log

Rails log mặc định khá nhiều. Hãy giảm noise và format lại cho dễ đọc:

# config/environments/production.rb
config.log_level = :info

👉 Có thể dùng gem như lograge để gọn gàng hơn.

6. Dùng Bullet Gem để bắt lỗi N+1

Cài gem bullet trong môi trường phát triển để tự động phát hiện và cảnh báo N+1 query:

# Gemfile
group :development do gem 'bullet'
end

👉 Hiển thị popup hoặc log lỗi khi query chưa tối ưu.

7. Redis + Sidekiq cho xử lý nền

Các tác vụ tốn thời gian như gửi email, tạo báo cáo nên được chuyển sang background job:

# jobs/example_job.rb
class ExampleJob < ApplicationJob queue_as :default def perform(user_id) UserMailer.welcome_email(User.find(user_id)).deliver_now end
end

👉 Sidekiq kết hợp Redis giúp xử lý hàng ngàn job nhanh và ổn định.

Kết luận

Tối ưu hiệu suất trong Rails không quá phức tạp, chỉ cần áp dụng một số thói quen tốt khi truy vấn, ghi log, cache và xử lý nền. Những mẹo trên là nền tảng để ứng dụng của chúng ta hoạt động mượt mà hơn trong thực tế.

Có tips nào bạn hay dùng mà chưa được nhắc tới? Hãy chia sẻ dưới phần bình luận nhé!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Bài toán tìm đường đi ngắn nhất với giải thuật Dijkstra

Với các bạn sinh viên chuyên ngành công nghệ thông tin, chắc không lạ gì với bài toán tìm đường đi ngắn nhất (Shortest Path Problems) trong đồ thị trọng số nữa. Ở bài viết lần này, mình sẽ làm 3 việc:.

0 0 143

- vừa được xem lúc

Tôi cá là bạn không biết những điều này - Ruby on rails ( Phần 2)

Các bạn có thể theo dõi phần 1 ở đây :. https://viblo.asia/p/toi-ca-la-ban-khong-biet-nhung-dieu-nay-ruby-on-rails-phan-1-WAyK8DDeKxX. 5.

0 0 233

- vừa được xem lúc

Những thay đổi trong ruby 3.0

. 2020 là một năm lớn đối với cộng đồng Ruby. Những người sáng lập Ruby có một món quà thực sự tuyệt vời cho chúng ta vào giáng sinh với việc phát hành Ruby 3.

0 0 59

- vừa được xem lúc

Có gì đặc biệt trong phiên bản Ruby 3x3 ?

Hello guys, chắc hẳn thời gian vừa rồi chúng ta cũng đã nghe qua thông tin Ruby sắp cho ra mắt Ruby version 3, hay còn được gọi là ruby 3x3, vậy liệu Ruby version 3 này có gì mới, và có những update nào đáng phải kể đến, và tại sao mọi người lại gọi nó là ruby version 3x3, thì trong bài ngày hôm nay

0 0 49

- vừa được xem lúc

Cách sử dụng class Time & Date trong Ruby (Phần 1)

Time là một class trong Ruby, nó sẽ giúp chỉnh sửa format, trích xuất thông tin một cách hiệu quả theo ý của bạn. . Topic hôm nay chúng ta có gì nào. .

0 0 103

- vừa được xem lúc

Ruby 3.0 có gì mới

Ruby 3.0.0 đã được ra mới được ra mắt vào tháng 12/2020, mục tiêu của bản 3.0.

0 0 49