我在Vista上使用IE 8,每次我更改javascript文件然后开始调试时,我必须按Ctrl + F5才能重新加载我的javascript。有没有什么方法可以让我在开始调试时自动重新加载javascript,但是在浏览网页时不会失去性能提升?
是的,我知道你可能不喜欢IE,但请记住问题不是“什么是最好的浏览器?”。
答案 0 :(得分:48)
在网址末尾添加一个字符串以中断缓存。我通常(使用PHP):
<script src="/my/js/file.js?<?=time()?>"></script>
因此,每当我正在处理它时它会重新加载,然后在它投入生产时将其取下。实际上,我把它抽象出来了一点,但这个想法仍然是一样的。
如果您查看本网站的来源,他们会以类似的方式在网址末尾附加修订号,以便在更新javascript文件时强制更改。
答案 1 :(得分:25)
Paolo的总体想法(即有效地改变请求uri的某些部分)是你最好的选择。但是,我建议使用更静态的值,例如更改脚本文件时更新的版本号,这样您仍然可以获得缓存的性能提升。
所以要么是这样的:
<script src="/my/js/file.js?version=2.1.3" ></script>
或者
<script src="/my/js/file.2.1.3.js" ></script>
我更喜欢第一个选项,因为这意味着您可以维护一个文件,而不必不断地重命名它(例如,在源代码管理中维护一致的版本历史记录)。当然,任何一个(正如我所描述的那样)都会涉及每次更新include语句,因此您可能想要采用动态方式来实现它,例如每次部署时用动态替换固定值(使用Ant或其他)。
答案 2 :(得分:16)
当您使用网页或javascript文件时,您希望每次更改时都重新加载它。您可以在IE 8中更改设置,以便浏览器永远不会缓存。
按照这个简单的步骤。
答案 3 :(得分:5)
如果您希望在您的浏览器上执行此操作(a.k.a.而不是强制用户),那么我不会将您的代码设置为不使用缓存。正如何塞所说,有一个表现损失。
我不会完全关闭IE上的缓存,因为您访问的每个网站都会失去性能提升。您可以告诉IE始终从服务器刷新特定站点或浏览会话:
或者,对于键盘 - 快捷方式 - philes(像我一样)那里..
注意事项: 说到这一点......请记住,无论何时以不同的方式开发/测试将在生产中查看网站,您都有可能获得混合结果。一个很好的例子是这个缓存问题。我们发现了一个问题,即IE缓存了我们的Ajax调用,而不是更新GET方法的结果。如果我们在IE中禁用缓存,我们就不会在开发中看到这个问题,并且会将它部署到这样的生产中。
答案 4 :(得分:1)
在javascript中我认为这是不可能的,因为现代浏览器在javascripts中有一个policy on security ..清除缓存是非常违反的。
您可以尝试添加
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
在标题中,但是您会失去性能。
答案 5 :(得分:1)
这应该是ASP.NET的技巧。这个概念与PHP示例中显示的相同。由于每次加载脚本时URL都不同,因此代理浏览器都不应该缓存该文件。 我习惯把我的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:Content>
显然,此解决方案只应在开发阶段使用,并应在发布网站之前删除。
答案 6 :(得分:0)
要在开发网站时无需在IE标签中反复按F5,请使用ReloadIt。
对于IE中显示的每个网页,您可以配置文件名,目录或一组。如果在任何这些配置的路径中发生任何更改,ReloadIt将刷新IE选项卡。一个简单的工具。它只是有效。
这将重新加载所有内容,而不仅仅是javascript。
答案 7 :(得分:0)
在网址末尾添加js文件的修改日期。使用PHP,它看起来像这样:
echo '<script type="text/javascript" src="js/something.js?' . filemtime('js/something.js') . '"></script>';
每次更新脚本时都会重新加载脚本。
答案 8 :(得分:0)
如果您正在运行ASP.Net,请查看ASP.Net 4.5中提供的Bundling and Minification模块。
http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification
您可以声明指向您的javascript文件的“捆绑”。每次文件更改时,它都会生成一个新的查询字符串后缀...但只有在文件更改时才会这样做。这使得部署更新变得非常简单,因为您甚至不必考虑使用新版本号更新标记。
它还可以将多个.js文件捆绑在一起,并将其缩小,一步到位。同上css。
答案 9 :(得分:0)