Стремительная загрузка вложений activestorage по-прежнему выполняет дополнительные запросы и мета-запросы - PullRequest
0 голосов
/ 25 сентября 2019

Я использую rails active-storage для загрузки аватаров на страницу.аватары загружаются через помощника with_attached.Это отлично работает.Для полной коллекции аватаров выполняется только один sql-запрос.

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

Аватары загружаются в контроллер

Контроллер: grouped_step_assignment_profiles = UserProfile.where(user_id: corresponding_step_assignments.pluck(:user_id)).with_attached_avatar.group_by{|x| x.user_id}

И затем добавляются к объекту (который передается впредставление)

avatar: rails_representation_url(grouped_step_assignment_profiles[user_id][0].user_avatar(30))

Метод user_avatar в классе UserProfile:

has_one_attached :avatar
def user_avatar(size = 30)
    if (self&.avatar and self.avatar.attached?)
        self.avatar.variant(resize: "#{size}x#{size}").processed
    else
        if self
            gravatar_image_url(self.email, size: size)
        end
    end
end

В представлении аватар отображается путем доступа к атрибуту аватара объекта: image_tag user_step_assignment[1][:avatar], class: "rounded-circle"

Выполняет следующий дополнительный запрос и мета-запрос для каждого аватара (20 аватаров - это 20 дополнительных запросов и мета-запросов):

Started GET "/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSnJkbUZ5YVdGdWRITXZiMmwyTUdzeGQydG9hWFZ2ZVhnd01USnljR1Z0Tm1Ob2FHMWhhQzlqWTJFMVpUYzNZVEJsWm1ReFlqRmxaRFZpTVdabE1qRmtOelV6TUdJeFl6VTBOek5pTkdFMVpUVTRaalkwTnpjd1lUVmtPR1ZrT0dOaFlXVTNOREUzQmpvR1JWUTZFR1JwYzNCdmMybDBhVzl1U1NKSGFXNXNhVzVsT3lCbWFXeGxibUZ0WlQwaWRHVnRjRjloZG1GMFlYSmZPREVpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSjNSbGJYQmZZWFpoZEdGeVh6Z3hCanNHVkRvUlkyOXVkR1Z1ZEY5MGVYQmxTU0lQYVcxaFoyVXZhbkJsWndZN0JsUT0iLCJleHAiOiIyMDE5LTA5LTI1VDA4OjM5OjU5LjIwOFoiLCJwdXIiOiJibG9iX2tleSJ9fQ==--4462bea946137c25d19bd706d48a0cbc5118c11e/temp_avatar_81?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22temp_avatar_81%22%3B+filename%2A%3DUTF-8%27%27temp_avatar_81" for 127.0.0.1 at 2019-09-25 10:37:15 +0200
Processing by ActiveStorage::DiskController#show as HTML
  Parameters: {"content_type"=>"image/jpeg", "disposition"=>"inline; filename=\"temp_avatar_81\"; filename*=UTF-8''temp_avatar_81", "encoded_key"=>"eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSnJkbUZ5YVdGdWRITXZiMmwyTUdzeGQydG9hWFZ2ZVhnd01USnljR1Z0Tm1Ob2FHMWhhQzlqWTJFMVpUYzNZVEJsWm1ReFlqRmxaRFZpTVdabE1qRmtOelV6TUdJeFl6VTBOek5pTkdFMVpUVTRaalkwTnpjd1lUVmtPR1ZrT0dOaFlXVTNOREUzQmpvR1JWUTZFR1JwYzNCdmMybDBhVzl1U1NKSGFXNXNhVzVsT3lCbWFXeGxibUZ0WlQwaWRHVnRjRjloZG1GMFlYSmZPREVpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSjNSbGJYQmZZWFpoZEdGeVh6Z3hCanNHVkRvUlkyOXVkR1Z1ZEY5MGVYQmxTU0lQYVcxaFoyVXZhbkJsWndZN0JsUT0iLCJleHAiOiIyMDE5LTA5LTI1VDA4OjM5OjU5LjIwOFoiLCJwdXIiOiJibG9iX2tleSJ9fQ==--4462bea946137c25d19bd706d48a0cbc5118c11e", "filename"=>"temp_avatar_81"}
Completed 200 OK in 1ms (ActiveRecord: 0.0ms | Allocations: 1388)
Started GET "/__meta_request/a5c57d1c-bfa3-48c3-ac7e-e0e78fadb997.json" for 127.0.0.1 at 2019-09-25 10:37:21 +0200

Это занимает от 2 до 3 секунд.для загрузки страницы (с менее чем 20 аватарами).Когда я закомментирую строку аватара в представлении, загрузка страницы падает примерно до 200-300 мс.

Может кто-то указать на недостаток в этой настройке?Заранее спасибо за помощь!

...