我有一个在客户端请求上运行的 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 执行时间的问题,那就去吧。