缓存PHP生成的动态JavaScript

时间:2017-02-18 21:44:48

标签: php caching cross-browser minify

我使用JShrink和自定义函数将8个未压缩的JavaScript文件合并到一个压缩(缩小)的文件中,如下所示:

<?php
// Filename: js.php 
header('Content-type: text/javascript');
require_once '../JShrink.php';

function concatenateFiles($files)
{
    $buffer = '';

    foreach($files as $file) {
        $buffer .= file_get_contents(__DIR__ . '/' . $file);
    }

    return $buffer;
}

$js = concatenateFiles([
  'core.min.js', 
  'promise.js', 
  'welcome.js',
  'imagesloaded.js',
  'cropper.js',
  'translate.js',
  'custom.js',
  'masonry.js',
]);

$output = \JShrink\Minifier::minify($js);
echo $output; 

然后我在我的索引页面页脚中调用这个php文件:

<script type="text/javascript" src="<? echo $url ?>/js/js.php"></script>

它没有被缓存。

我每天修改我的JS代码,我不喜欢手动组合它们,但我还需要一种方法来缓存回调的JS代码,只需要代码而不是服务器上的所有php文件。

我该怎么做?缓存清除过程如何?

提前致谢。

2 个答案:

答案 0 :(得分:1)

理论上,您需要使用具有适当过期的标题(&#34; ...&#34;)。在实践中,这不能正常工作。你可以用自己的生活谷歌搜索&#34; Cache-Control&#34;和&#34;到期:&#34;并且你找到的都不会起作用。所以我建议你阅读:

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching

ETag是告诉浏览器何时资源发生变化的现代解决方案。

答案 1 :(得分:0)

如果缓存文件不存在或者任何文件修改时间戳晚于缓存,则渲染它,然后将其安全到缓存,然后回显缓存或渲染结果。