44

我在 Vista 上使用 IE 8,每次更改 javascript 文件然后开始调试时,我必须按 Ctrl+F5 让它重新加载我的 javascript。有没有办法让它在我开始调试时自动重新加载 javascript,但在浏览网络时不会失去性能提升?

是的,我知道你可能不喜欢 IE,但请记住,问题不是“什么是最好的浏览器?”。

4

10 回答 10

48

在 URL 的末尾添加一个字符串以中断缓存。我通常这样做(使用 PHP):

<script src="/my/js/file.js?<?=time()?>"></script>

这样每次我在处理它时它都会重新加载,然后在它投入生产时将其取下。实际上,我将其抽象了一点,但想法保持不变。

如果您查看本网站的来源,他们会以类似的方式在 URL 末尾附加修订号,以便在他们更新 javascript 文件时强制我们进行更改。

于 2009-05-15T01:12:17.627 回答
25

Paolo 的总体思路(即有效地更改请求 uri 的某些部分)是您最好的选择。但是,我建议使用更静态的值,例如在更改脚本文件时更新的版本号,以便您仍然可以获得缓存的性能提升。

所以要么是这样的:

<script src="/my/js/file.js?version=2.1.3" ></script>

或许

<script src="/my/js/file.2.1.3.js" ></script>

我更喜欢第一个选项,因为这意味着您可以维护一个文件,而不必不断地重命名它(例如,在源代码管理中保持一致的版本历史记录)。当然,任何一个(正如我所描述的那样)都会涉及每次更新您的包含语句,因此您可能想要提出一种动态的方式来执行此操作,例如每次部署时用动态替换固定值(使用 Ant 或其他)。

于 2009-05-15T01:22:31.173 回答
18

当您使用网页或 javascript 文件时,您希望每次更改时都重新加载它。您可以更改 IE 8 中的设置,使浏览器永远不会缓存。

按照这个简单的步骤。

  1. 选择工具-> Internet 选项。
  2. 在常规选项卡中,单击浏览历史记录部分中的设置按钮。
  3. 单击“每次访问网页”单选按钮。
  4. 单击确定按钮。
于 2009-05-15T01:13:30.743 回答
6

如果您只想在您的浏览器上执行此操作(也就是不强制您的用户执行此操作),那么我不会将您的代码设置为不使用缓存。正如 José 所说,存在性能损失。

而且我不会完全关闭 IE 上的缓存,因为您访问的每个网站都会失去性能提升。您可以告诉 IE 始终从服务器刷新特定站点或浏览会话:

  1. 打开 IE 开发者工具
  2. 从菜单中选择缓存
  3. 单击以选中“始终从服务器刷新”

或者,对于那里的键盘快捷键爱好者(比如我自己)..

  • F12、Alt+C、向下箭头、Alt+R。

注意事项:话虽如此...请记住,无论何时您以与在生产中查看站点不同的方式进行开发/测试,您都会冒着得到混合结果的风险。一个很好的例子就是这个缓存问题。我们发现了一个问题,即 IE 正在缓存我们的 Ajax 调用,而不是从 GET 方法更新结果。如果我们在 IE 中禁用缓存,我们将永远不会在开发中看到这个问题,并且会像这样将它部署到生产环境中。

于 2012-01-05T17:39:08.093 回答
2

如果您在 IE11 中,您可以使用 IE 开发人员工具告诉 IE 始终从服务器刷新特定浏览会话。

  • 使用 F12 键打开 IE 开发者工具
  • 转到网络选项卡
  • 单击“始终从服务器刷新”按钮

按钮总是从服务器刷新

(对不起法国捕获)

于 2019-09-12T08:19:30.027 回答
1

在 javascript 中,我认为这是不可能的,因为现代浏览器对 javascripts的安全性有一个政策。清除缓存是一个非常违规的行为。

您可以尝试添加

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

在你的标题中,但你会有性能损失。

于 2009-05-15T01:16:25.947 回答
1

这应该可以解决 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:内容>

显然,这个解决方案应该只在开发阶段使用,并且应该在发布网站之前删除。

于 2012-05-13T15:43:34.540 回答
1

在 URL 的末尾添加 js 文件的修改日期。使用 PHP,它看起来像这样:

echo '<script type="text/javascript" src="js/something.js?' . filemtime('js/something.js') . '"></script>';

每次更新脚本时都会重新加载脚本。

于 2012-06-17T21:27:40.873 回答
1

如果您正在运行 ASP.Net,请查看 ASP.Net 4.5 中提供的捆绑和缩小模块。

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

您可以声明一个指向您的 javascript 文件的“捆绑包”。每次您的文件更改时,它都会生成一个新的查询字符串后缀……但仅在文件更改时才会这样做。这使得部署更新变得非常简单,因为您甚至不必考虑使用新版本号更新您的标签。

它还可以将多个 .js 文件捆绑到一个文件中,并在一个步骤中将它们缩小。同上 css。

于 2014-06-25T00:02:39.413 回答
0

为了消除在开发网站时在 IE 选项卡中反复按 F5 的需要,请使用ReloadIt

在此处输入图像描述

对于 IE 中显示的每个网页,您可以配置一个文件名、一个目录或一组。如果这些配置路径中的任何一个发生任何更改,ReloadIt 会刷新 IE 选项卡。一个简单的工具。它只是工作。

这将重新加载所有内容,而不仅仅是 javascript。

于 2011-09-09T12:42:28.983 回答