使用 FieldValue.serverTimestamp 和 Date.now 的区别

Kus*_*our 3 firebase google-cloud-firestore

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

Fra*_*len 5

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

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

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

请注意,使用任一值都有有效的用例。例如:

  • 如果您想记录用户何时以他们自己的方式发起操作,您将需要使用客户端时间戳。
  • 如果要记录某些数据何时明确写入数据库,则需要使用服务器端时间戳。