Ускорение загрузки страниц
- оптимизация хтмл;
- сжатие данных.
Оптимизация хтмл в данном случае - простое выкусывание лишних пробелов, которое, тем не менее, уменьшает размер файла в среднем на 20-25%. Я делаю это в два присеста:
- замена двух и более пробельных символов (табы, переносы) на один пробел;
- стирание пробелов между тэгами.
Вот такая простая функция:
function optimize_html($str)
{
$str = ereg_replace("[[:space:]]{2,}"," ", $str);
$str = ereg_replace(">[[:space:]]+<","><", $str);
return $str;
}
Сжатие данных позволяет передавать по каналу связи gzip-файл, который затем
прозрачно для пользователя разворачивается и отображается. В принципе, можно
использовать автоматическое сжатие всех страниц сервера на лету через включение
опции zlib.output_compression, но я от этого отказался, потому что я ещё и
кэширую страницы и храню в кэше сжатые файлы, а не plain html.
Вот как всё это выглядит в одной связке:
$_do_gzip = true
&& (int)ini_get("zlib.output_compression")==0
&& function_exists("gzencode")
&& eregi("gzip", $_SERVER['HTTP_ACCEPT_ENCODING']);
$_do_optimize_html = true;
ob_start(); //начать буферизацию вывода
... моё приложение чё-то делает...
if($_do_gzip)
{
$contents = ob_get_contents(); //останов буферизации
ob_end_clean();
if($_do_optimize_html)
$contents = optimize_html($contents);
$contents = gzencode($contents); //сжатие данных
header("Content-Type: text/html; charset=utf-8");
header("Content-Encoding: gzip");
echo $contents; //вывод в броузер
}
Ниже представлен график, показывающий изменение размера хтмл-файла в 4 состояниях:
- Исходный вариант (размер - 100%)
- Были выкушены пробелы (78% от исходного)
- Исходный файл был сжат (17%)
- Файл с выкушенными пробелами был сжат (15%)
0 комментов:
Отправить комментарий