Нужно сжать CSS и JavaScript через PHP, но нужно знать, как это влияет на производительность и как это реализовать? - PullRequest
0 голосов
/ 09 июля 2010

В настоящее время я использую PHP для включения нескольких файлов CSS (или JS) в один файл (а также для сжатия содержимого с помощью GZIP).

например. HTML-страница вызывает такие ресурсы ...

Пример моего файла Concat.php можно найти здесь: http://dl.dropbox.com/u/3687270/Concat.php (не стесняйтесь комментировать любые проблемы с кодом)

Но вместо того, чтобы открывать командную строку и запускать YUI Compressor вручную на моих файлах CSS / JS, я хочу, чтобы файл Concat.php обрабатывал это, по крайней мере, с точки зрения CSS (я говорю CSS только потому, что я ценю что YUI Compressor выполняет минимизацию переменных и другую оптимизацию, поэтому его невозможно воспроизвести в PHP - но это часть 2 моего вопроса).

Я знаю, что это можно сделать с помощью некоторой магии Регекс, и у меня нет проблем с этим.

Итак, мой вопрос состоит из 2 частей:

1.) Каковы последствия для производительности, связанные с минимизацией сервера с использованием preg_replace для файла CSS (или набора файлов CSS, которые могут содержать несколько сотен строк кода на файл - обычно это будет намного меньше, но я Я думаю, что если сервер сжимает файл, мне не придется слишком беспокоиться о лишних пробелах в моем CSS)

2.) И как я могу получить файлы JavaScript, которые объединены через мой файл Concat.php, запущенный через YUI Compressor? Может быть, запустить через сервер (у меня есть прямой доступ к серверу, чтобы я мог установить YUI Compressor там, если это необходимо), но будет ли это хорошей идеей? Конечно, оптимизация на сервере каждый раз, когда запрашивается страница, будет медленной и плохой для сервера + увеличение пропускной способности и т. Д.

Причина, по которой это возникло, заключается в том, что мне постоянно приходится возвращаться и вносить изменения в существующие «сжатые / минимизированные» файлы JS / CSS, что является настоящей болью, потому что мне нужно взять исходные исходные файлы, внести изменения затем повторно минимизировать и загрузить. В действительности я предпочел бы просто отредактировать свои файлы и позволить серверу обработать минификацию.

Надеюсь, что кто-то может помочь с этим.

Ответы [ 3 ]

2 голосов
/ 09 июля 2010

Если ваш веб-сервер Apache, вы должны использовать mod_concat и позволить Apache позаботиться о сжатии с помощью gzip,

http://code.google.com/p/modconcat/

Вы должны минимизировать JS только один раз и сохранить минимизированную версию на серверах.

1 голос
/ 09 июля 2010

Как предлагается в комментариях, вы можете использовать один из предварительно созданных сценариев для этого.Они используют YUI-компрессор, а также другие решения, даже если вы не можете запустить Java на сервере.

Первый, вероятно, PHP Speedy , который все еще работает, но был заброшен.

Новый - Minify , который предлагает множество функций, включая общее решение для кэширования в зависимости от возможностей сервера (APC, Memcached, File cache).

ДругойПреимущество этих проектов в том, что ваши URL не содержат строк запроса (в отличие от вашего текущего метода), что вызывает проблемы во многих браузерах , когда это происходиткешированию .Они также заботятся о gzipping и обработке Expires headers для вашего контента.

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

0 голосов
/ 09 июля 2010

Вот как я рекомендую вам это сделать:

  • Включить GZIP для этой конкретной папки (уровень веб-сервера)
  • Используйте один из инструментов, чтобы удалить пробелы и объединить файлы. Это послужит резервной копией для поисковых систем / прокси-пользователей, у которых не включен gzip. Затем вы кешируете выходные данные этого - так, чтобы дорогие вызовы регулярных выражений больше не срабатывали.

Вышеуказанное не будет очень дорогим, если вы правильно настроите свой сервер. Затраты PHP на самом деле не будут большими - поскольку у вас будет кэшированная версия CSS, т. Е.

-- css.php --

if (!isset($_GET['f'])) {
  exit();
}

if (file_exists('path/to/cached/css/'.md5($_GET['f'])) {
  // just include that file...
  readfile('/path/to/cached/css/'.md5($_GET['f']));
  exit();
}

$files = explode(',', $_GET['f']);

ob_start();
foreach ($files as $file)
{
  readfile($file);
}

// set a header (including the etags, future expiration dates..)
Header(....);

echo ob_get_flush(); // remove whitespace etc..


// write a new cached file
file_put_contents('/path/to/cache/'.md5($_GET['f']));

exit();

Затем вы можете сделать href = "css.php? F = style.css, что-то. Css, other.css" , после чего скрипт создаст кеш-файл, который является md5 этих файлов .

Приведенный выше пример не завершен .. на самом деле он более псевдо.

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