【问题标题】:What happens when you go back with the browser?当您使用浏览器返回时会发生什么?
【发布时间】:2014-11-26 01:07:57
【问题描述】:

当我在浏览器中按下<== back 按钮时,发生了什么?

  • 是否再次使用相同的 URL 进行查询?
  • 当前 DOM 状态是否已保存和恢复? (仅限 HTML)
  • 当前页面状态是否已保存和恢复? (HTML + Javascript)
  • 是否查询了服务器,但如果发送unchanged,则使用本地缓存?
  • 一般来说,我们可以认为我们在前一页上有最新信息吗?

由于这些情况,我不清楚:

  • Stackoverflows 有时会非常糟糕地处理我的投票(不显示它,阻止我撤消,因为我上次投票是在 5 分钟前,但它在另一个选项卡中等等)
  • 当我在本地环境中工作时,我并没有感觉被询问太多
  • 我总是不确定返回时会发生什么,因此作为开发人员,请尽可能避免使用它(实际上只是为了找回历史中的 URL)

我的观点是再次查询是最好的主意,但它不是最快的,在这种情况下浏览器可能希望快速(给用户留下深刻印象)......另一方面,存储页面状态必须消耗大量内存...

【问题讨论】:

  • 好问题,我认为它保留了 HTML 和 JS,但我不确定,也许它在不同的浏览器中会发生变化
  • 这确实取决于浏览器。当您按下返回时,通常不会查询任何内容,并且将使用缓存来加载页面。问题通常是当您在页面上使用了 JavaScript,然后从缓存中重新加载它。

标签: javascript dom browser back-button


【解决方案1】:

视情况而定。

这取决于 HTTP 请求方法。如果页面是 GET,浏览器可能会决定缓存它,而不是重新请求。 POST 和其他 HTTP 方法不会被缓存,因为它们可能会对服务器端产生副作用。这就是为什么如果您返回到由 POST 请求加载的页面,您甚至会收到一个警告对话框。

这取决于缓存标头。(See here) 明确允许按照标头中所述进行缓存的页面在导航回时可能会被重用。

这取决于浏览器。有些已经针对用户体验进行了大量优化(更多的缓存、更快的速度、更多的陈旧性)。其他人更简单,只需重新请求页面。

这取决于内存使用情况,尤其是在移动设备上。如果页面很大或没有很多可用内存,浏览器可能会决定不保留页面内容和状态。

浏览器是复杂的软件,聪明的人长期以来一直在努力优化它们。


至于后退导航使用什么级别的缓存,我认为主要有三个级别

(这可能过于简单化了,但它会给你一个大致的概念。)

  1. 未缓存。页面被重新请求。
  2. 缓存资产。内容和资产在来自服务器时被缓存。这可能不需要内存,只需要磁盘空间,因为它可能不是很多数据。
  3. 缓存状态。 DOM 状态、JS 堆、表单字段值,都保存在内存中。这可能需要大量内存,并且可能不会写入磁盘,因为根据页面的不同,它可能有很多兆字节。

【讨论】:

    【解决方案2】:

    W3C 站点中的代理(包括浏览器)规范说: http://www.w3.org/TR/2014/WD-UAAG20-Reference-20140925/#sc_315

    对于导航耗时的用户也有好处, 累或痛苦,因为它使他们避免重新进入 长网址。 Back 功能是 UA 用户界面的一部分 呈现的内容。

    可能的解释是:“返回,但不要丢失数据!”每个浏览器都定义了自己的后退按钮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 2010-09-19
      • 2016-12-15
      • 2015-03-25
      • 1970-01-01
      • 2014-02-19
      相关资源
      最近更新 更多