Минификация js/css/html

Игорь Грегорченко

Минификация (minify) — это простой подход для уменьшения размеров файлов css, js и html. В процессе сжатия все комментарии к коду, переносы строк, лишние табы и пробельные символы удаляются. Это позволяет сэкономить 10…20% от оригинального размера файла.

CSS и Javascript

Существует целая куча инструментов, которые решают эту задачу для CSS и JS файлов. Например, YUI компрессор от Yahoo. Вы просто запускаете утилиту, которая сохранит обработанную копию в файл:

java -jar yuicompressor-x.y.z.jar myfile.js -o myfile-min.js

HTML

С HTML чуть сложнее, т.к. эту задачу придется выполнить в самом приложении. Это будет иметь смысл, если размер Ваших HTML файлов превышает 10 КБ. Тогда экономия может быть ощутимой. На PHP это может выглядеть так:

<?php
function sanitize_output($buffer) {
    $search = array(
        '/\>[^\S ]+/s',  
        '/[^\S ]+\</s', 
        '/(\s)+/s'
    );
    $replace = array(
        '>',
        '<',
        '\\1'
    );
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
}
ob_start("sanitize_output");
?>
<html>
<body>
...

Функция sanitize убирает непечатные символы из HTML перед его выводом

Для автоматизации работы стоит использовать PHP Minify.

Как это делается на практике

Вам нужно готовить минифицированные копии всех Ваших CSS/Javascript/HTML файлов. Обычно это делается на этапе выкатки новой версии:

  1. Получение всех требуемых файлов.
  2. Минификация, например с помощью YUI compressor.
  3. Выкатка на продуктив.

Убедитесь, что запросы с продуктива будут поступать на минифицированные файлы:

<script src="/min.jquery.js"></script>

PHP скрипт, который найдет все JS/CSS файлы в папке и минифицирует их с названием “min.” + название файла:

<?
$path = '.';
$yui_path = 'yui.jar';
$list = array();
function minify_project($dir)
{
    $files = glob( $dir, GLOB_NOSORT );
    foreach ( $files as $file ) if ( in_array( pathinfo( $file, PATHINFO_EXTENSION ), array('css', 'js') ) )
    {
        echo $file . "\n";
        exec( 'java -jar ' . $yui_path . '  --charset utf-8 ' . $file . ' -o ' . (dirname($file) . '/min.' . basename($file)) );
    }
    else if ( is_dir($file) )
    {
        minify_project( $file . '/*' );
    }
}

minify_project($path . '/*');

Укажите $path к папке с проектом и $yui_path к скрипту yui

Самое важное

Обязательно минифицируйте JS и CSS, т.к. эта простая операция экономит 10…20% объема данных. Минифицируйте HTML только если он достаточно велик и занимает не менее 10% от размера запроса.

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

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023