Кэширование содержимого PHP для JavaScript и CSS - PullRequest
3 голосов
/ 10 января 2010

У меня есть уникальная проблема, которую трудно решить с помощью Google. Я объединяю все мои 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, и затем будут запрашивать содержимое каждый раз при загрузке страницы на сайте. Я пытаюсь получить время последнего запроса из браузера , а затем проверить время модификации каждого файла , чтобы узнать, действительно ли мне нужно снова отправлять содержимое файла. Трудно найти время последнего запроса пользователя. Кроме того, я еще не начал решать проблему поиска даты последнего изменения включенных файлов, поэтому, если есть информация, касающаяся поиска сведений о файле для файла на сервере , это также быть оцененным.

Просто чтобы прояснить, причина, по которой я это делаю, заключается в том, что (я думаю) он использует преимущества сжатия gzip лучше, чем файлы в отдельности gzip.

Заранее спасибо

Ответы [ 5 ]

3 голосов
/ 10 января 2010

Я специально написал серию постов по этому вопросу. См. Повышение стоимости JavaScript в PHP и Повышение стоимости CSS в PHP Эти покрытия:

  • Объединение файлов;
  • Gzipping лучшие практики;
  • Кэширование лучших практик; и
  • Вывод версий.
2 голосов
/ 10 января 2010

Ваша предпосылка неверна. Браузеры не «видят» расширение файла PHP и решают не кэшировать вещи. См. http://www.enhanceie.com/redir/?id=httpperf для информации о том, как на самом деле работают браузеры.

Вы должны установить ETAG в своем ответе, а затем вы можете просто проверить заголовок запроса If-None-Match и вернуть 304, если содержимое не изменилось.

0 голосов
/ 15 июня 2015

Алистер Булман только что упомянул об отличном решении библиотеки для этой проблемы, но поместил его в качестве комментария. Я повторяю его комментарий как ответ, так как нашел его ценным:

Minify - code.google.com/p/minify - библиотека, предназначенная для здесь требуется - объединить файлы и отправить соответствующие заголовки, также обрезая содержимое, и вполне возможно gzipping их, пока кешируем результаты на диск. - Алистер Булман 10 января 10 года в 10: 44

0 голосов
/ 10 января 2010

Браузеры не определяют, является ли страница или файл динамическим или статическим по своему расширению.Его заголовки делают.Просто установите правильные заголовки, чтобы браузер знал, что он может кэшировать результаты.

Кроме того, откажитесь от закрытия ?>.Это не обязательно и плохая практика.

0 голосов
/ 10 января 2010

Вы можете включить автоматическое сжатие файлов, используя apache mod_deflate.

Вы также можете использовать apache mod_rewrite, чтобы ссылаться на эти файлы в html как на файлы js и перенаправлять запрос на файлы php, избегая проблем с кэшированием на вашем сервере.

Примерно так:

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

Поместите этот код в файл .htaccess в вашем каталоге.

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