Измерение времени выполнения запросов через Rails-консоль
Быстрый ответ
Чтобы изучить время выполнения в Rails, используйте метод Benchmark.measure
. Оберните нужную часть кода в блок этого метода, и вы получите подробную статистику производительности.
# Простой и надежный метод на Ruby
require 'benchmark'
puts Benchmark.measure { User.all }
Данный код выводит время, затраченное на получение всех записей пользователей, в понятном формате.
Понимание Benchmark.measure
Метод Benchmark.measure
возвращает объект Benchmark::Tms
, который содержит детализированную статистику, включая такой критически важный параметр, как время работы процессора. Это позволяет понять производительность вашего кода на внутреннем уровне.
Разъясняем Benchmark::Tms
Benchmark::Tms
играет ключевую роль в измерении производительности. Результат выглядит следующим образом:
user system total real
1.200000 0.000000 1.200000 ( 1.231074)
Здесь 'user' и 'system' отражают время работы процессора в пользовательском и системном режиме соответственно, 'total' — их сумму, а 'real' — общее реально затраченное время.
Глубокое погружение: производительность итераций
Когда необходимо оценить итеративное выполнение кода, гем benchmark-ips
станет незаменимым помощником, позволяя сравнивать производительность итераций.
# Для оптимизации производительности используйте этот гем
require 'benchmark/ips'
Benchmark.ips do |x|
# Запускаем запросы на сравнение!
x.report("find_each") { User.find_each { |user| user } }
x.report("all.each") { User.all.each { |user| user } }
x.compare!
end
Если важен анализ распределения памяти, гем execution_time
окажется полезным инструментом.
Визуализация
Представьте себе турнир запросов, борющихся за скорость выполнения:
| Метод запроса | Время выполнения |
| ------------------- | -----------------|
| Post.all | ⏱️: 120мс |
| Post.find_each | ⏱️: 90мс |
| Post.where(...).limit | ⏱️: 70мс |
Таблица показывает разницу во времени выполнения для разных методов запроса, как будто отслеживает производительность спортсменов.
Быстрые визуальные отчеты с MiniProfiler
Для тех, кто предпочитает визуализацию, rack-mini-profiler
— прекрасный инструмент для отображения времени выполнения запросов прямо на страницах разработки.
Записываем все – Логгер ActiveRecord
Профессионал всегда использует максимально эффективные инструменты. Логгер ActiveRecord::Base.logger
позволит отслеживать время выполнения SQL-запросов в логах сервера Rails или консоли.
# Когда требуется получить результаты SQL в реальном времени!
ActiveRecord::Base.logger = Logger.new(STDOUT)
User.all
Полезные материалы
- ActiveRecord::LogSubscriber — детальное изложение на тему логирования SQL в Rails.
- Отладка приложений Rails — Ruby on Rails Guides — основной источник знаний по отладке Rails и логированию.
- Модуль: Benchmark (Ruby 2.7.0) — важнейший ресурс по профилированию Ruby-приложений.
- Интерфейс запросов Active Record — Ruby on Rails Guides — всеобъемлющее руководство по созданию запросов в Rails.
- GitHub – MiniProfiler/rack-mini-profiler — сделайте ваше Ruby-приложение нагляднее с помощью rack-mini-profiler!