代码之家  ›  专栏  ›  技术社区  ›  Scott M.

用于JavaScript和CSS的PHP内容缓存

  •  3
  • Scott M.  · 技术社区  · 14 年前

    我有一个独特的问题,用谷歌很难解决。我将把所有的javascript和css合并成单独的php文件,这些文件使用require_once()将文件的内容拉入。javascript文件如下所示:

    <?php
    header('Content-Type: text/javascript');
    require_once('jquery.form.js');
    require_once('jquery.jqtransform.js');
    require_once('jquery.validate.js');
    ?>
    

    我的具体问题是,由于PHP文件扩展名的存在,Web浏览器将“看到”这是一个动态页面,然后在每次加载网站上的页面时重新请求内容。我想做的是 从浏览器获取上次请求的时间 然后 检查每个文件修改时间 看看我是否真的需要再次发送文件内容。很难找到用户最后一次请求的时间。此外,我还没有开始解决查找包含的文件的最后修改日期的问题,因此如果有关于 在服务器上查找文件的详细信息 我们也会感激的。

    为了清楚起见,我这样做的原因是(我认为)它比单独的gzip文件更好地利用了gzip压缩。

    提前谢谢

    5 回复  |  直到 9 年前
        1
  •  2
  •   EricLaw    10 年前

    你的前提是错误的。浏览器看不到PHP文件扩展名,决定不缓存东西。参见 http://www.enhanceie.com/redir/?id=httpperf 有关浏览器实际工作方式的信息。

    您应该在响应上设置一个etag,然后您可以简单地检查if none匹配请求头,如果内容不变,则返回304。

        2
  •  3
  •   cletus    14 年前

    我专门写了一系列关于这个问题的文章。见 Supercharging Javascript in PHP Supercharging CSS in PHP . 这些封面:

    • 合并文件;
    • gzipping最佳实践;
    • 缓存最佳实践;以及
    • 版本控制输出。
        3
  •  0
  •   Htbaa    14 年前

    浏览器不确定页面或文件的扩展名是动态的还是静态的。它的头是这样的。只需设置适当的头,浏览器就知道它可以缓存结果。

    还有,放弃封闭 ?> . 这不是必需的,也是不好的做法。

        4
  •  0
  •   Basil Musa    9 年前

    AlisterBulman刚刚提到了这个问题的一个整洁的库解决方案,但把它作为一个注释。我重复他的评论作为答案,因为我觉得这很有价值:

    minify-code.google.com/p/minify-是一个设计用来做什么的库 这里是必需的-连接文件并发送适当的 标题,也修剪内容,很可能是gzip 在磁盘上缓存结果时。2010年1月10日,Alister Bulman 在10:44

        5
  •  -1
  •   Adam Hopkinson    14 年前

    您可以使用apache mod deflate启用文件的自动gzip。

    还可以使用apache mod_rewrite将HTML中的这些文件称为JS文件,并将请求重定向到PHP文件,从而避免服务器缓存问题。

    像这样:

    RewriteEngine On
    RewriteRule (.*).js $1.php
    

    将此代码放入目录中的.htaccess文件中。