yoo*_*ung 5 javascript node.js firebase google-cloud-functions
Firebase文档建议明智地管理依赖关系,这是减少冷启动时间的第一件事:https : //firebase.google.com/docs/functions/tips#use_dependencies_wisely
对于大多数Firebase功能,您可能会使用firebase-functions和firebase-admin模块。
这是一个实用的示例函数:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
// Initialize the app in admin sdk
admin.initializeApp();
// Firestore timestamp support
admin.firestore().settings({timestampsInSnapshots: true});
exports.simpleFunction = functions.https.onCall((data, context) => {
return admin.auth().getUserByEmail(data.email)
.catch(() => {
return Promise.reject(new https.HttpsError('not-found', 'User not found.'));
})
.then(userRecord => {
return admin.firestore().collection('user').doc(userRecord.uid).get();
})
});
Run Code Online (Sandbox Code Playgroud)
冷启动执行时间:Function execution took 7517 ms, finished with status code: 200
热启动时间:Function execution took 8 ms, finished with status code: 200
如图所示,对该功能的测试具有〜7.5秒的冷启动启动时间(尽管显着的热响应时间)。尽管有许多因素可以解释为什么会出现这种情况,但是一个原因可能是加载firebase-functions和所需的所有依赖项firebase-admin。
假设示例函数在这两个程序包中仅使用了几种方法,是否有可能仅以某种方式加载这些方法及其相关性以减少加载时间?
我也尝试过直接使用Typescript和导入方法,import {https} from 'firebase-functions'并import {initializeApp, firestore, auth} from 'firebase-admin'希望某种神奇的形式在后台摇摇欲坠,但事实证明,TypeScript最终被转换为javascript。
有一些策略可以减少 Firebase 功能的冷启动。你的策略是当场尝试减少依赖性。
GCF 冷启动性能的第一个贡献者是依赖性。
似乎不可能达到您想要的那种粒度。
我的建议是:
尝试使用使用更广泛的库版本。依赖项缓存在所有 GCF 依赖项之间共享。谷歌的一个人有一篇关于这个主题的非常好的文章。一探究竟。另外还有视频版
对依赖项使用延迟加载。Firebase 成员 @DougStevenson有一段精彩的视频解释了这一策略。他还给出了使用打字稿的示例。
避免崩溃。如果您的功能崩溃,可能会增加冷启动。
| 归档时间: |
|
| 查看次数: |
242 次 |
| 最近记录: |