在重定向本地环境后,我是否应该期待过时的结果?

kev*_*vin 7 google-app-engine browser-cache app-engine-ndb google-cloud-datastore

将新实体发布到数据存储区后,我将页面重定向到一个新URL,该URL列出该组中的所有实体.当我重定向时,页面显示过时的结果,我必须重新加载以查看数据存储区中的新实体列表.

我知道最终的一致性.这就是为什么我看到陈旧的结果?

例如,

我的数据存储区我有一个用户 - 用户1然后,在一个表单中,我添加一个用户 - 用户2这个实体被放到数据存储区然后我重定向到一个新的网址,即'get/users'

在重定向上我只看到用户1,但如果我刷新页面,我会看到用户2.我能保证或帮助防止陈旧结果吗?

bos*_*ter 7

是的,这是由你提出的"最终一致性"引起的.

我有一些建议:

  1. 使用AJAX.使用重定向会导致不必要的额外工作:
    • 额外(不必要的)HTTP请求(网络带宽,延迟,服务器资源,移动数据成本等)
    • 一个额外的(不必要的)数据存储区查询,以确认您已经知道的内容
  2. 使用JavaScript在XMLHttpRequest成功时更新向用户显示的用户列表; 不要执行其他查询.
  3. 如果您确实需要用户对象,则可以从数据存储区执行get by key(而非查询),这将非常一致.
  4. 如果您确实需要强一致性查询,请使用强烈一致的祖先查询.在成功响应中发回该查询的结果,并相应地更新您的UI.
    • 注意:使用祖先查询需要一个实体组,其限制为〜1次/秒; 例如,在博客文章中记录评论时,此费率就足够了,但可能不足以在您的应用程序中创建新用户