Среда, 17.06.2026, 10:14
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

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

Файлы к статье: WebOptHtml_v_1.0.zip

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

Мы сидели ночами вглядываясь в монитор и верстали, верстали 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 вёрстки.

//=================Функция удаления лишних переводов строк==============//

//@Удаляет лишние n

//@Удаляет от 2 до 4 лишних пропусков строк

//@Можно редактировать количество

function nl2br_file()

{

$this->CONTENT[$this->id]=str_replace("n", "", $this->CONTENT[$this->id]);

$this->CONTENT[$this->id]=str_replace("nn", "n", $this->CONTENT[$this->id]);

$this->CONTENT[$this->id]=str_replace("nnn", "n", $this->CONTENT[$this->id]);

$this->CONTENT[$this->id]=str_replace("nnnn", "n", $this->CONTENT[$this->id]);

return TRUE;

}

В данной функции можно редактировать количество обрабатываемых знаков табуляции.

//================Функция удаления знаков табуляции=============//

//@Удаляет лишние t

//@Удаляет от 1 до 3 табов

//@Можно редактировать количество

function delete_tab()

{

$this->CONTENT[$this->id]=str_replace("t", "", $this->CONTENT[$this->id]);

$this->CONTENT[$this->id]=str_replace("tt", "", $this->CONTENT[$this->id]);

$this->CONTENT[$this->id]=str_replace("ttt", "", $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(). Оптимизация файлов будет намного качественнее если Вы каждый блок файла будете отделять пустой строчкой:

текст

текст

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

Категория: php | Добавил: freeone (10.05.2007) | Автор: maksim
Просмотров: 639 | Рейтинг: 0.0 |

Всего комментариев: 0

Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006