我找到了这个网址
作为网站https://petitions.whitehouse.gov/src
中 javascript 文件的源 () 。
和这个
对于一个 CSS 文件。
问题是为什么 javascript 或 css 文件使用如此复杂的名称?是由于任何框架还是什么?即使是由于任何框架,问题仍然存在。
我找到了这个网址
作为网站https://petitions.whitehouse.gov/src
中 javascript 文件的源 () 。
和这个
对于一个 CSS 文件。
问题是为什么 javascript 或 css 文件使用如此复杂的名称?是由于任何框架还是什么?即使是由于任何框架,问题仍然存在。
这可能是由于'minification'
删除了生产不需要的任何字符/符号的过程(换行符/注释等)。
通常,此过程是 a 的一部分,'Bundling'
它不仅会缩小每个源文件,还会将多个源 (css/js) 文件组合在一起以减少 HTTP 请求的数量。
然后使用唯一名称保存每个“捆绑”结果,以便下一次捆绑迭代将具有另一个唯一名称以防止caching
并能够反映新修改的捆绑的更改。
这是通过散列存储静态文件的技巧。
此存储的目的是在某些页面仍然引用它们的情况下继续提供旧静态文件的版本,例如因为它们被您或第 3 方代理服务器缓存。此外,如果您想将未来的 Expires 标头应用于已部署的文件以加快后续页面访问的加载时间,这将非常有帮助。
它可能是由某种缩小器/混淆器生成的名称。
这很复杂,因为每次编译 CSS/JS 脚本都会创建新版本的脚本,并且为了防止浏览器从缓存中加载旧版本,应该使用新名称。
这些文件名看起来像是被散列和/或版本化的。这很可能确保始终加载正确的样式、JavaScript 和资产。它也可能是机器生成或缩小的结果。
虽然这里的每个答案都是正确的,为什么 CSS 和 JavaScript 被合并到每种语言的单个文件中(即所有 CSS 都在一个文件中,所有 JavaScript 都在一个文件中),但没有人给出一个真正的理由来解释为什么可以使用字母数字字符串——例如,代替线性数字 id 或版本号。
在这种情况下,使用字母数字哈希的主要原因通常是因为不希望存储与聚合有关的额外数据的麻烦或延迟。每当您有一个自动化系统时,如果您想要一个递增的数字,您需要将该数字存储在某个地方,即数据库中。如果您希望此数字成为版本号,则变得更加复杂,因为这意味着您必须为每个 emalgamated 文件存储一个单独的数字(使用 CMS 时,emalgamed 文件的数量可能会迅速变化,这完全取决于正在加载的内容在该特定页面上)。
简而言之,使用类似于MD5
或SHA1
在呈现 HTML 源代码时基于盐值和当前时间戳生成字母数字哈希要容易得多。由于生成的散列的长度和基于不断增加的时间戳,这些函数几乎可以保证与以前的值不冲突(当涉及到缓存时,您希望避免这种情况,正如其他海报所说的那样)。
使文件名随机随机排列的另一个好处是它可以防止外部用户进行盗链或其他恶意技巧。这对于 CSS 来说不是什么大问题,但对于 JS 来说可能是个问题。