每次访问网站时,强制 Google Chrome 浏览器检查新的 JavaScript 文件

EJo*_*ica 25 google-chrome internet-explorer javascript browser-cache temporary-internet-files

因此,如果我在 Internet Explorer 中访问 Internet 选项: 在此处输入图片说明

我可以调整 IE 检查更新时的设置: 在此处输入图片说明

我可以在 Google Chrome 中做类似的事情吗?现在,当我更改 JavaScript 文件并从 Visual Studio 进行调试时,Chrome 将始终使用缓存版本而不是使用修改后的版本。为了能够使用当前版本,我必须手动清除我的临时 Internet 文件/缓存,这真的很烦人。

Ste*_*ven 55

选项 1:暂时禁用缓存

  1. 打开开发者工具(按F12或菜单,更多工具,开发者工具)
  2. 打开开发人员工具设置(按F1或 DevTools 菜单,设置)
  3. 在“首选项”窗格的“网络”标题下选中“禁用缓存(DevTools 打开时)”

选项 2:禁用会话缓存

使用命令行开关启动 Chrome,--disk-cache-size=1 --media-cache-size=1这会将缓存限制为 1 个字节,从而有效地禁用缓存。

选项 3:手动强制刷新

重新加载当前页面,忽略缓存内容: Shift+F5Ctrl+ Shift+r

Chrome 键盘快捷键 - Chrome 帮助(在“网页快捷键”下)

选项 4:额外的重新加载选项来源

打开开发人员工具后,右键单击“重新加载”按钮以显示包含以下内容的重新加载菜单:

  • 正常重新加载 (Ctrl+R)
  • 硬重新加载 (Ctrl+Shift+R)
  • 清空缓存和硬重新加载


fre*_*amp 8

它可能不是 100% 与 chrome 刷新相关,而是为了进一步开发。就像@Dom 说的那样,您可以在资源后添加 ?v=#。自动化该过程的一种方法是散列所述文件的内容并将其用作版本。

如果有帮助,我有一个关于如何在 C#(Razor for implementation)中执行此操作的代码片段。

帮手:

public static string HashUrl(string relativeUrl)
    {
        var server = HttpContext.Current.Server;
        if (File.Exists(server.MapPath(relativeUrl)))
        {
            byte[] hashData;
            using (var md5 = MD5.Create())
            using (var stream = File.OpenRead(server.MapPath(relativeUrl)))
                hashData = md5.ComputeHash(stream);

            return relativeUrl.Replace("~", "") + "?v=" + BitConverter.ToString(hashData).Replace("-", "");
        }
        return relativeUrl + "?v=notFound";
    }
Run Code Online (Sandbox Code Playgroud)

执行:

<link rel="stylesheet" href=@Util.HashUrl("~/Controllers/Home/Views/Index.css") />
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

编辑 --- 有些人要求一些构建运行时和 1000 个小资源,大约需要 11 毫秒。

https://en.code-bude.net/2013/08/07/md5-hashes-in-c-benchmark-and-speed-%E2%80%8B%E2%80%8Boptimization/

在此处输入图片说明 https://en.code-bude.net/wp-content/uploads/2013/08/md5_performance_benchmark_2.png

  • 像这样对资源进行版本控制(或通过在资源名称本身中嵌入版本/哈希)可能非常有用,尤其是在现实世界中部署更新时,其中 - 与缓存控制标头上的规则相反 - 所有方式缓存可能正在发生,许多用户不知道如何(或需要)刷新缓存。如果您(使您的应用程序)请求新命名的资源,则它不可能被缓存。 (2认同)
  • @Raidri 即时散列可能不是一个好主意(我第一次评论时没有注意到它正在这样做)。在构建过程中更新引用以使用哈希或版本。 (2认同)

小智 5

在这些可能无法实现的其他情况下,例如想要在您无权访问的最终用户计算机上强制刷新,您可以将版本号附加到脚本名称作为查询参数,使浏览器识别它作为一个不同的文件。IE。example.js?v=1. 请记住,您需要在每次重新加载时更改数字以强制执行它。

您也可以通过本地开发来做到这一点,但开发工具方法效率更高。