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


25

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

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

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


14
为什么不改为禁用Visual Studio进行的缓存?(严重的是,谁在设计带有缓存的IDE?)
jpmc26

2
@ jpmc26什么缓存?
EJoshuaS-恢复莫妮卡

21
我的最后一条评论措辞宽松。我很抱歉,如果不清楚。如果服务器发回特定的标头,则浏览器仅缓存文件。这是愚蠢的Visual Studio的开发服务器在默认情况下发回缓存头,因为对这些文件的更改应该预期。花费额外的半秒钟时间来加载页面非常值得,因为它不应对浏览器中缓存的过时的JS和CSS文件带来的问题。我衷心希望有某种方法可以禁用它。
jpmc26 2015年

1
找不到任何Visual Studio选项,但更改开发web.config可能会解决Visual Studio中的缓存。iis.net/configreference/system.webserver/staticcontent/…–
GER

1
Chrome扩展程序“ Cache Killer”为我解决了这个问题,我不知道为什么,但是ctrl + f5有时对我不起作用
flagg19'4

Answers:


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)
  • 空缓存和硬重装

1
@Bruno Odd,我也一直使用ctrl + f5。刚刚测试,两者似乎都可以。
吉荣

我建议使用选项2。使用开关为Chrome创建单独的快捷方式,并使用不同的名称。将其放在Windows任务栏的不同端。
Christopher Hostage'4

8

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

如果有帮助,我在C#(实现剃须刀)中提供了有关如何执行此操作的摘要代码。

帮手:

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";
    }

实现方式:

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

希望这可以帮助

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

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

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


2
像这样对资源进行版本控制(或通过将版本/哈希值嵌入资源名称本身)可以非常有帮助,特别是在现实世界中部署更新时,与缓存控制标头上的规则相反,在所有情况下缓存可能正在发生,并且许多用户不知道如何(或需要)刷新缓存。如果您(使您的应用程序)请求新命名的资源,则可能无法对其进行缓存。
TripeHound

1
这不是很大的性能损失吗?每次在页面中插入链接时都对每个css和js文件进行哈希处理...您是否为此运行基准测试?
Raidri说恢复莫妮卡的时间为

2
@Raidri哈希哈希可能不是一个好主意(我第一次发表评论时没有注意到它正在这样做)。在构建过程中更新引用以使用哈希或版本。
TripeHound17年

@Raidri我有一个相当小的应用程序,它散布了20个资源,并且散列了20个资源,而且构建时间没有变化,因此我并未真正尝试对其进行基准测试。另外我不确定我是否理解您的第二句话,但是资源被缓存,并且如果您更改资源本身,则浏览器仅在哈希更改=>时才重新缓存它们。
fred beauchamp

哈希不是在构建时计算的,而是在每个页面生成时计算的。这是服务器问题,与浏览器中的缓存无关。
Raidri说恢复莫妮卡的时间为


3

此外@Steven答案,当你的开发人员工具控制台打开,可以右键点击刷新按钮,并使用下拉菜单。

在此菜单中,您可以选择“空缓存和硬重载”

就是您要的东西。


1
我认为您使用的是非英语版本的Chrome。我使用的是英文版本,称为“空缓存和硬重载”。
Nzall

1

如果您正在开发网站,则应该知道Chrome需要此must-revalidate设置Cache-Control,以便在服务器上更改文件后正确重新获取文件。

其他答案告诉您如何按SHIFT-F5强制您自己的Chrome版本重新提取所有文件。但是,每次站点更改时,告诉站点的所有用户都这样做是合理的吗?如果您设置Cache-Control为包括,must-revalidate则Chrome将检查文件是否已更改,然后在需要时正确下载它们。

请参阅此博客文章的详细信息:https : //agiletribe.wordpress.com/2018/01/29/caching-for-chrome/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.