我有一个call directly from my app的Firebase Cloud功能。该云函数获取Firestore文档的集合,在每个文档上进行迭代,然后返回结果。
我的问题是,最好将获取/获取的结果保存在内存中(在节点服务器上)并用Option Explicit
Public Sub CheckColumn()
Dim arr(), i As Long
arr = [A1:D6].Value '<==2D array created
For i = LBound(arr, 2) To UBound(arr, 2) '<== loop columns
'look in each column for more than one "B" and if found exit loop and indicate column where found
If Application.Count(Application.Match(Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Index(arr, 0, i)), "B", 0)) > 1 Then
Debug.Print i
Exit For
End If
Next
End Sub
刷新吗?似乎这将提高性能,因为我的云功能不必等待Firestore响应(它已经在内存中存储了集合)。我该怎么做?像填充全局变量一样简单吗?如何使用云功能.onSnapshot
实时侦听器?
答案 0 :(得分:2)
这可能取决于这些快照的大小以及可以缓存的快照数量...
因为它是一个RAM
磁盘,并且没有内部管理,它可能只能在有限的时间内工作。
始终删除临时文件
临时目录中的本地磁盘存储是内存中的文件系统。写入的文件会消耗函数可用的内存,有时在两次调用之间仍然存在。未能明确删除这些文件可能最终导致内存不足错误和随后的冷启动。
来源:Cloud Functions - Tips & Tricks。
这里没有告诉我们,硬限制到底是什么-缓存在其他地方可能不会大大改善访问时间。默认情况下,每个功能it says 2048mb
-可以使用IAM & admin提高配额。这完全取决于每个函数的配额是否可以提高到足以处理缓存的程度。
这是.onShapshot()
事件的示例:
// for a single document:
var doc = db.collection('cities').doc('SF');
// this also works for multiple documents:
// var docs = db.collection('cities').where('state', '==', 'CA');
var observer = doc.onSnapshot(docSnapshot => {
console.log(`Received doc snapshot: ${docSnapshot}`);
}, err => {
console.log(`Encountered error: ${err}`);
});
// unsubscribe, to stop listening for changes:
var unsub = db.collection('cities').onSnapshot(() => {});
unsub();
来源:Get realtime updates with Cloud Firestore。
Cloud Firestore Triggers可能是另一种选择。