Cách tốt nhất để cấu hình hành động bộ điều khiển trong Ruby on Rails là gì. Hiện tại tôi đang sử dụng phương pháp brute-force để ném trong các cuộc gọi puts Time.now
giữa những gì tôi nghĩ sẽ là một nút cổ chai. Nhưng điều đó cảm thấy thực sự, thực sự bẩn thỉu. Co cach tôt hơn ma.Cấu hình hành động của trình điều khiển đường ray
Trả lời
Sử dụng thư viện chuẩn Benchmark và các thử nghiệm khác nhau có sẵn trong Rails (đơn vị, chức năng, tích hợp). Dưới đây là ví dụ:
def test_do_something
elapsed_time = Benchmark.realtime do
100.downto(1) do |index|
# do something here
end
end
assert elapsed_time < SOME_LIMIT
end
Vì vậy, ở đây chúng tôi chỉ thực hiện 100 lần, thông qua thư viện Điểm chuẩn và đảm bảo mất ít hơn SOME_LIMIT lượng thời gian.
Bạn cũng có thể thấy các liên kết này hữu ích: Benchmark.realtime reference và Test::Unit reference. Ngoài ra, nếu bạn đang đọc sách 'đọc sách', tôi đã chọn ý tưởng cho ví dụ từ Agile Web Development with Rails, nói về tất cả các loại thử nghiệm khác nhau và một chút về thử nghiệm hiệu suất.
Có một railscast trên hồ sơ đó là cũng có giá trị xem
Bạn có thể muốn cung cấp cho các dịch vụ FiveRuns TuneUp thử, vì nó thực sự khá ấn tượng. Tuyên bố từ chối trách nhiệm: Tôi không liên kết với FiveRuns theo bất kỳ cách nào, tôi vừa thử dịch vụ này.
TuneUp là dịch vụ miễn phí, theo đó bạn tải xuống plugin và khi bạn chạy ứng dụng, nó sẽ chèn một bảng ở đầu màn hình có thể được mở rộng để hiển thị số liệu hiệu suất chi tiết.
Nó cung cấp cho bạn một số biểu đồ đẹp, bao gồm một biểu đồ cho biết tỷ lệ thời gian được sử dụng trong Mô hình, Chế độ xem và Bộ điều khiển. Bạn thậm chí có thể khoan xuống ngay để xem các truy vấn SQL riêng lẻ mà ActiveRecord đang thực thi nếu bạn cần và nó có thể hiển thị cho bạn lược đồ cơ sở dữ liệu cơ sở với một lần nhấp khác.
Cuối cùng, bạn có thể tùy chọn tải lên dữ liệu lược tả của mình lên trang web FiveRuns để phân tích và tư vấn về hiệu suất cộng đồng.
Liên kết bị hỏng (DNS hết hạn). – mrzasa
Tôi đã chọn kỹ thuật này một lúc trở lại và thấy nó khá tiện dụng.
Khi thiết bị được đặt đúng chỗ, bạn có thể thêm ?profile=true
vào bất kỳ URL nào truy cập bộ điều khiển. Hành động của bạn sẽ chạy như bình thường, nhưng thay vì cung cấp trang được hiển thị cho trình duyệt, nó sẽ gửi trang ruby-prof được định dạng chi tiết, được định dạng độc đáo thể hiện nơi hành động của bạn đã dành thời gian.
Đầu tiên, thêm ruby-prof để Gemfile của bạn, có lẽ trong nhóm phát triển:
group :development do
gem "ruby-prof"
end
Sau đó, thêm một around filter để ApplicationController của bạn:
around_filter :profile if Rails.env == 'development'
def profile
if params[:profile] && result = RubyProf.profile { yield }
out = StringIO.new
RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
self.response_body = out.string
else
yield
end
end
Reading đầu ra ruby-prof là một một chút nghệ thuật, nhưng tôi sẽ để nó như một bài tập.
lưu ý bổ sung bởi ScottJShea: Nếu bạn muốn thay đổi kiểu đo nơi này:
RubyProf.measure_mode = RubyProf::GC_TIME #example
Trước if
trong phương pháp thông tin về bộ điều khiển ứng dụng. Bạn có thể tìm danh sách các số đo có sẵn tại ruby-prof page. Theo văn bản này, các luồng dữ liệu memory
và allocations
dường như bị hỏng (see defect).
đối với bất cứ ai cun'n'pasting này, bạn cũng cần phải thêm "yêu cầu" ruby-prof "" ở trên cùng của ApplicationController của bạn. Ngoài ra, đối với tôi, tôi phải thay đổi "self.response_body =" thành "self.response.body =" (Rails 2.3.14) – Pavling
Cảm ơn những chỉnh sửa đó. 'response_body' đã được thêm vào trong Rails 3.0. Và nếu bạn đang sử dụng bundler, bạn không cần phải yêu cầu ruby-prof, nhưng tôi rất vui vì kỹ thuật này khá thích nghi với phiên bản cũ của Rails. –
Cảm ơn bạn đã đầu, Pavling. Tôi cũng đang sử dụng đường ray 2.3.14 và gặp sự cố khi làm việc này. Tôi nhận được "sai số đối số (0 cho 1)" trong graph_html_printer.rb: 98: trong 'full_name ', bất kể phiên bản ruby-prof tôi cài đặt là gì. Bất kỳ ý tưởng gì có thể gây ra điều đó? – jsarma
này hoạt động trong Rails 4.2.6:
o=OpenStruct.new(logger: Rails.logger)
o.extend ActiveSupport::Benchmarkable
o.benchmark 'name' do
# ... your code ...
end
- 1. Đường ray: Hướng đến hành động điều khiển tùy chỉnh
- 2. Làm cách nào để bạn phát hành phản hồi 404 từ hành động của trình điều khiển đường ray?
- 3. Cách tải cấu hình khi khởi động trong đường ray?
- 4. Rails.env và Config.root có hoạt động trong mô hình 'giao diện điều khiển đường ray' không?
- 5. phương thức không xác định `devise_for 'trong bộ điều khiển hành động đường ray
- 6. thực hiện cuộc gọi ajax để điều khiển hành động trong đường ray
- 7. Tải lại bảng điều khiển đường ray
- 8. Tôi có thể gọi một hành động trong một hành động khác (trong bộ điều khiển đường ray) không?
- 9. Điều khiển thoát khỏi đường ray sau khi hiển thị
- 10. Cải thiện thời gian khởi động Rails chậm (bảng điều khiển đường ray, máy chủ đường ray)
- 11. Tỷ lệ giới hạn cho bộ điều khiển đường ray
- 12. Khi nào tạo bộ điều khiển mới trong đường ray
- 13. nhận tuyến đường đến hành động điều khiển (url) theo lập trình
- 14. Hình thức động trong đường ray
- 15. Có cách nào để định cấu hình bảng điều khiển đường ray để chạy lại trình khởi tạo của tôi không?
- 16. Làm thế nào để có được danh sách các bộ điều khiển và hành động trong ruby trên đường ray?
- 17. làm cách nào để tải lại mô hình trong bảng điều khiển đường ray?
- 18. đường ray s hoặc bó đường ray hành lý s
- 19. Tuyến đường Ruby trên đường ray đến phương thức tùy chỉnh trong bộ điều khiển từ màn hình
- 20. Đường ray: Truyền tham số có hiển thị: hành động?
- 21. Cách đổi tên bộ điều khiển và mô hình đường ray trong một dự án
- 22. Đặt cấu hình Notepad ++ cho ruby trên đường ray
- 23. bảng điều khiển đường ray - chạy một khối mã
- 24. Gửi email từ bảng điều khiển đường ray
- 25. xem đường ray mà không cần bộ điều khiển
- 26. Bàn cắt ngắn với bảng điều khiển đường ray
- 27. Đường ray 3 URL không có tên bộ điều khiển
- 28. Bố cục đường ray trên mỗi bộ điều khiển
- 29. Đường ray tạo ra Bộ điều khiển Phiên
- 30. Chạy di chuyển từ bảng điều khiển đường ray
Câu trả lời này sẽ cho bạn biết làm thế nào để chắc chắn rằng hành động của bạn đang chạy một cách nhanh chóng đủ. Nó không giúp bạn với hồ sơ, mà là tìm ra một phần của hành động là dành nhiều thời gian nhất. –