【发布时间】:2010-09-22 07:55:38
【问题描述】:
在开发过程中,我必须一直在 Firefox 中“清除缓存”,以使其使用最新版本的 JavaScript 文件。
是否有某种设置 (about:config) 可以完全关闭 JavaScript 文件的缓存?或者,如果不是,对于所有文件?
【问题讨论】:
标签: javascript firefox caching
在开发过程中,我必须一直在 Firefox 中“清除缓存”,以使其使用最新版本的 JavaScript 文件。
是否有某种设置 (about:config) 可以完全关闭 JavaScript 文件的缓存?或者,如果不是,对于所有文件?
【问题讨论】:
标签: javascript firefox caching
在火狐地址栏输入“about:config”并设置:
browser.cache.disk.enable = false
browser.cache.memory.enable = false
如果在本地开发,或者使用 HTML5 的新清单属性,您可能还必须在 about:config 中设置以下内容 -
browser.cache.offline.enable = false
【讨论】:
Web Developer Toolbar 有一个禁用缓存的选项,可以在需要时轻松打开和关闭它。
【讨论】:
你试过用CTRL-F5更新页面吗?
【讨论】:
没有仅针对 JavaScript 禁用缓存的特定选项,您必须完全禁用缓存。
FireBug 在“网络”选项卡的下拉菜单中可以选择禁用浏览器缓存。
【讨论】:
Firefox 48 开发者工具
允许您仅在工具箱打开时关闭缓存,非常适合 Web 开发:
https://stackoverflow.com/a/27397425/895245 有类似的内容,但定位有所改变。
【讨论】:
在您想要禁用缓存的同一页面上执行以下操作: 仅供参考:正在开发的版本是 30.0
你可以:
之后它会从它自己的页面重新加载(你在)并且所有的东西都被重新缓存并且任何进一步的请求也每次都被重新缓存,你可以让 Web 开发人员始终保持打开状态以密切关注并确保它始终处于打开状态(检查)。
【讨论】:
如果您正在使用服务器端代码,您可以生成一个随机数,并以下列方式将其附加到 src 的末尾......
src="yourJavascriptFile.js?randomNumber=434534"
每次随机生成randomNumber。
【讨论】:
我知道我正在复活一个古老的问题,但我今天试图解决这个问题并有一个替代解决方案。当我想测试时切换缓存对我来说并不是真的可以接受,正如其他人提到的,硬刷新 (ctrl+shift+r) 并不总是有效。
相反,我选择将以下内容放入我的开发环境中的 vhost.conf 文件(也可以在 .htaccess 中完成):
<FilesMatch "\.(js|css)$">
FileETag None
<IfModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</IfModule>
</FilesMatch>
在我的开发环境中,这可确保始终检索 js 和 css。此外它不会影响我的其余浏览,它也适用于所有浏览器,因此在 chrome / ie 等中进行测试也很容易。
在这里找到了 sn-p,还有一些其他方便的 apache 技巧:http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html#prevent-caching-with-htaccess
为了确保我的客户在生产中始终看到最新版本,我们在每次更新时增加 js 包含的查询字符串,即
jquery.somefile.js?v=0.5
这会强制我的客户的浏览器在看到新的查询字符串时更新其本地缓存,然后缓存新副本,直到文件再次更新
【讨论】:
最好的策略是设计您的网站,为您的 JS 文件构建一个唯一的 URL,每次发生更改时都会重置该 URL。这样,当没有变化时它会缓存,但在发生任何变化时立即重新加载。
您需要针对您的特定环境工具进行调整,但如果您使用的是 PHP/Apache,这对您和最终用户来说都是一个很好的解决方案。
http://verens.com/archives/2008/04/09/javascript-cache-problem-solved/
【讨论】:
您可以使用 CTRL-F5 绕过缓存重新加载。
您可以在firefox中设置不使用缓存的首选项
network.http.use-cache = false
您可以设置您的网络服务器为 js 文件发送 no-cache/Expires/Cache-Control 标头。
这是一个用于 apache 网络服务器的 example。
【讨论】:
最后发布的两个解决方案各有利弊,但恕我直言,它们都是很棒的解决方案。
您可能希望也可能不希望将会话 ID 嵌入到您的 url 中,以提高安全性。但是在开发中这应该无关紧要,但是如果您忘记删除它怎么办? 这也真的有效吗?您是否不需要像序列号生成器这样的东西(存储在会话中的命中计数,或者甚至可能只是 1 然后 0,如果 0 则 1)?
添加会话 ID(或任何排序器)意味着您需要记住将其添加到您不想缓存的每个资源中。一方面这更好,因为您可以仅将会话 ID 包含在您正在积极开发和测试的资源中。另一方面,这意味着您必须这样做,并且您必须记住将其删除以进行生产。
修改 vhost.conf 或 .htaccess 文件可以很好地解决问题,而无需记住添加和删除会话 ID。但缺点是所有 js 和 css 资源的性能都会受到影响,如果你有大文件,那会减慢你的速度。
两者看起来都是很棒的优雅解决方案——取决于您的需求。
【讨论】:
我使用 CTRL-SHIFT-DELETE 来激活隐私功能,允许您清除缓存、重置 cookie 等立刻。您甚至可以对其进行配置,使其直接执行,而不是弹出一个对话框要求您确认。
【讨论】:
在更高版本的 Firefox 中,例如 Nightly,有一个名为“禁用缓存”的选项,您可以通过点击齿轮找到它。而且该选项仅在当前会话中有效,这意味着当您关闭检查器并重新启动它时,如果您想禁用捕获,则必须再次检查它。
【讨论】:
在浏览了 2 个小时的各种替代方案后,这对我有用。
我的要求是在我的 Spring 安全 Web 应用程序中禁用 js 和 css 文件的缓存。但同时在特定会话“内”缓存这些文件。
为每个请求传递一个唯一的 ID 是建议的方法之一。
这就是我所做的:- 而不是
<script language="javascript" src="js/home.js"></script>
我用过
<script language="javascript" src="js/home.js?id=${pageContext.session.id}"></script>
欢迎对上述方法提出任何缺点。安全问题?
【讨论】:
在 Firefox 45 中,可以通过更改以下值来设置磁盘缓存选项: browser.cache.disk.enable
该值可以在“about:config”页面设置。
在http://kb.mozillazine.org/About:config_entries#Browser我找到了“browser.cache.disk.enable”的以下描述:
True(默认):使用磁盘缓存,最高可达 browser.cache.disk.capacity 中指定的容量 False:禁用磁盘缓存(与设置 browser.cache.disk.capacity 为 0 效果相同)
【讨论】:
首先,这很容易做到,例如通过 PHP 强制浏览器根据缓存日期(到期时间)更新文件。如果您只是出于实验需要,请尝试使用 ctrl+shift+del 在 Firefox 浏览器中一次清除所有缓存。第三种解决方案是使用 Firefox 退出的许多附加组件,以根据时间线清除缓存。
【讨论】: