Firebase中函数结果赋值变量与内联调用相比有什么优势?
关于Firebase中getAuth/getFirestore两种写法的差异解答
两种写法的正确性
两种写法完全等效,均为合法正确的用法。
Firebase Web SDK中getAuth()、getFirestore()这类服务获取方法均采用单例设计模式:首次调用时会完成对应服务的初始化并返回实例,后续所有调用都会直接返回已经初始化完成的同一个全局实例,不会重复执行初始化逻辑。所以不管是先存变量再传参,还是直接内联调用传参,最终传入signInWithPopup的都是同一个auth实例,执行效果没有任何区别。
最优实践推荐
根据使用场景选择即可:
- 若仅需单次调用对应服务实例,内联写法更简洁,减少不必要的变量声明,和官方代码实验室的示例场景匹配,可读性更高。
- 若同一上下文内需要多次使用该服务实例(比如后续还要调用
signOut(auth)、读取auth.currentUser属性等),优先选择提前赋值给变量的写法:- 减少重复的
getAuth()代码,逻辑更清晰 - 后续如果需要调整初始化参数(比如多项目共存场景下需要传入指定App实例
getAuth(customApp)),仅需要修改变量赋值的一行代码,不需要全局替换所有调用位置,维护成本更低。
- 减少重复的
多次调用getAuth的性能问题
单独调用getAuth()的性能开销极低,本质只是返回内存中已经存在的对象引用,没有重计算逻辑,所以即使多次调用也几乎不会产生可感知的性能差异。
如果多次使用,提前存变量的收益主要来自可读性和可维护性,性能收益极其微小,可以忽略。
内容的提问来源于stack exchange,提问作者user16136953
相关产品推荐
相关产品推荐

