Самый эффективный способ заархивировать папку с фотографиями с помощью бессерверной функции?

#node.js #firebase #google-cloud-functions

# #node.js #firebase #google-cloud-функции

Вопрос:

Я создаю веб-приложение для обмена фотографиями. Пользователи могут выбирать фотографии, которые они хотят загрузить, из галереи и нажимать кнопку загрузки, чтобы загрузить эти выбранные фотографии в ZIP-файл.

Проблема в том, что я действительно не знаю эффективного способа создания ZIP-файла из массива файлов, особенно больших размеров. Размер фотографий составляет около 2-3 МБ или даже больше для изображений с более высоким разрешением.

Я использую функции Firebase или, в частности, функции Google Cloud. У меня уже есть бессерверная функция, которая делает то, что я хочу, но она очень медленная и занимает много памяти. Он загружает все выбранные фотографии во временную папку из облачного хранилища Google, использует node-archiver и загружает конечный ZIP-файл в облачное хранилище Google, где ссылка на этот файл для загрузки возвращается из бессерверной функции. на выполнение функции для 32 фотографий требуется около 23 секунд, в то время как для 150 фотографий требуется целых 97 секунд.

Я попытался использовать буферы вместо записи файлов во временный каталог, и у него все еще было примерно то же время.

Я сделал это немного быстрее, удалив файлы во временной папке, поскольку узел-архиватор добавляет их в ZIP. Это, скорее всего, устраняет некоторую память, поскольку временная папка для функций Google Cloud также учитывается в памяти. 32 фотографии занимают около 16 секунд, а 150 фотографий — 81 секунду.

Есть ли другой эффективный способ сделать это? Я просто подумал о файловых потоках, когда писал этот вопрос, но я с ними не знаком.

Ответ №1:

Фотографии (форматы jpeg и png) уже хранятся в сжатом формате. Сжатие ZIP-файлов бесполезно. Вы должны использовать ZIP только для того, чтобы сгруппировать все изображения в одном файле.

Итак, в соответствии с вашей библиотекой ZIP, используйте режим «только для хранения» или «без сжатия», чтобы ускорить процесс.

Комментарии:

1. Почему я не подумал об этом раньше, ха-ха. Теперь функция работает быстрее, спасибо!