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

时间:2019-04-29 13:06:41

标签: firebase google-cloud-firestore

firestore.FieldValue.serverTimestamp和使用Date.now()(从中央服务器)之间在性能或功能上有区别吗?

1 个答案:

答案 0 :(得分:2)

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

两者之间有几种类型的更改:

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

请注意,存在使用这两个值的有效用例。例如:

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