回到浏览器后会发生什么?

时间:2014-10-01 08:29:43

标签: javascript dom browser back-button

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

  • 是否再次制作了具有相同网址的查询?
  • 当前的DOM状态是否已保存并恢复? (仅限HTML)
  • 当前页面状态是否已保存并恢复? (HTML + Javascript)
  • 服务器是否被查询但是如果发送unchanged则使用本地缓存?
  • 一般情况下,我们是否可以考虑在上一页提供最新信息?

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

  • Stackoverflows有时会非常糟糕地处理我的upvotes(没有显示它,阻止我撤消,因为我上次投票的时间是5分钟,但它是在另一个标签中等。)
  • 当我在当地环境中工作时,我的感觉很难被查询
  • 我总是不确定回去后会发生什么,因此作为开发者,尽量避免使用它(实际上只是在历史中找回一个URL)

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

2 个答案:

答案 0 :(得分:6)

取决于。

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

这取决于缓存标头。 (See here)导航回来时,可以重复使用其标头中明确允许缓存的页面。

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

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

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


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

(这可能是一种过度紧张,但它会给你一般的想法。)

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

答案 1 :(得分:1)

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

  

对于导航耗时的用户来说也是有益的,   累人,或痛苦,因为它允许他们避免重新进入   长网址。 Back功能是UA用户界面的一部分   渲染内容。

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