Портал для веб-мастера

Инструменты для Бизнеса

Вход пользователей
Поиск статей
WoWeb.ru » Статьи » Программирование для Web » PHP

Оптимизатор html файлов
Здравствуйте дорогие читатели. Сегодня хотелось бы затронуть такую проблему как оптимизация html файлов.

Все мы когда-то подключившись к Интернету удивлялись красоте и посещаемости (а иногда и некрасоте) увиденных интернет проектов. Поэтому сразу возникало желание создать что нибудь такое грандиозное, чтобы все сёрферы Интернета аж охнули от увиденного.

Мы сидели ночами вглядываясь в монитор и верстали, верстали html страницы, но никто из нас тогда даже и не задумывался о качестве вёрстки, весе страниц. Только теперь вникнув в проблему создания сайтов мы стали понимать, что надо сделать вёстку по возможности простой и чтоб наши интернет проекты быстро грузились, так как не многие имеют высокоскоростной доступ в Интернет.

Посидев пару дней я постарался сделать программу, которая будет по возможности качественно оптимизировать html файлы. Для описания качества работы программы хотелось бы сказать, что скаченный файл с Интернета весом 71 кВ был оптимизирован с помощью программы WebOptHtml_v_1.0 до 46,4 кВ я думаю это о чём - то говорит.

Возможности программы:
- Удаление комментариев из html файлов;
- Удаление пробелов внутри html тэгов (< / font > или , или < /font>, или , или < /font>);
- Возведение html тэгов в верхний регистр;
- Удаление пустых строк в файлах;
- Удаление знаков табуляции;
- Удаление лишних пробелов.

Плюсом программы WebOptHtml_v_1.0 является то, что все функции обработки файлов можно легко настраивать по своиму вкусу и по требованию качества оптимизации.

Перед тем как перейти к коду программы хотелось бы сказать: Буду очень благодарен тем кто поможет в усовершенствовании алгоритма обработки html файлов, может кто придумает новые функции. Если что обращайтесь WebOptHtml_v_1.0 Буду рад услышать Ваши предложения.

Код программы:

