Firebase函数-两个index.js文件



我的index.js中有很多代码,这些代码具有不同的非常昂贵的导入函数。根据我的理解,这些功能共享所有全球进口。所以,我有两个选择

  • 全局执行所有导入,这会导致冷启动速度较慢,但当热空闲实例可用时,函数调用速度较快
  • 在函数内部执行惰性导入,这使得冷启动速度较快,但函数调用速度较慢

我想知道是否存在第三个选项,我可以拆分index.js,以便分离全球导入。有没有这样的选择,或者我缺少的替代方案?

从函数体内部执行昂贵的require并不一定会导致函数调用速度变慢,因为require缓存在内存中。热调用(那些不需要冷启动的调用(将运行require行,但实际上不需要重新加载代码。

// runs at cold start time, use for shared dependencies
const commonImport = require("common-import");
exports.myFunc = functions.https.onRequest((req, res) => {
// runs only at invocation time but cached, use for unshared deps
const expensiveImport = require("expensive-import");
});

值得一提的是,这种特殊类型的问题也是Firebase团队正在积极研究如何改进的问题。您可能会考虑注册Firebase Alpha程序,以获得此类功能的早期测试消息。

其他人正在经历一些神秘的解决方案:

const common = require("common-import");
if (process.env.FUNCTION_NAME === "fn1") {
const expensive1 = require("expensive-import-1");
}
if (process.env.FUCNTION_NAME === "fn2") {
const expensive2 = require("expensive-import-2");
}
exports.fn1 = functions.https.onRequest((req, res) => {
res.send(expensive1.expensiveResult());
});
exports.fn2 = functions.https.onRequest((req, res) => {
res.send(expensive2.expensiveResult());
});

这将只加载冷启动时所需的文件。但是,当我们在本地运行代码以发现要部署的函数时,这些环境变量将不存在,因此必须始终导出要部署的所有函数。

不过,正如Michael早些时候所说,我们有人正在积极研究一个更好的解决方案,感觉就像呼吸了一口新鲜空气,所以如果你能等一等,就不要花太多时间优化它。

最新更新