я использую 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-файлы на сервере.
Как я могу это сделать и как будет происходить процесс очистки кэша?
Заранее спасибо.
Теоретически, вы должны использовать заголовок («…») с правильным сроком действия. На практике это не работает должным образом. Вы можете потратить свою жизнь на поиски правильных примеров «Cache-Control» и «Expires:», и ничего из того, что вы найдете, не сработает. Поэтому я предлагаю вам прочитать это:
ETag — это современное решение, чтобы сообщить браузеру, когда ваш ресурс изменился — или нет.
Если файл кэша не существует или если какая-либо из меток времени изменения файла более поздняя, тогда кэш-память отрисовывает его, затем сохраняет его в кэше, а затем выводит кэш-память или отображаемый результат.