Я следую этой статье в CarrierWave Wiki https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Add-more-files-and-remove-single-file-when-using-default-multiple-file-uploads-feature, чтобы реализовать добавление большего количества изображений и удаление изображений для модели в моей системе с использованием функции Multiple Uploads CarrierWave.Carrierwave - Загрузка нескольких изображений слишком медленно при добавлении или удалении изображений
Основной код в этой статье
def add_more_images(new_images)
images = @gallery.images
images += new_images
@gallery.images = images
end
def remove_image_at_index(index)
remain_images = @gallery.images # copy the array
deleted_image = remain_images.delete_at(index) # delete the target image
deleted_image.try(:remove!) # delete image from S3
@gallery.images = remain_images # re-assign back
end
Он работает. Однако, это слишком slooooow. Я посмотрел на журнал и общее время обработки выглядит следующим образом:
- Загрузить 1 изображение: она занимает 5000 мс, например
- Добавить еще один образ: он принимает 8500ms (2 изображения)
- Добавить 1 более изображений: оно принимает 12000ms (3 изображения)
- Извлеките 1 изображение: оно принимает 8400ms (обратно 2 изображения)
Я проверил пример приложения этого решения, написанный автором на моей локальной машине и это было очень слишком медленный.
Кажется, что CarrierWave перезагружает и перерабатывает все изображения, даже мы добавляем или удаляем только одно изображение. Я думаю, потому что мы повторно назначаем новый массив изображений на @gallery, чтобы обрабатывать старые изображения как новые.
Также есть смежный вопрос здесь https://github.com/carrierwaveuploader/carrierwave/issues/1704#issuecomment-259106600
Кто-нибудь есть лучшее решение для добавления и удаления изображений с использованием CarrierWave функции множественного загрузки?
Спасибо.