首页 / 知识
关于缓存:如何强制客户端刷新JavaScript文件?
2023-04-13 12:01:00

How can I force clients to refresh JavaScript files?我们目前正在进行私人测试,因此仍在进行相当快速的更改,尽管显然随着使用量开始增加,我们将放慢这一过程。话虽这么说,我们遇到的一个问题是,在我们用新的JavaScript文件推出更新之后,客户端浏览器仍然使用文件的缓存版本,但他们看不到更新。显然,在支持调用中,我们可以简单地通知他们执行ctrlF5刷新以确保他们从服务器获取最新文件,但最好在此之前处理它。 我们当前的想法是简单地将版本号附加到JavaScript文件的名称上,然后在进行更改时,增加脚本上的版本并更新所有引用。这绝对可以完成工作,但更新每个版本的引用可能会变得很麻烦。 我确信我们不是第一个处理这个问题的人,我想我会把它扔给社区。在更新代码时,如何确保客户更新缓存?如果您使用上述方法,您是否正在使用简化更改的流程?
据我所知,一个常见的解决方案是在脚本的src链接中添加 例如:
你可能有一个版本控制系统为你做这个吗?大多数版本控制系统都有办法在登记时自动注入修订号。 它看起来像这样:
当然,总会有像这样的更好的解决方案。 并非所有浏览器都使用"?"缓存文件在里面。我做了什么来确保它尽可能地被缓存,我在文件名中包含了该版本。
因此,我做了
我在apache中使用 对于ASP.NET页面,我使用以下内容 之前
之后(强制重装)
添加DateTime.Now.Ticks非常有效。 现在的常见做法是生成内容哈希码作为文件名的一部分,以强制浏览器特别是IE重新加载javascript文件或css文件。 例如,
vendor.a7561fb0e9a071baadb9.js 它通常是构建工具(如webpack)的工作。如果有人想要尝试使用webpack,这里有更多细节。 在我发布(参考css)http://www.stefanhayden.com/blog/2006/04/03/css-caching-hack/之后,我的同事刚刚找到了对该方法的引用。很高兴看到其他人正在使用它,它似乎工作。我假设在这一点上,没有比find-replace更好的方法来增加所有脚本标签中的这些"版本号"? 一种解决方案是在获取资源时将带有时间戳的查询字符串附加到URL。这利用了以下事实:浏览器不会缓存从带有查询字符串的URL中获取的资源。 您可能根本不希望浏览器不缓存这些资源;您希望缓存它们的可能性更大,但是您希望浏览器在文件可用时获取该文件的新版本。
最常见的解决方案似乎是在文件名本身中嵌入时间戳或修订号。这是一项更多的工作,因为您的代码需要被修改以请求正确的文件,但这意味着,例如,
使用版本
将 在PHP中:
在HTML中:
这个怎么运作:
在HTML中,按照您的要求编写 通过标记帮助程序缓存ASP.NET Core中的Busting将为您处理此问题,并允许您的浏览器保留缓存的脚本/ css,直到文件更改为止。只需将标签helper asp-append-version ="true"添加到脚本(js)或链接(css)标记中:
Dave Paquette有一个很好的例子和解释缓存清除(页面底部)Cache Busting 在asp.net mvc中,您可以将@ DateTime.UtcNow.ToString()用于js文件版本号。版本号自动更改日期,您强制客户端浏览器自动刷新js文件。我使用这种方法,这是很好的。
虽然它是特定于框架的,但Django 1.4具有这种功能,其工作方式与上述答案中"greenfelt"网站的链接类似。
在
我在
为了向后兼容,我认为将 以下为我工作:
一个简单的方法。
最简单的解决方案根本不要让浏览器缓存。将当前时间(以毫秒为单位)附加为查询。 (你仍然处于测试阶段,所以你可以为不优化性能做出合理的判断。但是YMMV在这里。) |
最新内容
相关内容
python怎么使用文件夹下的脚本?
python怎么使用文件夹下的脚本?,工作,培训,文件夹,脚本,文件,所在,方法,示例,路径,以上,python中使用文件夹下脚本的方法:将当前的工作目录(即python如何调用另一个文件夹中的内
python如何调用另一个文件夹中的内容?,系统,培训,文件,模块,内容,路径,函数,所在,前缀,语句,python中调用另外一个文件夹中的内容:1、同一文件python中怎么读取doxc文件?
python中怎么读取doxc文件?,培训,文档,文件,路径,命令,以上,更多,内容,python中可以使用python-docx库读取doxc文件,我们可以使用pipinstallpython如何删除某个目录文件夹?
python如何删除某个目录文件夹?,名字,代码,培训,文件夹,方法,文件,目录,语法,路径,格式,python删除某个目录文件夹及文件的方法:#!/usr/bin/en如何在python代码中指定保存的文件
如何在python代码中指定保存的文件格式,代码,培训,文件格式,格式,二进制文件,文件,后缀,以上,方法,更多,python指定保存文件格式的方法:1、保Python如何复制文件中的内容
Python如何复制文件中的内容,盘中,数据,培训,文件,内容,方法,文件夹,路径,源文件,文件名,python复制文件中内容的方法:1、使用shutil.copyfilepython如何获取打开文件的行数?
python如何获取打开文件的行数?,数据,培训,文件,方法,列表,下标,字符串,序列,函数,长度,python获取打开文件行数的方法:1、文件较小时可以使用Python中怎么新建文件夹
Python中怎么新建文件夹,代码,工作,培训,文件夹,路径,函数,操作系统,示例,文件名,以上,python中如何新建文件夹的方法:可以使用os包的mkdir函Python文件如何转换为字符串
Python文件如何转换为字符串,数据,主体,名字,培训,文件,字符串,末尾,方法,对象,语句,python文件如何转换为字符串的方法:一、最方便的方法是一如何用python复制文件内容
如何用python复制文件内容,数据,名字,培训,文件,内容,方法,备份,字符串,文件名,语法,用Python复制文件:#输出需要备份的文件名oldname=input(python如何生成文件夹
python如何生成文件夹,数字,培训,目录,方法,语法,文件夹,模式,权限,示例,参数,python中可以使用os.makedirs()方法创建多级目录:os.makedirs()python脚本如何查找文件是否存在
python脚本如何查找文件是否存在,异常,培训,代码,文件,模块,路径,程序,脚本,语句,错误,python脚本查找文件是否存在的方法:1、使用os模块os模