2

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

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

由于迷你购物车实际上并未显示在购物车上,因此它仍会监听回调,例如在移除商品时。关键是重置缓存或仅从缓存副本中删除该项目。


我面临的问题:

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

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

所以问题是:

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


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

4

1 回答 1

1

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

如果您正在经历诸如填充购物车之类的过程,这可能无关紧要,只要您留下访问页面的回溯,缓存就会正确更新。(即缓存中的第 1 项在页面 B 上被删除,返回页面 A 时返回,但导航到页面 D 时消失)。

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

于 2012-12-17T12:28:14.093 回答