PHP 生成的动态缓存 JavaScript
Cache dynamic JavaScript generated by PHP
我将 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 文件服务器。
我该怎么做,缓存清除过程如何?
提前致谢。
如果缓存文件不存在或者任何文件修改时间戳晚于缓存,则渲染它,然后将其安全保存到缓存中,然后回显缓存或渲染结果。
理论上,您需要使用具有适当有效期的 header("...")。实际上,这并不能正常工作。您可以花一生的时间在谷歌上搜索 "Cache-Control" 和 "Expires:" 以及 none 的正确示例,以了解您发现的可行方法。所以我建议你阅读这篇文章:
ETag 是一种现代解决方案,可在您的资源已更改或未更改时告知浏览器。
我将 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 文件服务器。
我该怎么做,缓存清除过程如何?
提前致谢。
如果缓存文件不存在或者任何文件修改时间戳晚于缓存,则渲染它,然后将其安全保存到缓存中,然后回显缓存或渲染结果。
理论上,您需要使用具有适当有效期的 header("...")。实际上,这并不能正常工作。您可以花一生的时间在谷歌上搜索 "Cache-Control" 和 "Expires:" 以及 none 的正确示例,以了解您发现的可行方法。所以我建议你阅读这篇文章:
ETag 是一种现代解决方案,可在您的资源已更改或未更改时告知浏览器。