首页 > 解决方案 > lambda@edge 中的速度修复或替代方案

问题描述

我有一个在客户端请求上运行的 lambda@edge。我将消息放入 SQS 以由另一个 lambda 处理。

更新后我的脚本的第一次运行非常长 - 经常超过五秒的硬超时,这不是一个好的用户体验。

其中大部分是加载 AWS 开发工具包,始终超过 2.5 秒

var timerstart = new Date();
var timercheck = new Date();
console.log("Time check: 0");

const AWS = require('aws-sdk');

timercheck = new Date();
console.log("Time check - AWS sdk loaded: ", timercheck - timerstart);

我也在加载 https

const https = require('https');

第一次运行大约需要 120 毫秒。

许多后续运行完全在亚毫秒内完成,很少超过 5 毫秒。

有没有其他人遇到过这个问题 - 并希望找到克服它的方法?我没有通过 googlefu 找到任何东西。了解第一次运行和后续运行之间的差异会有所帮助。

疯狂的想法

@jogold 带来了一些有趣的阅读。

出于某种原因,我认为将 require 放在导出之外会很有趣。

从:

'use strict';
exports.handler = async (event, context, callback) => {
    const AWS = require('aws-sdk');
    //... stuff

至:

'use strict';
const AWS = require('aws-sdk');
exports.handler = async (event, context, callback) => {
    //... stuff

在几次(相当肯定的)冷启动中,第一次检查现在下降到大约 300 毫秒。也许这只是其他人都知道的事情,也是我对 NodeJS 知识的一个空白,但是如果其他人来寻找 Lambda@Edge 执行时间的问题,那就去吧。

标签: amazon-web-servicesaws-sdk-nodejsaws-lambda-edge

解决方案


这称为冷启动

查看您需要了解的有关 AWS Lambda 中冷启动的所有信息

如果它很重要,您应该考虑预热您的功能。


推荐阅读