amazon-web-services - 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 执行时间的问题,那就去吧。
解决方案
推荐阅读
- javascript - 如何使用 location.href 下载 dmg 文件
- python - Pandas - 对包含间隔的 MultiIndex 进行索引
- swift - 如何处理 tableview 滚动键盘
- java - 非美国邮政编码的最小和最大字符长度是多少
- json - $eq 在 MongoDB 中是归纳的吗
- python-3.6 - FastAPI 文件必须放在函数参数中的表单之前
- json - 我的 JSON 编写器只从我的模拟中写入一个对象?
- c++ - 使用 2 个 8 字节寄存器进行 I2C 读取
- python - 如何找到嵌入在 Pandas 数据框列中的元素列表的平均值
- python-3.x - 如何在不超过 Twitter 速率限制的情况下检查 Twitter 用户点赞是否已更新?(Tweepy)