禁用Chrome缓存进行网站开发


1606

我正在修改网站的外观(修改CSS),但由于烦人的持久性缓存,在Chrome上看不到结果。我试过Shift+刷新,但不起作用。

如何临时禁用缓存或以可以看到更改的某种方式刷新页面?


185
这可能是最严重的Chrome错误。我已经浪费了太多的时间在想为什么事情出问题了,只是发现了-尽管强制使用^ F5-完全重新加载-它使用了一个小时的陈旧资源。
格伦·梅纳德

45
浏览器应该缓存。请记住,您的用户也会被缓存-因此,在网站投入生产后,可能看不到您所做的更改。避免这种情况的方法是对文件进行版本控制。my_css.css?version = something_unique。如果浏览器以前没有看到该版本,则它将再次下载文件。例如,something_unique可以是最后修改日期。
user984003 2013年

34
@ user984003 Ctrl+Shift+R还是Shift+R应该刷新缓存...
Adonis K. Kakoulidis

19
@ user984003如果我告诉他们不要缓存,则不会。是的,缓存删除版本号非常适合最终版本,因为这是用户正在使用的版本,但是当我建立一个新站点并希望看到不断变化时,我不会每次都更改版本号。因此,为什么要使用Firefox开发-它具有最可靠的禁用缓存功能!
andrewb

11
@ user984003是的,浏览器应该在浏览时缓存...。开发时,您需要对此进行更多控制。
ahnbizcad '16

Answers:


1975

Chrome DevTools可以禁用缓存。

  1. 右键单击并选择Inspect Element打开DevTools。或使用以下键盘快捷键之一
    • F12
    • Command在Mac上为+ Option+i
    • ControlWindows或Linux上的+ Shift+i
  2. Network在工具栏中单击以打开网络窗格。
  3. 选中Disable cache顶部的复选框。

开发工具面板的屏幕截图

请记住,作为一个鸣叫@ChromiumDev指出,该设置是只由当devtools是开放的

请注意,这将导致重新加载所有资源。如果只希望对某些资源禁用缓存,则可以修改服务器与文件一起发送的HTTP标头

如果您不想使用此Disable cache复选框,则在打开DevTools的情况下长按刷新按钮将显示一个菜单,其中包含Hard Reload或的选项Empty Cache and Hard Reload应该具有相似的效果。了解选项之间的区别。可以使用以下快捷方式:

  • Command在Mac上为+ Option+R
  • ControlWindows或Linux上的+ Shift+R

长按


255
根据我的经验,此设置(以及该面板上的所有设置)仅在打开开发工具
约翰

28
@Steve这对我不起作用。即使我使用的是Chrome 19.0.1084.52,也没有任何更改,并且选中了禁用缓存的复选框。我尝试打开开发面板。我尝试过关闭它。我什至尝试重新启动浏览器,然后重新启动计算机。它似乎仍然继续为我提供页面的缓存版本。我该怎么办?Chrome之前曾给过我类似的问题,因此我从计算机上删除了与Google相关的所有内容,然后安装了chrome back。它修复了大多数问题,例如“永久加载历史记录标签”。我想它仍然不起作用。
Tgwizman

11
我发现更改设置后刷新当前页面时此方法不起作用。只有当我导航离开然后又返回时,它才开始起作用。
Matt Gibson 2014年

3
...或者您可以在隐身模式下进行调试!(不缓存任何文件)
Kwame 2015年

