lambda@edge 中的速度修复或替代方案
Speed fix or alternatives in lambda@edge
我有一个 lambda@edge 运行ning 应客户请求。我将消息放入 SQS 以供另一个 lambda 处理。
我的脚本在更新后的第一个 运行 非常长 - 经常会经历五秒的硬超时,这不是一个好的用户体验。
其中大部分是加载 AWS SDK,始终超过 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 执行时间的问题,请看这里。
这称为冷启动。
看看Everything you need to know about cold starts in AWS Lambda。
如果这很重要,您应该考虑预热您的函数。
我有一个 lambda@edge 运行ning 应客户请求。我将消息放入 SQS 以供另一个 lambda 处理。
我的脚本在更新后的第一个 运行 非常长 - 经常会经历五秒的硬超时,这不是一个好的用户体验。
其中大部分是加载 AWS SDK,始终超过 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 执行时间的问题,请看这里。
这称为冷启动。
看看Everything you need to know about cold starts in AWS Lambda。
如果这很重要,您应该考虑预热您的函数。