我正在开发一个PHP站点,它提供来自无cookie域的静态内容(感谢SO博客!),这个域提供高缓存的内容,其中包括我无法更改内容(JS, CSS和图像)而不会使该缓存失效。目前我通过将?revision(例如style.css?19)附加到静态URL的末尾来执行此操作,目前我手动执行此操作,这显然远非方便。
完成此操作的推荐方法是什么?我正在使用Subversion,根据我的理解,我可以使用各种工具来获取修订版号 - 但是我将如何将其转换为PHP(在每次加载页面时运行它似乎不是很明智?)。我猜我应该最有可能使用某种构建系统。
非常感谢任何建议。
由于
答案 0 :(得分:3)
SVN keyword substitution可能是解决方案。您可以像这样使用它:首先将以下代码添加到PHP代码中,在您希望使用该版本的地方附近。像这样:
$svn_version = '$Revision$'; // remember to use single quotes!
现在提交该文件。然后重新打开它。观察到上面的行现在已经改为看起来像:
$svn_version = '$Revision: 66232 $';
SVN识别关键字标签并将其替换为修订号。从现在起,此标记将在每次提交该文件时使用最新版本号进行更新,当您执行签出或导出时,它还将包含版本号。
现在,您只需要进行一些字符串操作即可从该字符串中获取该数字。我相信你可以自己解决这个问题。
当然,当你在不触及PHP的情况下更新实际的css / js文件时,这不会起作用。这不容易解决。每次更改CSS / JS时都可以更改PHP。或者是的,你可以选择一些构建系统。
无论如何,我希望你能从中得到一些想法。
答案 1 :(得分:2)
有一个很好的PHP script和.htaccess集,可用于CSS / Javascript文件的版本控制。它的工作原理是将所有CSS / JS请求重写为一个文件combine.php,然后检查该文件是否已被修改。如果有,则创建该文件的新缓存版本。如果尚未修改,则只需发送以前缓存的文件版本即可。此脚本还具有最小化http请求数量的好处,这是另一项性能改进。
图像更难 - 在基本级别,您可以通过css文件搜索/替换图像名称并更新它们。这可以合并到构建脚本中。 SASS是一个css处理系统,支持CSS中的变量,这意味着您只需要在一个地方更新图像名称。
最后,我注意到在使用诸如Fiddler之类的工具时,如果请求中包含查询字符串,浏览器可以忽略过期标题并始终联系服务器,因此最好放入一个子目录,即代替
/css/main.css?16
/css/16/main.css
答案 2 :(得分:1)
一个想法是拥有一个只包含数字(即修订号)的文本文件。每次更新时,都会增加此数字(作为SVN版本ID或只是一个计数器,如您所愿)。
所以你就像你提出的那样继续前进;你读取文件中的数字,并将其作为GET参数传递给你的CSS或其他文件。一个已实现,您只需更新修订版号(如果使用它,可能会清理缓存)在每个页面上进行更新。很简单:)