#javascript #node.js #amazon-web-services #amazon-s3 #aws-lambda
#javascript #node.js #amazon-веб-сервисы #amazon-s3 #aws-lambda
Вопрос:
У меня есть сайт, на который пользователь может загрузить изображение. Изображение загружается в корзину S3, затем обрабатывается с помощью функции Lambda, которая генерирует 7 различных цветных версий изображения, сохраняет их в корзине S3, и в конечном итоге функция возвращает URL-адреса новых цветных изображений пользователю, чтобы он мог выбрать предпочитаемый цвет на сайте.
Этот процесс занимает некоторое время, около 5-6 секунд при хорошем соединении, в течение которого пользователь может видеть только экран загрузки. Поскольку это возможно только при одном обратном вызове из lambda, как бы я мог «отложить загрузку» 7 изображений разного цвета вместо того, чтобы иметь экран загрузки? Я хотел бы иметь что-то вроде скелетного пользовательского интерфейса, который постепенно загружает изображения разных цветов, как только каждое из них сгенерировано, вместо того, чтобы ждать их все. Возможно ли это?
Ответ №1:
Лучшим подходом может быть возврат URL-адресов немедленно, до фактического создания изображений, поскольку целевые URL-адреса будут известны. Это может быть сделано путем вызова лямбда-функцией другого лямбда-выражения для выполнения фактической обработки, а затем немедленного возврата URL.
Затем веб-приложение может пытаться извлекать изображения каждые несколько секунд.
Вы могли бы даже заставить процесс запускать несколько лямбда-процессов параллельно, чтобы сократить время, затрачиваемое на генерацию всех изображений (и / или попробовать многопоточность лямбда-кода, чтобы посмотреть, получится ли это быстрее).
Комментарии:
1. Спасибо! URL-адрес фактически уже создан на серверной части и является частью полезной нагрузки (Lambda вызывается с помощью PHP через AJAX), поэтому я бы уже знал URL-адрес до вызова функции Lambda. Есть ли какой-либо способ избежать опроса и получить какой-либо триггер после завершения каждого изображения? Лямбда-функции сначала необходимо загрузить изображение из S3, прежде чем она сможет генерировать изображения, будет ли по-прежнему иметь смысл запускать несколько процессов или каждому процессу потребуется загрузить изображение и, следовательно, потребуется дополнительное время? Я обязательно рассмотрю многопоточность, это звучит интересно.
2. Единственное, что будет отправлено обратно на страницу, — это ответ от вызова лямбда-функции, и это может произойти только один раз (при завершении функции).
3. Ок, достаточно ясно, рассмотрю подход, описанный выше, большое спасибо!