CLASS OPT
{

//Каталог файлов для обработки
var $DIR_FILE="file";

//Каталог оптимизированных файлов
var $DIR_OPT="opt";

//Контент файла при его чтении
var $CONTENT;

//Массив файлов
var $ARRAY_FILE;

//Уникальный номер файла
var $id="";

//==============Функция удаления пробелов===========//
//@Удаляем лишние пробелы из html тэгов
function delete_gap_tag()
{
$this->CONTENT[$this->id]=preg_replace_callback('/()/im', create_function('$tag', 'return preg_replace("/s/i", "", $tag[0]);'), $this->CONTENT[$this->id]);
return TRUE;
}

//===============Функция возведения html тэгов в верхний регистр==========//
//@Возводит html тэги в верхний регистр
function strtoupper_tag()
{
$this->CONTENT[$this->id]=preg_replace_callback('{()}im', create_function('$tag', 'return $tag[1].strtoupper($tag[2]).$tag[3];'), $this->CONTENT[$this->id]);
return TRUE;
}

//===============Функция удаления комментариев из html файла==============//
//@Удаляет любые комментарии
function delete_comment()
{
$this->CONTENT[$this->id]=preg_replace_callback('{()}im', create_function('$comment', 'return str_replace($comment[1].$comment[2].$comment[3], "", $comment[0]);'), $this->CONTENT[$this->id]);
return TRUE;
}

В данной функции можно легко настроить количество обрабатываемых пробелов.
//==============Функция удаления лишних пробелов в файле==================//
//@Удаляет лишние пробелы в файле
//@Удаляет от 2 до 10 лишних пробелов
//@Можно редактировать количество
function delete_gap_file()
{
$this->CONTENT[$this->id]=preg_replace("/ss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=preg_replace("/sss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=preg_replace("/ssss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=preg_replace("/sssss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=preg_replace("/ssssss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=preg_replace("/sssssss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=preg_replace("/ssssssss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=preg_replace("/sssssssss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=preg_replace("/ssssssssss/i", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=trim($this->CONTENT[$this->id]);
return TRUE;
}

В данной функции можно настраивать количество обрабатываемых пустых строк. Если Вы хотите чтобы файл сохранял читабельный вид html вёрстки удалите первую строчку функции.
Первая строка добавленя в целях уменьшения строк в файле и соответсвенно размера файла, но при добавлении этой строчки абсолютно теряется читабельность html вёрстки.
//=================Функция удаления лишних переводов строк==============//
//@Удаляет лишние
//@Удаляет от 2 до 4 лишних пропусков строк
//@Можно редактировать количество
function nl2br_file()
{
$this->CONTENT[$this->id]=str_replace(" ", "", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=str_replace(" ", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=str_replace(" ", " ", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=str_replace(" ", " ", $this->CONTENT[$this->id]);
return TRUE;
}

В данной функции можно редактировать количество обрабатываемых знаков табуляции.
//================Функция удаления знаков табуляции=============//
//@Удаляет лишние
//@Удаляет от 1 до 3 табов
//@Можно редактировать количество
function delete_tab()
{
$this->CONTENT[$this->id]=str_replace(" ", "", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=str_replace(" ", "", $this->CONTENT[$this->id]);
$this->CONTENT[$this->id]=str_replace(" ", "", $this->CONTENT[$this->id]);
return TRUE;
}

Главная функция сделана в таком виде лиш потому что программа имеет графический интерфейс, и опции обработки html файлов. Поэтому если вы не хотите делать графический интерфейс, то можете удалить оператор switch и оставить 'case"all":'.
//======================Функция перезаписи контента файла===============//
//@Записывает в файл новый контент
function new_file($file)
{
$fp=fopen($this->DIR_OPT."/".$file, "w");
flock($fp, LOCK_EX);
rewind($fp);
fwrite($fp, $this->CONTENT[$this->id]);
fclose($fp);
}

//======================Главная функция ==========================//
function haupt_processing($array, $type)
{
switch($type)
{
/*Возведение тэгов верхний регистр*/
case"strtoupper":
$this->ARRAY_FILE=explode(",", $array); //Разбиваем файлы по запятым
while(list($key, $file)=each($this->ARRAY_FILE))
{
$this->id=$key;
$fp=fopen($this->DIR_FILE."/".$file, "rt") or die(trigger_error("Невозможно открыть файл ".$file, E_USER_ERROR)); //Открывает файл
flock($fp, LOCK_EX);//Блокируем файл
rewind($fp); //Установка позиции в начало файла;
$this->CONTENT[$this->id]=fread($fp, filesize($this->DIR_FILE."/".$file)); //Прочитывает контент файла
fclose($fp); //Закрытие файла
$this->strtoupper_tag(); //Верхний регистр
$this->new_file($file); //Запись
}
break;

/*Все опции оптимизатора*/
case"all":
$this->ARRAY_FILE=explode(",", $array);
while(list($key, $file)=each($this->ARRAY_FILE))
{
$this->id=$key;
$fp=fopen($this->DIR_FILE."/".$file, "rt") or die(trigger_error("Невозможно открыть файл ".$file, E_USER_ERROR));
flock($fp, LOCK_EX);
rewind($fp);
$this->CONTENT[$this->id]=fread($fp, filesize($this->DIR_FILE."/".$file));
fclose($fp);
$this->delete_gap_tag();
$this->strtoupper_tag();
$this->delete_comment();
$this->nl2br_file();
$this->delete_tab();
$this->delete_gap_file();
$this->new_file($file);
}
break;

/*Удаление пробелов в тэгах*/
case"delete_grap_tag":
$this->ARRAY_FILE=explode(",", $array);
while(list($key, $file)=each($this->ARRAY_FILE))
{
$this->id=$key;
$fp=fopen($this->DIR_FILE."/".$file, "rt") or die(trigger_error("Невозможно открыть файл ".$file, E_USER_ERROR));
flock($fp, LOCK_EX);
rewind($fp);
$this->CONTENT[$this->id]=fread($fp, filesize($this->DIR_FILE."/".$file));
fclose($fp);
$this->delete_gap_tag();
$this->new_file($file);
}
break;

/*Удаление комментариев из файла*/
case"delete_comment":
$this->ARRAY_FILE=explode(",", $array);
while(list($key, $file)=each($this->ARRAY_FILE))
{
$this->id=$key;
$fp=fopen($this->DIR_FILE."/".$file, "rt") or die(trigger_error("Невозможно открыть файл ".$file, E_USER_ERROR));
flock($fp, LOCK_EX);
rewind($fp);
$this->CONTENT[$this->id]=fread($fp, filesize($this->DIR_FILE."/".$file));
fclose($fp);
$this->delete_comment();
$this->new_file($file);
}
break;

/*Удаление пробелов из файла*/
case"delete_gap_file":
$this->ARRAY_FILE=explode(",", $array);
while(list($key, $file)=each($this->ARRAY_FILE))
{
$this->id=$key;
$fp=fopen($this->DIR_FILE."/".$file, "rt") or die(trigger_error("Невозможно открыть файл ".$file, E_USER_ERROR));
flock($fp, LOCK_EX);
rewind($fp);
$this->CONTENT[$this->id]=fread($fp, filesize($this->DIR_FILE."/".$file));
fclose($fp);
$this->delete_gap_file();
$this->delete_tab();
$this->new_file($file);
}
break;

/*Удаление переносов строк*/
case"delete_br":
$this->ARRAY_FILE=explode(",", $array);
while(list($key, $file)=each($this->ARRAY_FILE))
{
$this->id=$key;
$fp=fopen($this->DIR_FILE."/".$file, "rt") or die(trigger_error("Невозможно открыть файл ".$file, E_USER_ERROR));
flock($fp, LOCK_EX);
rewind($fp);
$this->CONTENT[$this->id]=fread($fp, filesize($this->DIR_FILE."/".$file));
fclose($fp);
$this->nl2br_file();
$this->new_file($file);
}
break;
}
}
}//End class

Программа WebOptHtml_v_1.0 является лишь попыткой для уменьшения веса html страниц и увеличения скорости их загрузки.

Как работать с программой:

Прежде всего создайте каталоги file - файлы подлежащие оптимизации, opt - оптимизированные файлы.

Для начала работы Вам необходимо указать файлы для обработки в переменной '$array'. Пример задания файлов:1html,2.html,3.html. Список файлов задаётся через запятую без пробелов. Я реализовал графический интерфейс и список файлов у меня поступает из формы.
Желательно чтобы количество обрабатываем файлов было примерно не более 10.

Объявляете класс OPT:
$new=new OPT;
Вызываете главную функцию обработки:
$new->haupt_processing($array, $type)
В параметре '$type' указывается вид обработки - оператор switch. Парметр '$type' я реализовал с помощью формы select.

Если Вы хотите чтобы сохранялась читабельность html вёрстки Вам необходимо удалить первую строчку в функции nl2br_file(). Оптимизация файлов будет намного качественнее если Вы каждый блок файла будете отделять пустой строчкой:
<table>
<tr><td>
текст
</td></tr>

<tr><td>
текст
</td></tr>

Вот и всё на сегодня. Удачи в изучении прекрасного языка PHP.

Автор: maksim · Добавлена: 2005-08-11
Просмотров: 4308 · Рейтинг: 5.0

Всего комментариев: 1
[1] Сергей(lordamot) 2008-06-02, 0:33 AM
Ты маньяк)) UpperCase по моему лишний бред, а так - вот:
function optimize(&$src)
{//Функция "высушивания" html кода
$garb = array("\t","\n","\r");
$src = str_replace($garb," ",$src);
$src = ereg_replace(" +"," ",$src);
$src = str_replace('=" ','="',$src);
$src = str_replace(' <','<',$src);
$src = str_replace('> ','>',$src);
$src = str_replace('< ','<',$src);
$src = str_replace(' >','>',$src);
return $src;
}

немного поменьше, не так ли?


Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Категории раздела
Flash
Apache
WWW
PhotoShop
Веб-дизайн
Раскрутка и реклама
Базы данных
3D графика
Хостинг
Истории веб-мастеров
Web-технологии
Сетевая безопасность
Программирование для Web
Операционные системы

Новые статьи
Лучшие статьи
Популярные статьи
Комментируемые статьи
Разделы сайта
Скрипты
Статьи
Шрифты
Флэш исходники
HTML шаблоны
Партнерки
Клипарты
Смайлы
Фоны
Гифы
Иконки
Опрос сайта
Есть ли у вас свой сайт?
Всего ответов: 141618
Наша кнопка
WoWeb.ru - портал для веб-мастера