Здравствуйте дорогие читатели. Сегодня хотелось бы затронуть такую проблему как оптимизация 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;
Программа 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.