MiniProfiler - Theo dõi, kiểm tra và cải thiện performance của Rails App
Bài đăng này đã không được cập nhật trong 3 năm
1. Giới thiệu
- Đã bao giờ bạn tự hỏi liệu performance của website mình tạo ra đã đã tốt hay chưa? thời gian load của trang web mình là bao nhiêu? liệu cách cải thiện performance của mình đã thành công chưa?
- Để giải quyết các vấn đề trên thì mình sẽ giới thiệu cho bạn về công cụ
MiniProfiler
MiniProfiler
là một công cụ đơn giản giúp chúng ta có thể theo dõi :Server side
:Thời gian
server xử lý
vàrender các thành phần html
,query database
.Client side
: Thời gian khi trình duyệtload trang
,xử lý
DOM, thờ gianhiển thị nội dung
.
- Cực kỳ đơn giản và hữu ích cho việc
lập profile
,kiểm tra
vàcải thiện performance
của các Rails App. - Hiện tại MiniProfiler hỗ trợ cho các Database:
Mysql2
,Postgres
,Oracle
(oracle_enhanced ~> 1.5.0) vàMongoid3
.
2. Cài đặt
- Thêm vào gemfile
gem "rack-mini-profiler"
Lưu ý
: khi thêmgem rack-mini-profiler
phải thêmbên dưới
dòng cái đặt pg hoặc mysql2 gems. Để rack_mini_profiler sẽ xác định và cài đặt phù hợp với kiểu database mà bạn đang sử dụng ở Rails App.- Sau đó chạy lệnh
bundle install
để cài đặt - Bạn cũng có thể bao gồm các thư viện tùy chọn để kích hoạt các tính năng bổ sung:
# For memory profiling (requires Ruby MRI 2.1+) gem 'memory_profiler' # For call-stack profiling flamegraphs (requires Ruby MRI 2.0.0+) gem 'flamegraph' gem 'stackprof' # For Ruby MRI 2.1+ gem 'fast_stack' # For Ruby MRI 2.0
3. Kết quả
Sau khi cài đặt bạn đã có thể sử dụng. dưới đây là hình ảnh minh họa. show cho ta thấy thời gian của các action để show ra được trang login này.
4. Sử dụng
Sau khi cài đặt bạn đã có thể sử dụng. sau đây mình giới thiệu thêm một số tính năng của gem rack-mini-profiler
.
4.1 Chỉ định môi trường hoạt động
rack-mini-profiler
có thể sử dụng được trên cả môi trườngdevelopment
vàproduction
.- 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, mình thêm đồng thời development và production.
config.rack_mini_profiler_environments = %w(development production)
- Tiếp đến bạn thêm đoạn code sau vào
config/initializers/rack_profiler.rb
đểkhởi tạo rack-mini-profiler
trong các môi trường mà bạn thêm phía trênenvironments = 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
- Tiếp đến để tất cả các trang trong Rails App nhận được profiler thì ta thêm đoạn code sau vào
ApplicationController
:before_action :rack_mini_profiler_authorize_request 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
4.2 Chỉ định cho role nhất định có thể xem profile:
- Để 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. - Ví dụ nếu bạn muốn chỉ ai có quyền
admin mới được xem profiler
thì ta thêm đoạn code sau vàoApplicationController
:before_action :authorize def authorize if current_user.is_admin? Rack::MiniProfiler.authorize_request end end
4.3 rack-mini-profiler hỗ trợ một số params sau
pp=env
: Hiển thị thông tin về môi trường đang chạypp=skip
: Bỏ qua MiniProfilerpp=no-backtrace
: Không theo dõi các câu lệnh SQL (dùngpp=normal-backtrace
để bật lại tính năng này)pp=full-backtrace
: Theo dõi một cách chi tiết về các câu lệnh SQL được thực thi (sử dụngpp=normal-backtrace
để trở về bình thường)pp=disable
: vô hiệu hóa Miniprofilerpp=enable
: bật lại MiniProfiler ( nếu trước đó đã vô hiệu hóa)
4.4 Các tùy chỉnh cài đặt khác
- Hiển thị profile của trang ở vị trí khác (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
Có thể tham khảo thêm ở hình sau: https://images.viblo.asia/07b66d06-e3f6-4fa9-9b2b-437f6c4a04e0.png
Tài liệu tham khảo
[1] https://github.com/MiniProfiler/rack-mini-profiler [2] http://labs.septeni-technology.jp/technote/su-dung-miniprofiler-de-theo-doi-profile-cua-rails-app/
All rights reserved