Sử dụng rack-mini-profiler để theo dõi, kiểm tra performance của Rails App

Giới thiệu

MiniProfiler là một công cụ đơn giản để theo dõi thời gian server xử lý và render các thành phần html, query database, thời gian trình duyệt load trang, xử lý DOM, hiển thị nội dung. Đây là một công cụ tốt được sử dụng cho việc tìm kiếm những điểm nghẽn trong các ứng dụng của bạn. Rất hữu ích cho việc lập profile cho rails app, kiểm tra và cải thiện performance của app. Hiện tại, MiniProfiler đã hỗ trợ trong các ứng dụng sử dụng Mysql2, Postgres, Oracle (oracle_enhanced ~> 1.5.0) và Mongoid3

Cài đặt

Với rails app, bạn hãy thêm vào gemfile

gem "rack-mini-profiler",  require: false

Lưu ý. Bạn hãy chắc chắn rằng đã thêm gem rack-mini-profiler bên dưới dòng cái đặt pg hoặc mysql2. rack_mini_profiler sẽ xác định và cài đặt phù hợp với kiểu database đang sử dụng ở Rails App. Và dĩ nhiên sau khi thêm vào gemfile bạn phải chạy lệnh

bundle install

để cài đặt nó.

Sử dụng rack-mini-profiler trong rails app

rack-mini-profiler có thể sử dụng được trên cả môi trường development và production. Để kích hoạt tính năng này trên production, chỉ việc chạy Rack::MiniProfiler.authorize_request đối với những request có quyền xem profile của app. Ở bài viết này, tôi sẽ hướng dẫn các bạn cài đặt rack-mini-profiler để có thể sử dụng đồng thời trên môi trường production và development.

Đầu tiên, bạn hãy thêm vào config/application.rb môi trường mà bạn muốn sử dụng rack-mini-profiler. Ở đây, tôi thêm đồng thời development và production.

config.rack_mini_profiler_environments = %w(development production)

Một điều không thể thiếu là bạn cần phải khởi tạo MiniProfiler trong config/initializers/rack_profiler.rb

environments = Rails.application.config.rack_mini_profiler_environments
if environments.include? Rails.env
   require "rack-mini-profiler"
 
   # initialization is skipped so trigger it
   Rack::MiniProfilerRails.initialize! Rails.application
end

Đoạn code bên trên sẽ giúp bạn initialize rack-mini-profiler nếu môi trường hoạt động có trong định nghĩa enviroments mà ban đầu bạn đã định nghĩa trong config/application.rb

Và bây giờ, nhiệm vụ của bạn là để cho tất cả các page trong ứng dụng của bạn đều sẽ hiển thị một cửa sổ nho nhỏ bên góc trái màn hình các thông tin về thời gian xử lý dữ liệu, truy xuất database bằng cách thêm vào ApplicationController đoạn code sau:

def rack_mini_profiler_authorize_request
  environments = Rails.application.config.rack_mini_profiler_environments
  return unless Rails.env.in? environments
  Rack::MiniProfiler.authorize_request
end

Và cũng đừng quên

before_action :rack_mini_profiler_authorize_request

để function vừa thêm có thể hoạt động nhé.

Tada......... Vậy là xong rồi. Bây giờ trong ứng dụng rails app của bạn sẽ có 1 cửa sổ nho nhỏ bên trái màn hình như thế này.

Các tùy chỉnh cài đặt khác

Hiển thị profile của trang ở bên góc phải (thay vì góc trái như mặc định)

Rack::MiniProfiler.config.position = "right"

Để mặc định không hiển thị profile khi load trang ( Dùng phím tắt Alt + P để hiện bảng profile lên )

Rack::MiniProfiler.config.start_hidden = true

Không hiển thị những câu lệnh SQL có thời gian thực thi nhỏ hơn 5 ms

Rack::MiniProfiler.config.backtrace_threshold_ms = 5

Không theo dõi query đến database nữa

Rack::MiniProfiler.config.skip_schema_queries = true

Tài liệu tham khảo

[1] http://labs.septeni-technology.jp/technote/su-dung-miniprofiler-de-theo-doi-profile-cua-rails-app/ [2] https://github.com/MiniProfiler/rack-mini-profiler