【问题标题】:What are common methods to version javascript for maximum, cached performance?有哪些常用方法来版本 javascript 以获得最大的缓存性能?
【发布时间】:2012-12-17 22:15:34
【问题描述】:

我们正在托管一个包含多个 javascript 文件的 PHP 应用程序。目前我们通过在 javascript 文件的 url 中附加一个 get 参数(时间戳)来破坏缓存,即:http://ourserver.com/scripts/something.js?cachebust=1289438903

随着文件数量的增加,应用程序的性能会下降。我们可以使用哪些解决方案来缓解这个问题,从 js 构建系统到 apache2 配置?哪些选项需要对我们的应用程序代码和我们当前的开发工作流程进行最少的更改?

【问题讨论】:

  • 我不完全清楚问题是什么。您是否遇到了项目没有按照您期望的方式缓存的问题?您是否出于某种原因故意不缓存您的 javascript 文件?
  • 如果你想让 JS 被缓存,只需停止这样做。
  • 我假设 cachebust 时间戳是文件上次更改的时间(或者可能是上次部署的时间)?如果是当前时间,那就太疯狂了!
  • 我同意@Diodeus。您无需为每个请求附加不同的 url 参数。仅当 js 文件有更新并且您希望客户端开始使用新的更新版本的 js 时才执行此操作。

标签: javascript web apache2 browser-cache


【解决方案1】:

我们所做的是有一个 php 脚本,它获取需要压缩和组合的文件并创建这些文件的 url。该脚本执行此操作,并创建所有文件版本号串联的哈希。哈希作为&hash=<hash> 参数附加到url。该脚本生成如下内容:

http://path/to/minifier/script.php?files=core.js,somecode.js,someothercode.js&hash=da39a3ee5e6b4b0d3255bfef95601890afd80709.

这被发送到客户端并且浏览器执行请求。 minifier 脚本获取参数,将它们缩小(或从缓存中获取),连接它们并将它们发送回。因为哈希是脚本版本的函数,所以当其中一个文件更改时,它会被更新。并且由于版本仅在文件更改时才会更改,因此不会发生不必要的缓存破坏。有多个脚本可以做到这一点。我们使用 wro4j(在 java 中),但存在 php 脚本。

编辑:为了能够在生产中修复错误,我们还有一个参数debug=true,它会告诉压缩器脚本实际上不压缩,只返回连接的脚本。

【讨论】:

  • 您是使用 yui minifier 之类的构建程序还是在 php 中执行连接和缩小?
  • 我们所做的是在运行时连接缩小的文件,但缓存缩小的文件。连接几乎不需要任何时间,缩小确实如此。而且因为我们使用 CMS,所以我们希望防止每次最终用户更改 js 或 css 文件时都必须启动一些 buidl 进程。我们使用 dotCMS 作为我们的 CMS,并为该平台开源了我们的缩小插件。我写了一个更详细的解释以及我们在开发解决方案后发现的一些提示和技巧。你可以在这里找到它和源代码:geekyplugins.com/dot-cms/minifier.dot
  • 顺便说一句:解决方案的哈希部分尚未在我链接到的站点的插件中发布。很快就会添加。
  • 哈希部分已于去年年底发布。我们在 geekyplugins 上提供的 java dotCMS 解决方案现在可以按照描述工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
相关资源
最近更新 更多