背景
我正在使用 AWS Lambda 和 API Gateway 构建 API。我没有将每个 API 端点拆分为单独的 lambda 函数,而是将它们包装到一个库中并使用 aws-serverless-express
库。
问题
鉴于整个 API 中只有一部分可能用于单个 Lambda 执行中——从内存利用的 Angular (以降低成本)来看,两者之间是否存在差异:
var myModule = require("mymodule");
...
function handleSomething1()
{
myModule.doSomething();
}
function handleSomething2()
{
...
}
或
function handleSomething()
{
require("mymodule").doSomething();
}
function handleSomething2()
{
...
}
例如,单个 API 请求可能会导致在 Lambda 函数关闭之前仅调用 handleSomething2
。在那种情况下,我们是否通过在顶部调用 var myModule = require("mymodule");
来有效地浪费内存?
我想更直接的问题是,当我 var myModule = require("mymodule")
时,node.js 运行时实际上是否在那个时刻为 myModule
分配内存?或者在我用 myModule
实际做之前它实际上是一个空操作?
最佳答案
您应该始终在 Node.js 中使用异步方法和函数调用。然而,Node.js 总是同步运行 require 并且需要的模块可能需要其他需要的模块,这是一个昂贵的过程。
即使对于 Lambda 的上下文,这也保持不变,因为如果您在函数外部定义“require”,它将在 Lambda 冷启动时启动,并且不会为后续的热启动调用重新运行。
有关 Lambda 容器重用的更多信息 reference .
关于javascript - Lambda/无服务器内联要求与 header 要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45222993/