Firebase read/write/validate 规则对性能有何影响?

What is the performance impact of Firebase read/write/validate rules?

我一直在通读有关安全和 read/write/validate 规则的 Firebase 文档。文档非常详细,但我找不到任何有关安全规则对性能(查询、检索、写入数据等)的性能影响的信息。

例如,考虑以下数据库示例:

myapp : {
    projects : { 
        <project_id> : { ... }
    }
    users    : { 
        <uid> : { role : <admin or pm or other> }
    }
}

.. 以及以下数据库读取规则:

rules : {
   projects : {
       $project : {
             {
              .read: root.child(‘users’).child(auth.uid) && root.child(‘users’).child(auth.uid).child(‘role’).val() == “admin” || root.child(‘users’).child(auth.uid).child(‘role’).val() == “pm”
                  } 
               }  
            }

当涉及从任何 $project 节点(例如:.child("projects/alpha).once())读取数据时,与不存在读取规则相比,此规则对性能有何影响? 如果我一个接一个地执行多个 queries/reads,规则是否每次都会被评估,或者 Firebase 'save' 规则结果是否在某处以避免重新评估?

Firebase 读写规则在您写入数据或附加侦听器的位置进行评估。在您分享的示例中,您要么拥有所有项目名称的读取权限,要么没有权限(自 rules cannot be used to filter data 起)。因此,不必为每个读取操作评估规则,而仅当您附加侦听器时(或身份验证状态更改时)。

鉴于 Firebase 安全规则的声明性,我怀疑这些问题的答案会影响您编写的规则。由于这个原因,它们被专门设计为声明式的:服务器端实现可以更改,而无需更改规则语言。

您应该编写指定您想要什么的规则,然后将其留给 Firebase 数据库服务器来决定如何有效地执行它们.如果您遇到过您认为您的规则导致读取或写入变慢的情况,我很乐意在问题中看到 那个