本来是不想写这个的,但看到在用中文搜索得到的结果时,很是不满意。你基本得到是location.reload()是从浏览器缓存中读取。这样的答案有时真是莫名。很直接的理解成从IE缓存读取,及时原页面有更新也是这样。
最初的理解是这样,结果很自然的想到,使用location.reload(true)来重新加载页面(强制获取所有页面的元素)。而且搜索到的结果很多直接回答“使用location.reload(true)就可以解决问题了”。理论上这样是没问题的,但在实际的应用环境中,如果这个操作是经常使用的,这样的用法很明显的是降低服务器性能的,对于访问量高的网站。嘿嘿,你这样使用,是给服务器制造麻烦。
通过location.reload(false)的Http请求状况(pic1)
通过location.reload(true)的Http请求状况(pic2)
从PIC2中就很明显的看出所有的请求都是200,这样的结果就是服务器重新返回所有的数据(特别是当这个页面图片很多的时候)。而这种重新操作是没有必要的。性能问题就很明显了。
下面列出location.relaod的具体解释,个人认为这是比较标准的啦
The reload() method of the Location object reloads the document that is currently displayed in the window of the Location object. When called with no arguments, or with the argument false, it uses the If-Modified-Since HTTP header to determine whether the document has changed on the web server. If it has, it reloads the document from the server, and if not, it reloads the document from the cache. This is is the same action that occurs when the user clicks on Navigator's Reload button.
When reload() is called with the argument true, then it will always bypass the cache and reload the document from the server, regardless of the last-modified time of the document. This is the same action that occurs when the user shift-clicks on Navigator's Reload button
其实这里还可以简单的理解成(IE浏览器)
location.reload() => F5刷新
location.relaod(true) => Ctrl + F5 刷新
这里顺便提一下:location.href 和 location.replace
这两个也可以达到刷新页面的效果,但是不同于locatio.reload.具体大家可以看我最后列举的参考资料.
location.replace 没有历史记录,就是浏览器的前进后退按钮失效(PS:我们部落里的帖子不能前进后退功能失效可能是这个原因)
location.href 有历史记录,相当于一个页面的链接跳转。所以不会有"post"数据的问题。
有同事反映Location.relaod(false)在使用时有问题,但我目前在项目中的实际使用没发现。暂时只记录到这。以后有问题在更新
参考资料: