2010-08-12 2 views
2

Прямо сейчас я использую PHP-скрипт для объединения нескольких CSS-файлов в один скрипт, а затем вывод их с типом содержимого text/css.Объединение нескольких файлов CSS

Проблема с этим браузером не кэширует файл.

Есть ли лучший способ сделать это?

Благодаря

+0

Какие заголовки кеширования вы отправляете? Установлен ли браузер для кэширования файлов? – Douglas

+0

Вы можете запустить скрипт PHP один раз и сохранить вывод в виде файла на вашем сервере. Там меньше накладных расходов, и кеширование должно работать из коробки. – cbednarski

ответ

2

Если вы должны служить CSS с помощью PHP, вы можете заставить заголовок кэша испускается, так что браузер может кэшировать вывод, если он так хочет:

<?php 

    header('Cache-control: max-age=3600'); // cache for at least 1 hour 
    header('Content-type: text/css'); 

    readfile('css1.css'); 
    readfile('css2.css'); 
    etc... 
2

Почему вы не просто использовать @import в глобальном файле CSS и ссылки, что в ваш HTML файл?

см: "Каскадные таблицы стилей" http://www.cssnewbie.com/css-import-rule/

+0

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

1

так называемые, прежде чем CSS файлы могут include другие. Вы также можете указать несколько файлов CSS в своем HTML-файле (используя LINK) вместо того, чтобы включать их в строку.

Используйте эти возможности и пусть ваш веб-сервер позаботится о отправке соответствующих заголовков для кэширования на стороне клиента обработки условных HTTP-запросов.

0

я использую код размещен ниже.

Он следует рекомендациям по скорости страницы Google.

Обратите внимание, что readfile быстрее, чем include поэтому следует использовать.

<?php 
#$off = 0; # Set to a reasonable value later, say 3600 (1h); 
$off = 604800; # Set to 1 week cache as suggested by google 

$last_modified_time = filemtime('csscompressor.php'); 
$etag = md5_file('csscompressor.php'); 

ob_start("ob_gzhandler"); 
ob_start("compress"); 
header('Content-type: text/css; charset="utf-8"', true); 
header("Cache-Control: private, x-gzip-ok=''"); 
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); 
header("Etag: $etag"); 
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $off) . " GMT"); 

// load css files 
readfile("global.css"); 
readfile('jquery-theme.css'); 
// ... 

?> 

Вы также должны служить все CSS и страницы JAVASCRIPT так:

<script src="http://example.com/myjavascript.js?v=<?=$version=?>" ></script> 

Переменная $version контролируется вами. Он должен быть установлен в файле конфигурации всего сайта. Каждый раз, когда вы нажимаете обновление в реальном времени, вы можете просто изменить версию на одном месте, и все, кто видит новый контент, просто нажмут на него и не будут зависеть от кеша.

Смежные вопросы