【问题标题】:Gradually loading AWS S3 files generated by Lambda function逐步加载由 Lambda 函数生成的 AWS S3 文件
【发布时间】:2020-12-04 19:38:27
【问题描述】:

我有一个用户可以上传图片的网站。图像上传到 S3 存储桶,然后使用 Lambda 函数进行处理,生成 7 种不同颜色版本的图像,将它们存储在 S3 存储桶中,该函数最终将新彩色图像的 URL 返回给用户,以便他们可以在网站上选择他们喜欢的颜色。

这个过程需要一些时间,在连接良好的情况下大约需要 5-6 秒,在此期间用户只能看到加载屏幕。由于只能使用 lambda 的一个回调,我将如何“延迟加载”7 种不同颜色的图像而不是加载屏幕?我想要一个类似于骨架 UI 的东西,它会在生成每个图像后逐渐加载不同颜色的图像,而不必等待所有图像。这可能吗?

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-s3 aws-lambda


    【解决方案1】:

    更好的方法可能是在实际生成图像之前立即返回 URL,因为目标 URL 是已知的。这可以通过让 Lambda 函数调用另一个 Lambda 来进行实际处理,然后立即返回 URL 来完成。

    然后,网络应用可以尝试每隔几秒检索一次图像。

    您甚至可以让进程产生多个并行的 Lambda 进程,以减少生成所有图像所需的时间(和/或尝试对 Lambda 进行多线程处理以查看是否更快) .

    【讨论】:

    • 谢谢!该 URL 实际上已经在后端创建,并且是有效负载的一部分(Lambda 通过 AJAX 使用 PHP 调用),因此在调用 Lambda 函数之前我已经知道该 URL。有什么方法可以避免轮询并在每个图像完成后获得某种触发? Lambda 函数首先需要从 S3 下载图像,然后才能生成图像,生成多个进程是否仍然有意义,或者每个进程都需要下载图像并因此需要额外的时间?我肯定会研究多线程,这听起来很有趣。
    • 唯一会被发送回页面的是调用 Lambda 函数的响应,并且只能发生一次(当函数完成时)。
    • 好清楚,会研究上面的方法,非常感谢!
    猜你喜欢
    • 2019-11-20
    • 2018-08-29
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2017-03-04
    • 2018-12-01
    相关资源
    最近更新 更多