按下导航后,HTML5本地存储将恢复

时间:2012-12-17 09:19:16

标签: html5 local-storage

我今天遇到了这个问题。我正在为网站制作一个迷你购物车,它将在每个页面上显示,除了实际购物车。

网站上的性能非常重要,因此我决定临时将当前存储中的当前项目缓存在本地存储中,以避免不必要的服务器端请求在每个页面加载时获取相同的项目。

由于迷你购物车实际上没有显示在购物车上,它仍然会收听回调,例如删除项目时。重点是重置缓存或从缓存副本中删除该项目。


我面临的问题:

用户最终进入购物车页面,这可能会清除缓存(如果用户是最后一步) 如果我通过单击链接导航到其他页面,它可以正常工作 - 缓存被清除。

问题是,如果我使用后退按钮(浏览器后退按钮,鼠标后退按钮等),用户将返回上一页,我在购物车页面(清除缓存)中所做的更改将被还原! (即使我重新加载页面)

所以问题是:

如果我回去,如何清除本地存储并避免恢复?同时在其他浏览器中具有一致的行为。


cache仅此一项,但项目是本地存储,在添加或删除新项目时会更新。清除缓存只会删除它(使用localStorage.removeItem)。

1 个答案:

答案 0 :(得分:1)

鉴于在IE8中尝试此项时删除了该项,可以肯定地说您正在执行正确的代码来删除该项。然后我不得不说这看起来像是一个与浏览器相关的问题,当您返回以保持一致的用户体验时,浏览器会保留信息。这似乎得到以下事实的支持:直接导航到同一链接不会恢复已删除的对象。

如果您正在完成像填充购物车这样的过程,这可能无关紧要,只要您离开已访问页面的后方路径即可正确更新缓存。 (即,在页面B上删除缓存中的项目1,在返回到页面A时返回,但在导航到页面D时消失)。

您拥有的另一个选择是简单地使用服务器端会话存储机制。到目前为止,这是我要做的。我看到程序员最大的错误之一,特别是在SO上,他们认为操作X会影响性能并试图避免它。 如果没有基准测试,就无法对性能做出任何具体陈述。在返回几个会话对象时,服务器端很可能比静默端代码更快。服务器端会话几乎是网络中每个站点都使用的一个很棒的工具,如果忽略它会因为它会如何影响性能而忽略它是不幸的。