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 ...
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