Полезные приемы продуктивности, шаблоны оптимизации памяти и трюки отладки для ежедневной разработки на Rails.
Оптимизация запросов и памяти
1. pluck против map
pluck извлекает данные напрямую из базы, не создавая в памяти объекты моделей ActiveRecord:
# МЕДЛЕННО: Создает 10 000 объектов User в оперативной памяти
User.all.map(&:email)
# БЫСТРО: Выбирает только колонку email в виде массива строк
User.pluck(:email)
2. Пакетная обработка с помощью find_each
Избегайте загрузки огромных таблиц в память за один раз:
# Загружает порциями по 1 000 записей
User.find_each(batch_size: 1000) do |user|
user.sync_with_crm
end
Удобные приемы работы в консоли
# Получить результат последнего вычисленного выражения
user = User.find(1)
_ # Возвращает объект user
# Замер времени выполнения прямо в консоли
Benchmark.ms { 1000.times { User.count } }
# Перезагрузить код приложения без перезапуска консоли
reload!
Обновление временных меток (touch)
Обновление поля updated_at родительской модели при изменении дочерней ассоциации:
class Comment < ApplicationRecord
belongs_to :article, touch: true
end