+1

MiniProfiler - Theo dõi, kiểm tra và cải thiện performance của Rails App

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ýrender các thành phần html, query database .
    • Client side: Thời gian khi trình duyệt load trang, xử lý DOM, thờ gian hiển thị nội dung.
  • Cực kỳ đơn giản và hữu ích cho việc lập profile, kiểm tracả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êm gem rack-mini-profiler phải thêm bê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ường developmentproduction.
  • 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ên
    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
    
  • 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ào ApplicationController:
    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ạy
  • pp=skip : Bỏ qua MiniProfiler
  • pp=no-backtrace : Không theo dõi các câu lệnh SQL (dùng pp=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ụng pp=normal-backtrace để trở về bình thường)
  • pp=disable : vô hiệu hóa Miniprofiler
  • pp=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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí