我在 Vista 上使用 IE 8,每次更改 javascript 文件然后开始调试时,我必须按 Ctrl+F5 让它重新加载我的 javascript。有没有办法让它在我开始调试时自动重新加载 javascript,但在浏览网络时不会失去性能提升?
是的,我知道你可能不喜欢 IE,但请记住,问题不是“什么是最好的浏览器?”。
我在 Vista 上使用 IE 8,每次更改 javascript 文件然后开始调试时,我必须按 Ctrl+F5 让它重新加载我的 javascript。有没有办法让它在我开始调试时自动重新加载 javascript,但在浏览网络时不会失去性能提升?
是的,我知道你可能不喜欢 IE,但请记住,问题不是“什么是最好的浏览器?”。
在 URL 的末尾添加一个字符串以中断缓存。我通常这样做(使用 PHP):
<script src="/my/js/file.js?<?=time()?>"></script>
这样每次我在处理它时它都会重新加载,然后在它投入生产时将其取下。实际上,我将其抽象了一点,但想法保持不变。
如果您查看本网站的来源,他们会以类似的方式在 URL 末尾附加修订号,以便在他们更新 javascript 文件时强制我们进行更改。
Paolo 的总体思路(即有效地更改请求 uri 的某些部分)是您最好的选择。但是,我建议使用更静态的值,例如在更改脚本文件时更新的版本号,以便您仍然可以获得缓存的性能提升。
所以要么是这样的:
<script src="/my/js/file.js?version=2.1.3" ></script>
或许
<script src="/my/js/file.2.1.3.js" ></script>
我更喜欢第一个选项,因为这意味着您可以维护一个文件,而不必不断地重命名它(例如,在源代码管理中保持一致的版本历史记录)。当然,任何一个(正如我所描述的那样)都会涉及每次更新您的包含语句,因此您可能想要提出一种动态的方式来执行此操作,例如每次部署时用动态替换固定值(使用 Ant 或其他)。
当您使用网页或 javascript 文件时,您希望每次更改时都重新加载它。您可以更改 IE 8 中的设置,使浏览器永远不会缓存。
按照这个简单的步骤。
如果您只想在您的浏览器上执行此操作(也就是不强制您的用户执行此操作),那么我不会将您的代码设置为不使用缓存。正如 José 所说,存在性能损失。
而且我不会完全关闭 IE 上的缓存,因为您访问的每个网站都会失去性能提升。您可以告诉 IE 始终从服务器刷新特定站点或浏览会话:
或者,对于那里的键盘快捷键爱好者(比如我自己)..
注意事项:话虽如此...请记住,无论何时您以与在生产中查看站点不同的方式进行开发/测试,您都会冒着得到混合结果的风险。一个很好的例子就是这个缓存问题。我们发现了一个问题,即 IE 正在缓存我们的 Ajax 调用,而不是从 GET 方法更新结果。如果我们在 IE 中禁用缓存,我们将永远不会在开发中看到这个问题,并且会像这样将它部署到生产环境中。
在 javascript 中,我认为这是不可能的,因为现代浏览器对 javascripts的安全性有一个政策。清除缓存是一个非常违规的行为。
您可以尝试添加
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
在你的标题中,但你会有性能损失。
这应该可以解决 ASP.NET 的问题。该概念与 PHP 示例中所示的概念相同。由于每次加载脚本时 URL 都不同,因此代理的浏览器都不应缓存文件。我习惯于将我的 JavaScript 代码放入单独的文件中,并在 Visual Studio 上浪费了大量时间,直到我意识到它不会重新加载 JavaScript 文件。
<script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script>
完整示例:
<%@ 页面标题="主页" 语言="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"> $(文档).ready(函数 () { 我的初始化(); }); </脚本> </asp:内容>
显然,这个解决方案应该只在开发阶段使用,并且应该在发布网站之前删除。
在 URL 的末尾添加 js 文件的修改日期。使用 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 文件的“捆绑包”。每次您的文件更改时,它都会生成一个新的查询字符串后缀……但仅在文件更改时才会这样做。这使得部署更新变得非常简单,因为您甚至不必考虑使用新版本号更新您的标签。
它还可以将多个 .js 文件捆绑到一个文件中,并在一个步骤中将它们缩小。同上 css。
为了消除在开发网站时在 IE 选项卡中反复按 F5 的需要,请使用ReloadIt。
对于 IE 中显示的每个网页,您可以配置一个文件名、一个目录或一组。如果这些配置路径中的任何一个发生任何更改,ReloadIt 会刷新 IE 选项卡。一个简单的工具。它只是工作。
这将重新加载所有内容,而不仅仅是 javascript。