F5刷新和Ctrl+F5刷新

JavaScript022

F5刷新和Ctrl+F5刷新,第1张

在项目中,经常会遇到明明刷新了页面 但是页面中的 css 样式没有发生变化或者 js 事件没有执行,原因就出在刷新的问题上。谷歌的 Ctrl+R 和 F5 刷新对应,而 Ctrl+Shift+R 和 Ctrl+F5 刷新对应。

Google 给的定义是 硬性重新加载 ,所有的资源(静态资源、ajax请求)都会从服务器重新再次请求,不会被浏览器所缓存。

Google 给的定义是 正常重新加载 ,也就是说浏览器会缓存在内存或者磁盘当中。

1.资源的大小

2. from disk cache

3. from memory cache

4. from ServiceWorker

表示此资源是取自 磁盘 ,不会请求服务器。已经在之前的某个时间加载过该资源,但是此资源不会随着该页面的关闭而释放掉,因为是存在硬盘当中的,下次打开仍会 from disk cache 。

表示此资源是取自 内存 ,不会请求服务器。已经加载过该资源且缓存在内存当中;关闭该页面此资源就被内存释放掉了,再次打开相同页面时不会出现 from memory cache 的情况。

当 http 状态为 200 是实实在在从浏览器获取的资源,当 http 状态为 304 时该数字是与服务端通信报文的大小,并不是该资源本身的大小,该资源是从本地获取的。

在 JS 中可以通过 Location 对象来控制浏览器访问的 URL 来达到刷新/跳转的目的。

JS 中的 Location 对象常用的有 href 属性,和 assign, replace 方法等。直接给 Location 对象的 href 属性赋值 或对 assign, replace 方法调用都能使用浏览器转到指定的 URL,如果我们转递的 URL 就是当前 URL 那么就可以达到刷新的目的。但是直接对 href 属性赋值相同的 URL 有的浏览器不会响应,而对 replace 调用时使用不同的 URL 又会产生历史记录,所以在这里我们使用 assign 是最合适的,下面是示例代码:

location.assign(location.href) // 这一句相当于刷新浏览器

如果之前的页面是使用 POST 方法访问的,这个时候是不能使用上面的方法,而应该使用 reload 这个真正的 F5 刷新方法:

location.reload() // 这个等同于 F5 刷新浏览器

执行后浏览器会弹出提示是否同意再次提交 POST 数据的确认信息框。