2013-03-10 139 views
2

我发现这个网址为什么这么复杂的JavaScript和CSS文件的名称?

https://petitions.whitehouse.gov/sites/default/files/js/js_UiAlkc-vULf24xt5asxqvUtyoWeGDuXLXt7ti6xNnGg.js

,如JavaScript文件的站点https://petitions.whitehouse.gov/源(src)。

而这一次

https://petitions.whitehouse.gov/sites/default/files/css/css_7HCSWa0-mjR4tMqcKk2MWsaQFvHYUU9FuXNLwF5yIEY.css

的CSS文件。

问题是为什么这样复杂的名称用于JavaScript或css文件? 它是由于任何框架或什么?即使是由于任何框架,问题依然存在。

+0

@yabol,问题仍然有效.. CSS/JS脚本 – 2013-03-10 14:20:28

回答

1

它可能是由某种缩小器/混淆器生成的名称。
这很复杂,因为每个CSS/JS脚本编译都会创建新版本的脚本并阻止浏览器从缓存中加载旧版本应该有新名称。

+0

编译 - 你可以揭示更多在这里吗? – 2013-03-10 14:23:30

+0

https://code.google.com/p/cssmin/ https://code.google.com/p/minify/ – 2013-03-10 14:25:21

+0

我仍然会使用版本号强制加载新脚本而不是生成的哈希字符串http ://stackoverflow.com/questions/32414/how-can-i-force-clients-to-refresh-javascript-files更好的方法imo – 2013-03-10 14:27:02

1

这些文件名看起来像是被哈希和/或版本化。这可能确保正确加载正确的样式,JavaScript和资源。这也可能是机器生成或缩小的结果。

4

这可能是由于'minification'进程删除了生产中不需要的任何字符/符号(换行符/注释等)。

通常这个过程是'Bundling'的一部分,它不仅缩小每个源文件,而且还将多个源(css/js)文件组合在一起以减少HTTP请求的数量。

然后将每个'包'结果保存为唯一名称,以便下一个包迭代将具有另一个唯一名称以防止caching并能够反映新修改后的包的更改。

2

这是通过哈希来存储静态文件的技巧。

该存储的目的是为了在某些页面仍然引用它们的情况下继续提供旧的静态文件的版本,例如,因为它们是由您或第三方代理服务器缓存的。此外,如果您想要将far future Expires headers应用于已部署的文件,以加快后续页面访问的加载时间,这非常有用。

+1

解释,更多解释---听起来很难.. – 2013-03-10 14:26:18

+0

其实它非常简单。请按照链接更好地了解将来的过期头文件,以及它们如何与不同版本的静态文件相关联。 “请记住,如果您使用远期未来的Expires头文件,只要组件的变化就必须更改组件的文件名” – hymloth 2013-03-10 14:42:30

0

虽然这里的每个答案在为什么CSS和JavaScript已被合并到每种语言的单数文件(即一个文件中的所有CSS,一个文件中的所有JavaScript)方面都是正确的,但没有人给出真正的原因至于为什么可以使用字母数字字符串代替线性数字标识或版本号。

在这种情况下,使用字母数字散列的主要原因通常是由于不希望存储关于聚合的额外数据的麻烦或延迟。无论何时你有一个自动化系统,如果你想要一个递增的数字,你需要将这个数字存储在某个地方,即存储在一个数据库中。如果你希望这个数字成为一个版本号,它会变得更加复杂,因为这意味着你必须为每个归档文件存储一个单独的数字(当使用CMS时,最大容量文件的数量可以快速变化,这一切都取决于正在加载的内容在该特定页面上)。

简单来说,在渲染HTML源代码时,使用类似MD5SHA1的盐值和当前时间戳生成字母数字散列要容易得多。这些函数几乎可以保证与之前的值不会发生碰撞(因为涉及到缓存,您希望避免这种情况,因为其他海报已经说过),这是由于生成的哈希的长度和基于不断增加的时间戳。

的加入使名称洗牌文件的随机奖励是防止外部用户盗链或其他恶意技巧。这不是CSS的问题,但可以与JS。

+0

CSS和JavaScript已合并为一个文件 - 您是什么意思? – 2013-03-14 09:48:30

+0

@IstiaqueAhmed - 大多数聚合方法将所有css文件合并成一个文件,并将所有js文件合并成一个文件。原因是为了减少浏览器需要的服务器连接。这就是我的意思,我会重写它的清晰度。 – Pebbl 2013-03-14 10:38:46