Firebase 使用FieldValue.serverTimestamp和Date.now之间的差异

Firebase 使用FieldValue.serverTimestamp和Date.now之间的差异,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,firestore.FieldValue.serverTimestamp与使用Date.now()(从中央服务器)之间是否存在性能或功能差异?如果将Date.now()从客户端写入数据库,则是在写入客户端时间戳。另一方面,如果您编写firestore.FieldValue.serverTimestamp,则它最终会写入服务器端的时间戳 两者之间有几种类型的变化: 客户机上的时间戳经常与服务器上的实际时间不一致,这意味着这两个值将不同 如果您从客户端写入时间戳,这意味着恶意用户可以提供自己的值 客

firestore.FieldValue.serverTimestamp
与使用
Date.now()
(从中央服务器)之间是否存在性能或功能差异?

如果将
Date.now()
从客户端写入数据库,则是在写入客户端时间戳。另一方面,如果您编写
firestore.FieldValue.serverTimestamp
,则它最终会写入服务器端的时间戳

两者之间有几种类型的变化:

  • 客户机上的时间戳经常与服务器上的实际时间不一致,这意味着这两个值将不同
  • 如果您从客户端写入时间戳,这意味着恶意用户可以提供自己的值
  • 客户机与数据库的连接保证有一定的延迟,这意味着即使在一个完全设置好的客户机上,并且有一个非常友好的用户,值之间仍然会有差异
  • 如果使用服务器时间戳,则可以在安全规则中强制执行其值。有关这方面的信息,请参阅文档
  • 请注意,使用这两个值都有有效的用例。例如:

    • 如果要记录用户以自己的方式启动操作的时间,则需要使用客户端时间戳
    • 如果要记录某些数据何时被最终写入数据库,则需要使用服务器端时间戳

    谢谢你的回复,弗兰克。因此,如果我从服务器(而不是客户端)设置
    Date.now()
    ,那么两者的工作原理是否相似(不是相同的值,而是优点/缺点)?在如何存储时间戳方面没有什么特别的优势,对吧?这取决于你对“特殊”的定义,我不知道。但例如:服务器时间戳也会传播到服务器端安全规则,而服务器端时间戳可能不是。哦,这很有趣!你能详细说明一下在你的例子中“传播”到底是什么意思吗?它是关于能够访问安全规则中的时间戳值吗?请参阅