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 4 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 MiniProfilerlà một công cụ đơn giản giúp chúng ta có thể theo dõi :Server side:Thời gianserver 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 travàcải thiện performancecủ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-profilerphải thêmbên dướidò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-profilercó thể sử dụng được trên cả môi trườngdevelopmentvà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-profilertrong 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 profilerthì 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 = trueCó 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