Артём Мáлков

Минификация (сжатие) JS- и CSS-файлов на PHP

21 дек12 комм

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

Для чего вообще делается сжатие файлов? Для того, чтобы уменьшить их вес, тем самым ускорить работу вашего сайта.

Приведу простой пример. У вас есть не сжатая библиотека jQuery, которая весит 120 килобайт. А в сжатом виде эта же библиотека будет весить 60 килобайт. Получаем экономию в 60 КБ, что вполне неплохо. А если таких файлов 15-20?

Минификация (сжатие) JS- и CSS-файлов на PHP

Вообще сжатие файлов можно производить и вручную через какой-нибудь онлайн-сервис, а можно поступить куда умнее и воспользоваться готовым PHP-скриптом, с помощью которого легко можно решить поставленные задачи.

Минификация (сжатие) CSS-файлов на PHP

Основная идея минификации стилей будет заключаться в следующем: мы объединяем все файлы в один и удаляем в нем все переводы строк, символы табуляции, двойные пробелы и комментарии.

PHP-скрипт будет выглядеть следующим образом:

<?php

	header("Content-type: text/css");
	
	function compress($buffer) {
	
		$buffer = preg_replace("!/\*[^*]*\*+([^/][^*]*\*+)*/!", "", $buffer);
		$buffer = str_replace(array("\r\n", "\r", "\n", "\t", "  ", "    ", "    "), "", $buffer);
		
		return $buffer;
		
	}
	
	ob_start("compress");
	
	include("../style/style1.css"); // Ссылка на стиль 1
	include("../style/style2.css"); // Ссылка на стиль 2
	include("../style/style3.css"); // Ссылка на стиль 3
	include("../style/style4.css"); // Ссылка на стиль 4

	ob_end_flush();
	
?>

В нем вы прописываете адреса до всех ваших файлов стилей и отправляете итоговый файл на сайт по FTP или другим удобным для вас способом.

После чего на сайте вы удаляете указанные в скрипте стили и подключаете новый стиль по такому принципу:

<link rel="stylesheet" type="text/css" href="/style.php" />

Где «/style.php» – это ссылка до ранее созданного PHP-файла.

Сохраняете все изменения и смотрите, не поехал ли дизайн на вашем сайте, если поехал – то проверьте, корректные ли адреса вы прописали в скрипте.

Теперь, если вы обратитесь к вашему скрипту через браузер, то увидите, что ваши стили максимально оптимизированы.

Минификация (сжатие) JS-файлов на PHP

Оптимизация скриптов выполняется примерно по тому же принципу: объединяем все файлы в один и удаляем в нем переводы строк, двойной пробел и знак табуляции, а также комментарии кода.

Итоговый скрипт будет выглядеть следующим образом:

<?php

	header("Content-type: text/javascript");

	function compress($buffer) {

		$buffer = preg_replace("/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\'|\")\/\/.*))/", "", $buffer);
		$buffer = str_replace(array("\r\n", "\r", "\n", "\t", "  ", "    ", "    "), "", $buffer);

		return $buffer;

	}
	
	ob_start("compress");

	include("../js/script1.js"); // Ссылка на скрипт 1
	include("../js/script2.js"); // Ссылка на скрипт 2
	include("../js/script3.js"); // Ссылка на скрипт 3
	include("../js/script4.js"); // Ссылка на скрипт 4

	ob_end_flush();
	
?>

Не забывайте в нем прописать ссылки до ваших скриптов.

И по аналогии с CSS-файлами – подключение следующее:

<script type="text/javascript" src="/script.php"></script>

Где «/script.php» – ссылка до ранее созданного PHP-скрипта.

На что здесь стоит обратить внимание?

  1. Проставляйте корректные ссылки до ваших файлов.
  2. На вашем хостинге должна быть поддержка PHP.

В остальном вроде проблем быть не должно, но если все-таки они появились – пишите об этом в комментариях, постараюсь вам помочь.

Рекомендуем к просмотру
Минификация (сжатие) исходного кода (HTML) в MODX Revo на PHP
Хаки
Минификация (сжатие) исходного кода (HTML) в WordPress на PHP
Посты
Минификация (сжатие) исходного кода (HTML) в 1C-Bitrix на PHP
Хаки
12
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 1
    1067
      •  Команда Pandoge
    15 ноя в 17:32

    Олег Олегов, по кодировке:

    header("Content-type: text/css");

    замените на:

    header("Content-type: text/css; charset=utf-8");

    По внешним файлам: нет.

    Скачиваете файл к себе на хостинг и потом подключаете локально.

    • 1
    3
      •  Пользователь
    15 ноя в 15:18

    Артем Мáлков, еще пара вопросов возникло

    - слетает кодировка css (какую строку в style.php нужно добавить что бы установить ее принудительно)

    - внешние css и js также подключать? например https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js include("..https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"); верно?

    - сжатие js у меня не заработало.... почему то

    Спасибо

    • 1
    1067
      •  Команда Pandoge
    14 ноя в 22:01

    Олег Олегов, подключайте их локально. Из Google шрифты переносятся за несколько минут.

    • 1
    3
      •  Пользователь
    14 ноя в 20:23

    Спасибо, работает кроме внешних шрифтов... не подключается @import url('https://fonts.googleapis.com/css?family=Fira+Sans+Extra........................

    • 1
    1067
      •  Команда Pandoge
    13 ноя в 14:55

    Богдан, в коде была ошибка - исправил. Попробуйте еще раз.

    • 2
    1
      •  Пользователь
    13 ноя в 14:03

    Артем привет, скажи пожалуйста по какой причине может не работать?

    В файле пути указаны верно, открываю style.php просто белая страница, пробовал и на опенсервере, и на хостинге не получается. Хотя когда статья выходила пробовал все работал, щас потребовалось сделать, зашел и так и так, не получается( Помоги пожалуйста.

    Может быть архив с примером рабочим загрузить, чтоб было проще. Заранее большое спасибо.

    • 1
    1067
      •  Команда Pandoge
    30 июл в 17:29

    Роман в ближайшее время напишем инструкцию.

    • 2
    766
      •  Гости
    27 июл в 12:52

    А есть варианты минификаций для Joomla и ModX ? интересно было бы почитать и протестить у себя.

    заранее большое спасибо.

    • 1
    1067
      •  Команда Pandoge
    29 мая в 18:43

    Олег, очень громкие слова smiley

    Все работает!

    • -2
    766
      •  Гости
    29 мая в 17:51

    Вообще не работает! хрень!

    • 2
    766
      •  Гости
    24 апр в 11:41

    Хорошая штука. Артем скажи пожалуйста, можно ли сделать так?

    <link rel="stylesheet" type="text/css" href="{css-min}" />

    <script src="{js-min}" type="text/javascript"></script>

    {css-min} - в настройках скрипта указываем путь, и скрипт создает файл compiled.min.css

    Типа $css_min = css/compiled.min.css - создаст такой путь, и будет туда записывать стили

    На выходе подставит вот так данные.

    <link rel="stylesheet" type="text/css" href="css/compiled.min.css" />

    С JS точно так-же, объеденить в один скрипт это все.

    • 1
    766
      •  Гости
    13 апр в 21:21

    Не подключаются стили и js.

    Пытаюсь разобраться в причине.

    Уже прописывал к пути тег {THEME}.

    Путь и названия папки и файлов проверил.

    Подскажите пожалуйста, в чем ещё могут быть причины?

    • 1
    766
      •  Гости
    7 янв в 05:22

    Познавательно. Протестирую на своём сайте. Раньше такое в голову не приходило

Подняться наверх
«Pandoge» - помощник вебмастера