【问题标题】:Firebase Cloud Functions - Func Definition PerformanceFirebase 云函数 - 函数定义性能
【发布时间】:2018-01-11 16:03:10
【问题描述】:

我将 index.ts 中的代码安排在简单的行函数定义上,例如:

Http 示例

export const demoHttpApp = functions.https.onRequest(
  (req, resp) => new DemoHttpClass(req, resp).run()
);

实时数据库示例

export const demoRtDb = functions.database.ref(DemoRtDbClass.PATH)
  .onWrite(event => new DemoRtDbClass(event).run());

我们的想法是逐类开发并在外部测试它们。

每个类构造函数都返回this,以便能够调用一个类成员。

我想知道这是否会导致内存泄漏或任何类型的故障。

由于这项工作是针对复杂操作的,我真的更喜欢使用对象的方法并将它们与其他调用隔离开来。

但我不想创建问题,或者因为错误而为长时间冻结实例付费。

我明白当函数完成时,对对象的引用丢失,内存被释放。我想知道我是否做对了。

谢谢!

【问题讨论】:

    标签: typescript firebase google-cloud-functions


    【解决方案1】:

    我看到的最大问题是每次调用函数时都会创建对象的新实例。更好的模式是在函数之外初始化对象。当一个新实例启动时,它将创建新对象,然后每次调用该函数时,它都可以一遍又一遍地使用同一个对象,从长远来看,这将使用更少的内存。

    var demoHttpApp = new DemoHttpClass();
    export const demoHttpApp = functions.https.onRequest((req, res) => 
        demoHttpApp.run(req, res);
    );
    

    这样做的另一个好处是您可以通过构造函数传入 Firebase 数据库或 auth 管理对象,这也将使这些对象更易于测试。

    这里是一个注入管理数据库对象的例子:

    var databaseClass = new DemoRtDbClass(admin.database());
    export const demoRtDb = functions.database.ref(DemoRtDbClass.PATH).onWrite(event => 
        databaseClass.run(event)
    );
    

    【讨论】:

    • 您好,感谢您的回答。我确信它对小功能很有用。就我而言,我的工作很复杂,没有表现的冲动。我将编辑问题。
    猜你喜欢
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2018-03-28
    • 1970-01-01
    • 2023-03-26
    • 2019-01-18
    • 2019-03-18
    相关资源
    最近更新 更多