什么是“”;javascript后面的数字是多少?

什么是“”;javascript后面的数字是多少?,javascript,date,numbers,Javascript,Date,Numbers,我在一些HP代码中看到,javascript文件名后面有一个问号和数字,看起来像是日期之类的。“?”和javascript后面的数字是什么意思? 例如: <script type="text/javascript" src="/folder/js/folderPageNextSubmit.js?20140801"></script> 在JavaScript或CSS文件中的“?”是向文件添加版本控制的一种方法 当您在开发环境中工作时,有助于避免浏览器缓存,因为当版本号更

我在一些HP代码中看到,javascript文件名后面有一个问号和数字,看起来像是日期之类的。“?”和javascript后面的数字是什么意思? 例如:

<script type="text/javascript" src="/folder/js/folderPageNextSubmit.js?20140801"></script>

JavaScriptCSS文件中的“?”是向文件添加版本控制的一种方法

当您在开发环境中工作时,有助于避免浏览器缓存,因为当版本号更改时,文件URL也会更改。因此,对于浏览器来说,似乎是一个不同的文件


通常的做法是使用时间戳作为版本号,以获得唯一的内容,但您可以使用任何数字或字符。

它用于缓存中断,例如:

 file.js?1234

 file.js?12345
浏览器将它们视为两个不同的文件,因此即使第一个文件已缓存,第二个文件仍将被提取

在对文件代码进行更改并进行部署后,更改编号,
因此,为了让用户看到您的新更改并加载新文件,您需要更改编号。

人们通常使用该编号来强制用户更新浏览器缓存。如果我的页面上有一个文件
init.js
,你访问我的站点,然后我更新它,你再次访问,你的浏览器可能不会下载我更新的文件,而只是使用缓存中的内容

添加随机字符串或日期将强制浏览器更新其缓存,因为它认为文件不同

缺点是我相信它根本不会缓存它。如果使用URL参数而不是执行类似于
init.1234.js
的操作,某些浏览器每次都会下载文件,因此使用URL参数方法可能不是最好的主意


编辑:另外,如果你需要更新一些重要的文件,最好在你的服务器上设置expires头,但我不会说我从未使用过这种方法,只是这不是最好的主意。我认为在文件本身中添加日期更好。

在web请求中?这种反模式的使用使得浏览器永远不会缓存文件(或者说,总是缓存不同的副本),因为它总是有不同的URL


更好的程序员只需使用服务器/响应缓存配置文件设置,并在文件不变的情况下实际允许缓存。

通常的策略是强制重新加载文件,而不是在缓存中使用副本。以这种方式附加时间戳将强制重新加载。

一般来说,任何URL中的
表示路径的结束和查询参数的开始

因此,在脚本标记中:

<script type="text/javascript" src="/folder/js/folderPageNextSubmit.js?20140801"></script>

该文件的路径为
“/folder/js/folderPageNextSubmit.js”
,并且在URL的末尾添加了一个查询参数
?20140801

这完全取决于服务器是否使用这个特定的查询参数。例如,
20140801
可能是2014年8月1日的日期代码,这意味着服务器将提供与该日期代码匹配的文件的特定版本

或者,可能是服务器对查询参数不做任何操作,而它纯粹用于中断先前URL中此JS文件的浏览器或代理缓存,这些URL使用不同的日期代码,以便提供更新版本而不是旧的缓存版本


在不知道服务器的具体用途和实现方式的情况下,我们无法真正判断它是哪种情况。

FYI,这看起来不像一个随机字符串。看起来可能是2014年8月1日的日期代码。如果服务器响应未禁用缓存,则可以缓存具有URL查询参数的浏览器GET请求。因此,仅仅因为有一个查询参数并不意味着它不会被缓存。使用查询字符串可以阻止一些浏览器缓存文件。增加不必要的开销。重命名文件更好。仍然不能100%确定其范围,如果可以在服务器级别修复,但值得研究。或者如果使用html5,可以使用应用程序缓存自动生成清单并根据文件的哈希值添加注释,即使注释中的更改也会强制重新加载,因此,您不必再为它费心了。根据上面的链接,使用足够长的字符串以避免缓存冲突似乎很重要。是的,有几种方法,如:file-1234.js和file.js?1234,但我认为这是最简单、最快的方法。