Каков наилучший способ профилировать действие контроллера в Ruby on Rails. В настоящее время я использую метод грубой силы, бросая в puts Time.now
звонки между тем, что я думаю, будет узким местом. Но это действительно действительно грязно. Должен быть лучший способ.Профиль a rails controller action
ответ
Используйте стандартную библиотеку Benchmark и различные тесты, доступные в Rails (единица, функциональность, интеграция). Вот пример:
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
Итак, мы просто сделать что-то в 100 раз, время его с помощью Benchmark библиотеки, и убедитесь, что прошло меньше суммы SOME_LIMIT времени.
Вы также можете найти эти ссылки полезными: Benchmark.realtime reference и Test::Unit reference. Кроме того, если вы входите в «чтение книг», я взял идею для примера от Agile Web Development with Rails, в которой рассказывается о различных типах тестирования и немного о тестировании производительности.
Там в Railscast по профилированию, что хорошо стоит смотреть
Вы можете дать FiveRuns TuneUp отслуживать попробовать, как это на самом деле довольно внушительны. Отказ от ответственности: Я никоим образом не связан с FiveRuns, я только что попробовал эту услугу.
TuneUp - бесплатный сервис, посредством которого вы загружаете плагин, и когда вы запускаете приложение, оно вводит панель в верхней части экрана, которая может быть расширена, чтобы отображать подробные показатели производительности.
Это дает вам несколько хороших графиков, в том числе тот, который показывает, какая часть времени проводится в модели, представлении и контролере. Вы можете даже выполнить сверление вниз, чтобы увидеть отдельные SQL-запросы, которые выполняет ActiveRecord, если вам нужно, и он может показать вам базовую схему базы данных с помощью другого щелчка.
Наконец, вы можете дополнительно загрузить свои данные профилирования на сайт FiveRuns для анализа эффективности и консультаций сообщества.
Ссылка не действительна (DNS истек). – mrzasa 2012-12-27 14:47:55
Я поднял эту технику некоторое время назад и нашел ее весьма удобной.
Когда он на месте, вы можете добавить ?profile=true
на любой URL-адрес, попавший на контроллер. Ваше действие будет работать как обычно, но вместо того, чтобы доставлять отображаемую страницу в браузер, она отправит подробную, красиво отформатированную страницу ruby-prof, которая показывает, где ваше действие проводило свое время.
Во-первых, добавить рубиновый-Prof к вашему Gemfile, вероятно, в группе развития:
group :development do
gem "ruby-prof"
end
Затем добавьте around filter к вашему ApplicationController:
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
Чтение вывода рубин-Prof является бит искусства, но я оставлю это как упражнение.
Дополнительное примечание ScottJShea: Если вы хотите изменить тип измерения место это:
RubyProf.measure_mode = RubyProf::GC_TIME #example
Перед тем как if
в методе профиля контроллера приложения. Вы можете найти список доступных измерений на ruby-prof page. На момент написания этого сообщения потоки данных memory
и allocations
, по-видимому, были повреждены (see defect).
для всех, кто купил это, вам также нужно добавить «require« ruby-prof »в верхней части вашего ApplicationController. Кроме того, для меня мне пришлось изменить «self.response_body =» на «self.response.body =» (Rails 2.3.14) – Pavling 2012-09-23 10:01:53
Это работает в Rails 4.2.6:
o=OpenStruct.new(logger: Rails.logger)
o.extend ActiveSupport::Benchmarkable
o.benchmark 'name' do
# ... your code ...
end
- 1. Rails Admin controller action action
- 2. Rails 4 & Controller action
- 3. Rails Controller Action
- 4. rails rspec controller action object метод stub
- 5. Модальное всплывающее окно на Rails Controller Action
- 6. Rails AJAX a Destroy Action
- 7. Rails: DropDown Selection to Controller Action
- 8. undefined method `devise_for 'in rails action controller
- 9. Почему Rails Controller Action Method Требуется параметр
- 10. Rails Controller action render last page?
- 11. Rails: Route to custom controller action
- 12. rails controller action И javascript onclick
- 13. Rails: Form Tag Scipping Controller Action
- 14. Rails маршрутизации, как HTTP :: //host.com/controller-action-controller
- 15. Ember.js Router Action to Controller
- 16. Указатель Action Java Spring Controller
- 17. Spring Multi Action Controller
- 18. mvc controller default action
- 19. Laravel sub action controller
- 20. Mod_ReWrite module/controller/action
- 21. Action Controller: Исключение выбрано - проблема turbolinks?
- 22. Последовал учебник Rails и получил Action controller: Исключено?
- 23. Маршрутизация в Rails имеет проблемы с маршрутом Controller/action/id
- 24. Yii2 validation on controller action
- 25. Rails: нет маршрутных совпадений {: action => "edit",: controller => "discussion"
- 26. Что использовать 'get controller/action' в routes.rb в rails 3.1?
- 27. Rails Controller/Action Specific 404 Not Found View
- 28. Action Controller: Exception - ID не найден
- 29. Redirect Login to Controller Action
- 30. MVC Controller Action через Ajax
Этот ответ говорит вам, как убедиться, что ваши действия работает достаточно быстро. Это не поможет вам с профилированием, которое выясняет, какая часть действия занимает больше всего времени. – 2010-07-20 14:22:43