Принудительно кэшировать через заголовок для динамически генерируемых файлов JS / CSS, которые не работают для всех браузеров - PullRequest
1 голос
/ 30 сентября 2010

У меня много файлов JS и CSS для моего сайта.Чтобы свести к минимуму запросы на подключение от браузеров, я объединяю их в один файл php.Я использую параметры заголовка для принудительного кэширования файлов.Вот как я это делаю для случая JS (CSS точно такой же):

<?php
ob_start("ob_gzhandler");
$expires= 60 * 60 * 24 * 14;
header('Pragma: public');
header('Cache-Control: max-age=' . $expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
header('Content-type: text/javascript');
include('file1.js'); echo "\n\n\n";
include('file2.js'); echo "\n\n\n";
/* ... bla bla bla bla ... */
include('fileY.js'); echo "\n\n\n";
include('fileZ.js'); echo "\n\n\n";
ob_end_flush();
?>

В Firefox это прекрасно работает.Для остальной части планеты эти файлы не кэшируются!Оба они довольно большие, поэтому у меня есть раздражающий полсекундный белый экран, чтобы другие браузеры загружали их снова и снова для каждого запроса страницы.

Полагаю, это как-то связано с Content-Length заголовка,Я пробую 2-3 вещи, но не могу заставить это работать.Есть предложения?

Заранее спасибо.Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

Похоже, что файл все-таки кэшируется во всех браузерах.

Причиной задержки при загрузке является то, что каждый браузер должен проанализировать файл в DOM.Файл JS довольно большой.Просто Firefox делает это быстрее или «умнее», таким образом, пользователь не получает ощущения мгновенной паузы при загрузке страницы.

Это было неверное удаление, мой файл не кэширован.1005 *

Решение, чтобы избежать ожидания ... переместить все запросы JS до закрытия.

0 голосов
/ 30 сентября 2010

Было бы неплохо объединить все эти файлы .js в один файл во время развертывания проекта и обслуживать этот файл, как и любой другой, настраивая свой веб-сервер с большим сроком действия.

Если у вас нет сценария развертывания, это другая история. Добавление заголовков как «Last-Modified» или «ETag» - ваш лучший выбор.

Кроме того, я бы посоветовал собрать большой файл один раз и перестраивать его только тогда, когда какой-либо js изменился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...