ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Измерение времени выполнения запросов через Rails-консоль

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы изучить время выполнения в Rails, используйте метод Benchmark.measure. Оберните нужную часть кода в блок этого метода, и вы получите подробную статистику производительности.

ruby
Скопировать код
# Простой и надежный метод на Ruby
require 'benchmark'
puts Benchmark.measure { User.all }

Данный код выводит время, затраченное на получение всех записей пользователей, в понятном формате.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Понимание Benchmark.measure

Метод Benchmark.measure возвращает объект Benchmark::Tms, который содержит детализированную статистику, включая такой критически важный параметр, как время работы процессора. Это позволяет понять производительность вашего кода на внутреннем уровне.

Разъясняем Benchmark::Tms

Benchmark::Tms играет ключевую роль в измерении производительности. Результат выглядит следующим образом:

ruby
Скопировать код
user     system      total        real
1.200000   0.000000   1.200000 (  1.231074)

Здесь 'user' и 'system' отражают время работы процессора в пользовательском и системном режиме соответственно, 'total' — их сумму, а 'real' — общее реально затраченное время.

Глубокое погружение: производительность итераций

Когда необходимо оценить итеративное выполнение кода, гем benchmark-ips станет незаменимым помощником, позволяя сравнивать производительность итераций.

ruby
Скопировать код
# Для оптимизации производительности используйте этот гем
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 окажется полезным инструментом.

Визуализация

Представьте себе турнир запросов, борющихся за скорость выполнения:

Markdown
Скопировать код
| Метод запроса        | Время выполнения |
| -------------------  | -----------------|
| Post.all             | ⏱️: 120мс         |
| Post.find_each       | ⏱️: 90мс          |
| Post.where(...).limit | ⏱️: 70мс         |

Таблица показывает разницу во времени выполнения для разных методов запроса, как будто отслеживает производительность спортсменов.

Быстрые визуальные отчеты с MiniProfiler

Для тех, кто предпочитает визуализацию, rack-mini-profiler — прекрасный инструмент для отображения времени выполнения запросов прямо на страницах разработки.

Записываем все – Логгер ActiveRecord

Профессионал всегда использует максимально эффективные инструменты. Логгер ActiveRecord::Base.logger позволит отслеживать время выполнения SQL-запросов в логах сервера Rails или консоли.

ruby
Скопировать код
# Когда требуется получить результаты SQL в реальном времени!
ActiveRecord::Base.logger = Logger.new(STDOUT)
User.all

Полезные материалы

  1. ActiveRecord::LogSubscriber — детальное изложение на тему логирования SQL в Rails.
  2. Отладка приложений Rails — Ruby on Rails Guides — основной источник знаний по отладке Rails и логированию.
  3. Модуль: Benchmark (Ruby 2.7.0) — важнейший ресурс по профилированию Ruby-приложений.
  4. Интерфейс запросов Active Record — Ruby on Rails Guides — всеобъемлющее руководство по созданию запросов в Rails.
  5. GitHub – MiniProfiler/rack-mini-profiler — сделайте ваше Ruby-приложение нагляднее с помощью rack-mini-profiler!