Сжатие веб-страниц с php, javascript, html и css в них - PullRequest
3 голосов
/ 29 сентября 2010

Я нашел утилиты, которые могут сжимать html, javascript и css файлы по отдельности.Однако, допустим, у меня есть файл с именем homepage.php с php вверху страницы, css и javascript в заголовке, html в теле вместе с большим количеством php-кода и, возможно, немного больше javascriptИногда у кусков с javascript также может быть php (для передачи значений php в javascript).Есть ли утилиты, которые могут справиться со сжатием таких страниц?

Просматривать каждый файл, разбивать его вручную и сжимать все по отдельности может быть очень утомительно.Даже то, что может просто сжать html и css в файлах и игнорировать javascript и php, было бы чрезвычайно полезно.В любом случае, большая часть моего javascript находится во внешних js-файлах.

Ответы [ 4 ]

2 голосов
/ 29 сентября 2010

Если идея этого вопроса состоит в том, чтобы использовать меньшую пропускную способность, то я предлагаю вам использовать выходной фильтр apache (при условии, что вы в любом случае используете apache в качестве веб-сервера). Просто отфильтруйте все PHP-скрипты и статические HTML-страницы с помощью ie. mod_deflate , и вы будете использовать меньшую пропускную способность.

1 голос
/ 29 сентября 2010

Даже если не существует инструмента, который позволил бы вам выполнять все минифации сразу, вы можете легко автоматизировать это с помощью DOM.Просто проанализируйте страницу и найдите все элементы <script> и <style>.Затем запустите их содержимое через сторонние библиотеки, такие как JsMin или CSSMin, и замените узлы выводом.

Однако вы также можете просто включить сжатие gzip на своем веб-сервере, которого должно быть более чем достаточно для большинства веб-сайтов.Или вы в последнее время сталкивались с каким-либо ограничением трафика?

0 голосов
/ 30 сентября 2010

Спасибо за все отзывы, ребята. Я буду использовать apache для сжатия файлов, но хотел сделать что-то, чтобы удалить все разрывы строк в сегментах css и html страницы перед этим. Я не мог найти ничего, что могло бы сделать это, оставив php и javascript нетронутыми в файле, поэтому я сделал свой собственный скрипт для этого.

Следующий код определенно может быть улучшен и очень, очень сырой. Есть много мест, где я могу сделать это более эффективным, но это всего лишь проверка идеи. Тем не менее, он работает достаточно хорошо, чтобы использовать. Просто сохраните его в php-файле и установите $ file_name на имя вашего файла.

<?

function minifyFile($file)
{

    $contents = file_get_contents($file);

    $contents = preg_replace('/<!--(.|\s)*?-->/', '', $contents);
    $contents = str_replace('<?', ' <? ', $contents);
    $contents = str_replace('?>', ' ?> ', $contents);
    $contents = str_replace('<script', ' <script', $contents);
    $contents = str_replace('script>', 'script> ', $contents);

    $filtered = '';

    $length = strlen($contents);

    $ignore = Array();
    $html = Array();

    for($i = 0;$i <= $length;$i++)
    {

        if(substr($contents, $i, 2) == '<?')
        {

            $end = strpos($contents, '?>', $i) + 2;

            array_push($ignore, Array('php', $i, $end));
            $i = $end;

        }
        else if(strtolower(substr($contents, $i, 7)) == '<script')
        {

            $end = strpos($contents, '</script>', $i) + 9;

            array_push($ignore, Array('js', $i, $end));
            $i = $end;

        }

    }

    $ignore_c = count($ignore) - 1;

    for($i = 0;$i <= $ignore_c;$i++)
    {

        $start = $ignore[$i][2];

        if($start < $length)
        {

            array_push($html, Array('html', $start+1, $ignore[$i+1][1]-1));

        }

    }

    function cmp($a, $b)
    {
    if ($a[1] == $b[1]) {
        return 0;
    }
    return ($a[1] < $b[1]) ? -1 : 1;
    }

    $parts = array_merge($ignore, $html);

    usort($parts, "cmp");

    foreach($parts as $k => $v)
    {

        $cont = substr($contents, $parts[$k][1], ($parts[$k][2]-$parts[$k][1]));

        if($parts[$k][0] == 'html')
        {

            $cont = str_replace(Array("\n", "\t", "  ", "   ", "    "), " ", $cont);

        }

        $filtered .= $cont;

    }

    return $filtered;

}

$file_name = '../main.php';
$filtered = minifyFile($file_name);

echo '<textarea style="width:700px;height:600px">' . file_get_contents($file_name) . '</textarea>';
echo '&nbsp;&nbsp;<textarea style="width:700px;height:600px">' . $filtered . '</textarea>';

?>

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

0 голосов
/ 29 сентября 2010

Обычно сжатие файлов html, js и css выполняется для уменьшения использования полосы пропускания при отправке файлов в браузер пользователя, что приводит к более быстрой загрузке страницы.

Это ваша цель?Зачем вам отправлять php в браузер?

Если ваша цель не в ускорении загрузки страниц, а в экономии места на диске, вы можете просто использовать gzip или что-то в этом роде.Но это кажется почти бессмысленным.

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