Ajax 更新页面DOM后如何修改浏览器缓存?

Ajax 更新页面DOM后如何修改浏览器缓存?,ajax,browser-cache,Ajax,Browser Cache,到目前为止,我知道我可以使用AJAX分离静态和动态内容,因此如果一篇博客文章有评论更新,文章不必重新下载(应该是304),只需添加评论即可。现在,我正在考虑持久化获取的动态内容,以便下次只需要请求新的注释。在不依赖Flash/Gears/HTML5存储或其他插件的情况下,有没有办法做到这一点 编辑: 假设文章的评论部分如下所示: <div class='comments' id='comments'> <a name='comments'></a> <

到目前为止,我知道我可以使用AJAX分离静态和动态内容,因此如果一篇博客文章有评论更新,文章不必重新下载(应该是304),只需添加评论即可。现在,我正在考虑持久化获取的动态内容,以便下次只需要请求新的注释。在不依赖Flash/Gears/HTML5存储或其他插件的情况下,有没有办法做到这一点

编辑: 假设文章的评论部分如下所示:

<div class='comments' id='comments'>
 <a name='comments'></a>
 <h4>43 comments:</h4>
 <dl id='comments-block'></dl>
 <p class='comment-footer'>
  <a href='http://example.org/postcomment' onclick=''>Post a Comment</a>
 </p>
</div>

在此基础上,获取注释的AJAX调用将它们附加到
,其中包含以下代码段:

<div class='comments-singleblock'>
  <dt class='comment-author' id='comment-5378479254070788764'>
    <a name='comment-5378479254070788764'></a>
      Anonymous coward
      <span class='comment-timestamp'>
        <a href='#comment-5378479254070788764' title='comment permalink'>
           5 February 2012 16:52
        </a>
      </span>
    </a>
  </dt>
  <dd class='comment-body'>
    <p>
      Your lorum is my ipsum, the dolor is sit amet us.
    </p>
  </dd>
  <dd class='comment-footer'>
    Which eternal lies, that is not death.
  </dd>
</div>


你的爱是我的爱,悲伤是我们的爱。

永恒的谎言,那不是死亡。
它可以被缓存。随后的AJAX调用应该只返回新的内容,作为上述内容的补充。 现在,当文章加载时,逻辑是这样的

  • 第一个没有时间戳的AJAX注释调用:获取所有注释,直到当前时间戳A。这是缓存的
  • 随着时间的推移,在新的时间戳B上,在时间戳A之后向服务器发送请求以获取注释。此调用可能会被缓存,但毫无意义,因为请求url从未被重用
  • 客户端现在已经更新了注释,直到时间戳B。但只有时间戳A之前的内容被缓存
  • 客户端刷新文章,这将提示第一个没有时间戳的注释请求,该请求将返回缓存的注释,直到时间戳A为止

  • 因此,问题在于如何修改缓存内容以包含时间戳A和B之间的内容。

    创建一个局部变量来存储ajax调用的JSON结果


    创建一个局部变量来存储Max_Last_Modified_日期

    创建一个javascript帮助程序,用于绘制JSON结果

    创建一个服务器端处理程序,该处理程序将告诉您评论的MAX(LastModifiedDate)

    创建一个服务器端处理程序,该处理程序将以JSON格式返回注释

    • 所有结果(首次提取)
    • 任何修改日期在最大上次修改日期之后的内容

    请在页面上发布现有评论的HTML结构(例如,在对AJAX函数进行一次调用之后)。我希望有一种方法可以避免最后一部分的冗余(假设已经有1023条1IB lorem ipsums评论!您总共必须获取1MB和1IB)。我想这就是今天协议的局限性。现在接受你的答案。谢谢您可以在Web服务器上启用gzip压缩,这通常会将1KB文本压缩70-90%。这个过程在浏览器和Web服务器之间通常是透明的。不太清楚“最后一部分的冗余”是什么意思。在“第一次获取”之后(这将是您最大的拉动),您使用事件刷新列表,您不应该在“第一次获取”数据列表中拉下任何内容,您应该已经拥有了它。如果你担心“第一次获取”的大小,你可以在javascript中实现一个“滚动到视图”事件,它会在评论列表的底部向下滚动时附加到评论列表的底部,即当最后一条评论的底部进入视图时。哦,我想得不够深入。我认为在重访页面的情况下,我必须再次获取所有结果,因为没有存储Max_Last_Modified_Date。再说一次,我可以将日期作为元数据放入缓存中,并在开始获取注释之前对其进行解析。