5
该设置是Web开发历史上最大的谎言。重新启动我的电脑,而Firefox仍在显示最新的CSS时,chrome仍然显示错误的结果:(
Claudiu Creanga

247

在此处输入图片说明

当您需要每小时清除30次缓存时,清除缓存太烦人了。.因此,我安装了一个名为Classic Cache Killer的Chrome扩展程序,该扩展程序可在每次页面加载时清除缓存。

Chrome商店链接(免费) (现在没有恶意软件!)

现在,我的模拟json,javascript,css,html和数据每次每次页面加载都会刷新。

永远不必担心是否需要清除缓存。

我发现有大约20种适用于Chrome的缓存清理器,但是这种清理器似乎很轻便,而且工作量为零。在更新中,Cache Killer现在可以“始终打开”。

注意:我完全不了解插件作者。我只是觉得有用。


4
是的,Chrome开发者工具选项似乎不适用于我。但是,缓存杀手的工作就像一种魅力。重新加载时间明显慢一些,例如4-5倍,但是实际提供新内容显然要快得多。
布莱斯·约翰逊

2
仅在Mac上的localhost上工作时,“清除缓存”和“禁用缓存”才起作用。对于在线内容,我感到耳目一新,希望能看到任何变化。此扩展名是救生员。
Sbpro

2
我发现使用“禁用缓存”会导致本地存储出现问题,尤其是Auth0的角度存储。Cache Killer可以完美运行,并且不会导致本地存储出现问题。
trevorc

5
由于恶意软件而从Chrome扩展程序商店中删除了:(其他选择?
Semyon Vyskubov

3
最终写出了自己的照片,工作原理相同,但是可以在每个选项卡之间切换。MIT许可证,没有恶意软件,我保证😎!github.com/themichaelyang/cache-clearer
Michael Yang

199

重新加载菜单的图片

  1. 通过按F12,然后(在控制台打开的情况下)拉起Chrome开发者控制台:

  2. 右键单击(或按住鼠标左键)在浏览器顶部的重新加载按钮上,然后选择“空缓存和硬重新加载”。

这将超出“硬重载”以完全清空缓存,从而确保通过javascript等下载的任何内容也将避免使用缓存。您不必弄乱设置或其他任何东西,这是一种快速的一键式解决方案。


7
好吧,但是它绝对不能在Mac上运行,我已经点击了带有各种组合键的reload按钮;)
MJB 2014年

1
什么是硬装?
ManirajSS 2014年

@ManirajSS:它将重新加载所有内容并避免使用缓存,但是在页面加载之后,它不会重新下载javascript下载的内容。我不确定为什么有人会使用它,但是我想您可能会提出一些有用的极端案例。
JackArbiter 2014年

2
也不会清除页面内iframe的缓存。
Pablo Mescher 2014年

7
不确定这种情况持续了多长时间,但是从Chrome 41开始,只要您打开了开发人员工具窗口,就可以在OS X上单击并按住重新加载按钮。
蒂姆·基廷

47

永久禁用Chrome中还有两个选项可以禁用页面缓存

1.在注册表中停用Chrome缓存

打开注册表(开始->命令-> Regedit)

搜索: HKEY_CLASSES_ROOT\ChromeHTML\shell\open\command

将“ .chrom.exe”之后的部分更改为此值: –disable-application-cache –media-cache-size=1 –disk-cache-size=1 — "%1"

例: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -disable-application-cache –media-cache-size=1 –disk-cache-size=1 — "%1"

重要:

  • ... chrome.exe之后有一个空格和一个连字符”

  • 保留chrome.exe的路径

  • 如果复制该行,请确保检查引号是否为实际引号。

2.通过更改快捷方式属性来停用Chrome缓存

右键单击Chrome图标,然后在上下文菜单中选择“属性”。将以下值添加到路径: –disk-cache-size=1

例: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" –disk-cache-size=1

重要:

  • ... chrome.exe之后有一个空格和一个连字符”

  • 保留chrome.exe的路径


1
使用代码标签使您的答案更具可读性。我认为这可能是最好的答案之一。
ThorSummoner

3
好答案。尽管对于大多数人而言,禁用缓存只是开发过程中的临时事件。永久禁用它会大大降低正常的浏览体验,并且是一种不良的互联网公民身份,因为它给您访问的Web服务器带来了不必要的负担。
danielson317

3
我不同意不良的互联网公民身份,我们在这里谈论的是为开发工作创建一些捷径。因此,这绝对是恕我直言的最佳答案。只是一件小事。每次我在Windows上从此SO页面将此内容复制到某些Chrome快捷方式时,其中某些字符都不会正确显示。这些是正确的:"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-application-cache --media-cache-size=1 --disk-cache-size=1另外,之前的字符是什么 "%1"?我不知道
peter.petrov


22

除了禁用缓存选项(您可以通过开发人员工具窗口右下角的按钮-工具|开发人员工具或Ctrl+ Shift+ I进入)之外,在开发人员工具的网络窗格上,您现在可以右键单击然后从弹出菜单中选择“清除缓存”。


22
  1. F12 打开Chrome DevTools
  2. F1 打开DevTools设置
  3. 选中禁用缓存(打开DevTools时),如下所示:

当前位于“ 选项” 选项卡上,这是默认选项。您可能需要向下滚动。自问这个问题以来,此复选框已移动了至少两次。最后我检查了一下,它在底部的中间列中。如果您在较薄的屏幕上打开它,并且“首选项”下有两列,则该列可能位于右上角附近。如有任何更改或评论,请随时更新。我将更新该帖子。

在此处输入图片说明


2
这与直接在F12 Chrome Devtools中检查“禁用缓存”功能相同,并且在重新启动Chrome时将重置。
Bogdan Verbenets

18

而不是按“ F5”:

“ Ctrl + F5”


6
它也可以在Firefox中使用(不是因为它与这个问题相关,但是有人可能会发现它有用)
Donald Duck

17

在Canary频道中(可能会紧随开发者和稳定频道),这是“常规”部分下左侧的第二个总体选择。

禁用Chrome Canary Channel中的缓存

除此之外,您始终可以通过Ctrl + Shift + N切换到隐身模式。尽管很遗憾,这也会结束您的会话。


4
以我的经验,这仅在打开开发工具时有效。我感到困惑的是,为什么直到我意识到我已经关闭了开发工具,缓存仍然保留在页面上。奇怪的是设置没有覆盖所有内容。
mbokil

隐身模式不幸的是确实缓存了一些图像和文件。
GobSmack

16

使用Ctrl+ Shift+ R刷新很不错,但是没有得到我需要的一切。仍然有些事情不会刷新,例如存储在js和CSS中的数据。找到了解决方案:适用于Chrome Web开发人员的google工具栏。安装工具栏后,选择选项和“重置页面”。


2
+1。但是仍然不是很完美:对于在本地计算机上进行开发,缓存是完全不必要的,并且会带来问题,因此我仍然会对像firebug这样的禁用功能感兴趣。
2011年

15

需要明确的是,Chrome的“禁用缓存”复选框(此处为v17,但我相信由于是v15)不在主设置用户界面中。它位于开发人员工具设置UI中。

  1. 从浏览器窗口的扳手图标菜单(偏好菜单)中,选择工具→开发人员工具

  2. 在出现的开发者工具用户界面中,点击右下角的齿轮图标。

  3. 选中“网络”部分中的“禁用缓存”复选框。


14

仅当您打开开发工具时,才能在Chrome中禁用缓存


也许是错误,或者可能仅是针对开发人员的-据说我会以为非开发人员也想使用禁用缓存选项-\ _(ツ)_ /?
jamiethepiper

14

在修复该错误之前,您可以使用Clear Cache Chrome插件,也可以为其设置键盘快捷键。

安装后,右键单击并转到选项:

在此处输入图片说明

检查Automatically reload active tab after clearing data

在此处输入图片说明

选择Everything时间段:

在此处输入图片说明

然后,您可以转到菜单=>工具=>扩展程序:

在此处输入图片说明

单击底部的键盘快捷键:

在此处输入图片说明

并设置快捷键,例如Ctrl+ Shift+ R

在此处输入图片说明


9

实际上,如果您不介意使用带宽,出于多种原因,禁用缓存会更安全,并且许多安全站点建议您这样做。

Chromium不应过于傲慢地做出决定并强制对用户进行设置。

您可以使用--disk-cache-dir = / dev / null在UNIX上禁用高速缓存。

因为这是意料之外的崩溃,但是如果发生崩溃,那显然会指出更严重的错误,无论如何都应该修复。


8

这可能会帮助某人。

我已将Nginx装配用于疯狂缓存。因此,禁用网络工具中的缓存并明确清除缓存是行不通的。

一个非常简单但无聊的解决方法是,我只是打开一个新的隐身标签。令人惊讶的是,它一直都在工作!

每当我希望以相同模式重新加载时,在隐身模式下进行一次硬刷新都可以解决问题。


6

如何更改页面名称以防止页面被缓存的小书签呢?在Chrome中,您将创建一个新书签,然后将代码粘贴到URL中。单击书签,页面将重新加载时间戳以阻止缓存。

javascript:(function(){var idx = location.href.indexOf('?');var d = new Date();var str = location.href.substr(0,idx) + '?version=' + d.getTime();location.href=str; void 0;})();

5

我只是被赶上了,但不一定是因为Chrome。

我正在使用jQuery发出AJAX请求。我在请求中将cache属性设置为true:

   $.ajax({
        type: 'GET',
        cache: true,
        ....

将其设置为false可解决我的问题,但这并不理想。

我不知道这些数据保存在哪里,但我确实知道chrome从未在服务器上发出过请求。


5

现在有一种更好,更快捷的方法(Chrome 59.xx版):

右键单击重新加载图标(URL字段的左侧),您将获得一个下拉菜单,选择第三个选项:“空缓存和硬重新加载”。

仅当开发人员工具打开时,此选项才可用。(请注意与选项2:“硬重载” -cmd-shift-R的区别)。这里没有缓存清空!


3

chrome网上商店中有一个chrome扩展名为Clear Cache

我每天都使用它,并且它是我认为非常有用的工具。您可以将其用作重新加载按钮,并清除缓存,如果您还喜欢Cookie,语言环境存储,表单数据等,也可以清除。您还可以定义发生在哪个域。因此,只需在您选择的域上仅需按一下重新加载按钮即可清除所有这些内容。

非常非常棒!

您还可以在选项中为此定义键盘快捷键!

另一种方法是以隐身模式启动Chrome窗口。在这里,缓存也应完全禁用。


找不到选项来定义它在哪个域上执行。看起来不太好。如何chrome.google.com/webstore/detail/cache-killer/... ..?
nkkollaw

转到浏览器中的clearcache图标,右键单击,选项,然后在cookie下。有一个小的设置图标。
克里斯,


2

不确定您使用的是什么,但是如果您使用的是ASP.Net,则可以执行以下操作,就像超级按钮一样:

<link href="@Url.Content("~/Content/Site.css")?time=@DateTime.Now" rel="stylesheet" />

基本上,它将在每次运行时自动将日期和时间附加到文件的末尾,这意味着由于文件名在技术上有所不同,因此您不必担心会再次被缓存。


绝对。我使用了这个,并且使用了条件编译,因此它不会出现在测试和发布版本中。
Cee McSharpface '17

更好的方法是使用css文件的修改时间作为变量值。该解决方案也可以在生产环境中使用。它只是有效:)不知道如何在ASP中完成,但是在PHP中却是这样的<link href =“ style.css?time = <?php echo fileminfo('style.css');?>” rel =“ stylesheet” >
奥利弗·曼纳

2

我有同样的问题,我尝试过:

  • 控制Shift R,
  • 禁用F12中的缓存
  • 控制F5。

然后,我发现不建议将.appcache清单用于非https站点。我在html标记中删除了site.appcache文件及其引用,现在可以看到每个页面的最新版本!


2

如果您使用ServiceWorkers(例如:对于渐进式Web应用程序),则可能还需要在开发工具中的“应用程序”>“ Service Workers”下选中“重新加载时更新”。

在此处输入图片说明


1

从版本50开始(如果我没记错的话),“禁用缓存”选项已从Devtool设置中删除。转到“网络”标签,然后有“禁用缓存”选项。


0

嘿,如果您的网站使用的是PHP,则在html页面的开头放置以下PHP小片段:

   //dev versioning - stop caching
   $rand = rand(1, 99999999);

现在到处都可以在脚本或链接元素中加载CSS-或JS-文件之类的资源,然后在添加“?”后将生成的随机值添加到请求URL。通过PHP到URI:

    echo $rand;

而已!无论哪种浏览器,都不会再有缓存您站点的浏览器。

当然,在发布之前删除代码,或将$ rand设置为空字符串即可再次进行缓存。


0

我使用了上述其他选项,但我发现最好的方法是将以下参数添加到chrome.exe的启动中。

“ C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe” --disk-cache-size = 1 -media-cache = 1

我发现不禁用媒体缓存是个好主意,但这是出于完整性考虑。

实际上,我想要一个选项来完全禁用缓存,将内存用于IO而不是磁盘(这也会使加载时间快10倍!),但是我不认为chrome或与此相关的任何浏览器都具有该选项。


0

如何临时禁用缓存或以可以看到更改的某种方式刷新页面?

目前尚不清楚您指的是哪个“缓存”。浏览器可以通过几种不同的方法持久地缓存内容。Web存储是其中之一,又Cache-Control是另一种。

某些浏览器还具有CacheService Workers结合使用的,以创建提供脱机支持的渐进式Web应用程序(PWA)。

清除PWA的缓存

self.caches.keys().then(keys => { keys.forEach(key => console.log(key)) })

列出缓存键的名称,然后运行:

self.caches.delete('my-site-cache')

按名称(即my-site-cache)删除缓存键。然后刷新页面。

如果刷新后在控制台中看到任何与工作人员相关的错误,则可能还需要注销注册的工作人员:

navigator.serviceWorker.getRegistrations()
  .then(registrations => {
    registrations.forEach(registration => {
      registration.unregister()
    }) 
  })


0

我使用(在Windows中),按Ctrl + Shift +删除,然后在Chrome对话框出现时,按Enter键。可以配置每次执行此序列时需要清除的内容。无需开发。在这种情况下打开工具。


0

我当时处于浏览器从磁盘加载缓存数据的情况,即使我检查它是否禁用了缓存(我正在使用Chrome)。我所有的CSS和JS都是从服务器而非网页加载的。这在我的本地和生产中都在发生。

要修复它,我需要在URL中添加一个额外的参数,以强制浏览器从服务器获取网页,即使控制器不需要它。

我正在使用ASP.Net,因此这是我的示例:

//Controller function
public ActionResult Index()
    {
        return View();
    }
//Link
@Html.Action("Index", "Home", new { ts = DateTime.Now.Ticks.ToString()})

结果是,它将生成一个链接,例如:http : //www.myweb.com/Home/Index?ts=636558555408282209

这是我的情况和解决方案。希望它可以帮助某人。

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.