Здравствуйте дорогие читатели. Сегодня хотелось бы затронуть такую проблему как оптимизация html файлов. Все мы когда-то подключившись к Интернету удивлялись красоте и посещаемости (а иногда и некрасоте) увиденных интернет проектов. Поэтому сразу возникало желание создать что нибудь такое грандиозное, чтобы все сёрферы Интернета аж охнули от увиденного. Мы сидели ночами вглядываясь в монитор и верстали, верстали html страницы, но никто из нас тогда даже и не задумывался о качестве вёрстки, весе страниц. Только теперь вникнув в проблему создания сайтов мы стали понимать, что надо сделать вёстку по возможности простой и чтоб наши интернет проекты быстро грузились, так как не многие имеют высокоскоростной доступ в Интернет. Посидев пару дней я постарался сделать программу, которая будет по возможности качественно оптимизировать html файлы. Для описания качества работы программы хотелось бы сказать, что скаченный файл с Интернета весом 71 кВ был оптимизирован с помощью программы WebOptHtml_v_1.0 до 46,4 кВ я думаю это о чём - то говорит. Возможности программы: - Удаление комментариев из html файлов; - Удаление пробелов внутри html тэгов (< / font > или 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('{(?)(w+)(.*?>)}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. |