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

Aug*_*ger 16 javascript browser dom back-button

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

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

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

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

我的观点是再次查询是最好的想法,但它不是最快的,浏览器可能想要在这种情况下快速(给用户留下深刻印象)......另一方面,存储页面状态必须花费很多记忆......

Ale*_*yne 7

这取决于.

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

这取决于缓存标头. (请参阅此处)在导航回来时,可以重复使用显式允许按其标题中所述进行高速缓存的页面.

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

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

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


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

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

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