如何强制IE重新加载JavaScript?
我在Vista上使用IE 8,每次我改变一个JavaScript文件,然后开始debugging,我不得不按Ctrl + F5重新加载我的JavaScript。 有没有什么办法可以让我在开始debugging的时候自动重新加载javascript,但是在浏览网页时不会失去性能上的提升?
是啊,我知道你可能不喜欢IE浏览器,但请记住,问题不是“什么是最好的浏览器?”。
在URL的末尾添加一个string以中断caching。 我通常做(与PHP):
<script src="/my/js/file.js?<?=time()?>"></script>
所以每次在我工作的时候都会重新加载,然后在生产时就把它拿下来。 实际上,我把这个抽象出来多一点,但是这个想法是一样的。
如果您查看本网站的来源,他们会以类似的方式在url末尾添加版本号,以便在更新javascript文件时强制更改。
保罗的一般想法(即有效地改变请求的一部分uri)是你最好的select。 不过,我build议使用更新的静态值,例如在更改脚本文件时更新的版本号,以便仍然可以获得caching的性能提升。
所以要么是这样的:
<script src="/my/js/file.js?version=2.1.3" ></script>
或者可能
<script src="/my/js/file.2.1.3.js" ></script>
我更喜欢第一个选项,因为这意味着您可以维护一个文件,而不必不断地重命名它(例如,在源代码pipe理中保持一致的版本历史logging)。 当然,其中一个(正如我所描述的)每次都会涉及到更新包含语句,所以您可能想要采取一种dynamic的方式来实现,比如每次部署时用一个dynamic的replace固定值(使用Ant或其他)。
当您使用网页或JavaScript文件时,您希望每次更改它时都要重新加载它。 您可以更改IE 8中的设置,以便浏览器永远不会caching。
按照这个简单的步骤。
- select工具 – > Internet选项。
- 在常规选项卡中,单击浏览历史logging部分中的设置button。
- 点击“每次访问网页”单选button。
- 点击确定button。
如果你正在寻找只在你的浏览器(也就是不要强迫你的用户)这样做,那么我不会设置你的代码不使用caching。 正如何塞所说,有一个性能损失。
而且我不会closuresIE上的caching,因为你失去了你访问的每个网站的性能增益。 您可以告诉IE始终从服务器刷新特定站点或浏览会话:
- 打开IE开发者工具
- 从菜单中selectcaching
- 单击以选中“总是从服务器刷新”
或者,对于键盘快捷方式(如我自己)在那里..
- F12,Alt + C,向下箭头,Alt + R。
注意事项 :说到这一点…请记住,如果您以不同的方式进行开发/testing,而不是在生产环境中查看网站,则可能会产生混合结果。 这个caching问题就是一个很好的例子。 我们发现IEcaching我们的Ajax调用,而不是从GET方法更新结果的问题。 如果我们在IE中禁用了caching,那么我们就不会在开发中看到这个问题,并且会把它部署到这样的生产环境中。
在JavaScript中,我认为这是不可能的,因为现代浏览器有一个安全的政策在JavaScripts ..清理caching是一个非常违反。
你可以尝试添加
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
在你的头上,但你会有性能损失。
这应该为ASP.NET做的伎俩。 这个概念和PHP例子中的一样。 由于每次加载脚本URL都不相同,所以代理浏览器都不应该caching文件。 我习惯把我的JavaScript代码放到单独的文件中,并用Visual Studio浪费了大量的时间,直到我意识到它不会重新加载JavaScript文件。
<script src =“Scripts / main.js?version = <%= DateTime.Now.Ticks.ToString()%>”type =“text / javascript”> </ script>
完整的例子:
<%@ Page Title =“Home Page”Language =“C#”MasterPageFile =“〜/ Site.master”AutoEventWireup =“true” CodeBehind =“Default.aspx.cs”Inherits =“WebApplication1._Default”%> <asp:Content ID =“HeaderContent”runat =“server”ContentPlaceHolderID =“HeadContent”> <script src =“Scripts / jquery-1.4.1-vsdoc.js”type =“text / javascript”> </ script> <script src =“Scripts / main.js?version = <%= DateTime.Now.Ticks.ToString()%>”type =“text / javascript”> </ script> <script type =“text / javascript”> $(document).ready(function(){ myInit(); }); </ SCRIPT> </ ASP:内容>
很显然,这个解决scheme只能在开发阶段使用,在发布站点之前应该被移除。
为了避免在开发网站的时候在IE标签中反复按F5,使用ReloadIt 。
对于IE中显示的每个网页,您可以configuration一个文件名,一个目录或一组目录。 如果在这些configuration的path中发生任何改变,ReloadIt刷新IE标签。 一个简单的工具。 它只是工作。
这将重新加载一切,不只是JavaScript。
在您的URL末尾添加修改js文件的date。 用PHP它看起来像这样:
echo '<script type="text/javascript" src="js/something.js?' . filemtime('js/something.js') . '"></script>';
每次更新脚本时都会重新加载。
如果您正在运行ASP.Net,请查看ASP.Net 4.5中的捆绑和缩小模块。
http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification
你可以声明一个指向你的JavaScript文件的“包”。 每当你的文件改变,它会产生一个新的查询string后缀…但只会在文件更改时这样做。 这使得部署更新变得非常简单,因为您甚至不必考虑使用新的版本号来更新标签。
它也可以将多个.js文件捆绑到一个文件中,并将它们缩小,一步到位。 同上的CSS。