Облачные функции Firebase Тайм-аут манипуляции с ImageMagick - PullRequest
0 голосов
/ 08 октября 2018

Не уверен, что он находится в области видимости Firebase, но в официальных документах Firebase.

Я пытался реализовать пример с умеренным изображением , который работал довольно хорошо https://github.com/firebase/functions-samples/blob/Node-8/moderate-images/functions/index.js

Потребовалось около 1 минуты, чтобы получить URL-адрес для загрузки размытого изображения.Затем я попробовал совершенно ту же функцию ImageMagick с частичным размытием:

await spawn('convert', [tempLocalFile, '-region', '10x10+5+5', '-blur', '0x8', tempLocalFile]);

Она также работала без проблем и заняла то же время.
Затем я попытался выполнить последовательность этой операции, например:

 for (const i in regions) await spawn('convert', [tempLocalFile, '-region', i, '-blur', '0x8', tempLocalFile]);

В regions было 8 элементов, поэтому операция преобразования была выполнена 8 раз.На 2-й минуте консоль показала Function execution took 60003 ms, finished with status: 'timeout'.На 9-й минуте я получил изображение с 8 размытыми областями, как и предполагалось .

Итак, вопросы:

  1. Это нормальное время для такой базовой манипуляции с изображением?
  2. Может ли это быть как-то ускорено?
  3. Каким может быть рабочий процесс, если вы решите получить результат Cloud Vision JSON, выполнить все манипуляции с изображениями на стороне клиента, а затем повторно загрузить окончательное изображение обратно в Firebase?

1 Ответ

0 голосов
/ 10 октября 2018

Мой текущий личный опыт говорит, что вы не хотите, чтобы такие циклы были в ваших функциях.

Если вам нужно выполнить некоторые базовые манипуляции с изображениями, вам лучше сделать это локально.
В худшем случае сделайте это вручную, сделав максимум 10 операций подряд, в зависимости от типа манипуляции:

await spawn('convert', [tempLocalFile, 
    '-region', '100x100+50+50', '-whatever',
    '-region', '100x100+50+50', '-whatever',
    ...
]);

Если мы говорим о применении размытия, то вам лучше использовать эту команду с параметрами, равными или равными «0x8».Меньшее дает недостаточное размытие, а большее значение дает экспоненциально более длительное время полного выполнения.

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

...