Пропустить

[BETA] Output Page Size Reducer MOD

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!

[BETA] Output Page Size Reducer MOD

Сообщение Delestor » 23.10.2006 21:32

Описание:
Мод уменьшает размер страницы отправляемой браузеру, за счёт удаления непечатаемых символов из шаблона страницы, преобразование ведётся на лету.

####################################################################################################
## MOD Title: Output Page Size Reducer MOD
## MOD Author: Delestor (N/A) (N/A) N/A
## MOD Description: Reduse output page size to delete useless character
## MOD Version: 0.1.2
##
## Installation Level: Easy
## Installation Time: 3 Minutes
## Files To Edit (3):
##	includes/functions.php
##	includes/template.php
##	templates/subSilver/overall_footer.tpl
##
## Included Files (0): n/a
##
## License: http://opensource.org/licenses/gpl-license.php GNU Public License v2
####################################################################################################
##
## For security purposes, please check: http://www.phpbb.com/mods/
## for the latest version of this MOD. Although MODs are checked
## before being allowed in the MODs Database there is no guarantee
## that there are no security problems within the MOD. No support
## will be given for MODs not found within the MODs Database which
## can be found at http://www.phpbb.com/mods/
##
####################################################################################################
##
## Author Notes:
## A short description:
##	Reduce page size to deleting non-printing characters.
##
####################################################################################################
##
## MOD History:
##	2006-10-26 - Version 0.1.2
##		- [BETA] Fix incompatibility to RSS Feed mod. Attempt's to increase speed.
##	2006-10-24 - Version 0.1.1 
##		- [BETA] Fix litle bag (script in one string ability uncorrect processing).
##	2006-10-23 - Version 0.1.0
##		- [BETA] First stable version.
##
####################################################################################################
##
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##
####################################################################################################
#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/overall_footer.tpl

#
#-----[ FIND ]------------------------------------------
#
<!--
	We request you retain the full copyright notice below including the link to www.phpbb.com.
	This not only gives respect to the large amount of time given freely by the developers
	but also helps build interest, traffic and use of phpBB 2.0. If you cannot (for good
	reason) retain the full copyright we request you at least leave in place the
	Powered by phpBB line, with phpBB linked to www.phpbb.com. If you refuse
	to include even this then support on our forums may be affected.

	The phpBB Group : 2002
// -->

#
#-----[ REPLACE WITH ]------------------------------------------
# Closely read through and then remove
<!--// OPSR:RB-->
<!--// OPSR:RE-->

#
#-----[ OPEN ]------------------------------------------
#
includes/template.php

#
#-----[ FIND ]------------------------------------------
#
        function compile($code, $do_not_echo = false, $retvar = '')
        {

#
#-----[ AFTER ADD ]------------------------------------------
#
// OPSR:A
$code = crude_template_cleaning($code);

#
#-----[ FIND ]------------------------------------------
#
                for ($i = 0; $i < $line_count; $i++)
                {

#
#-----[ AFTER ADD ]------------------------------------------
#
// OPSR:A
$code_lines[$i]=iteration_template_cleaning_process($code_lines[$i], 1);

#
#-----[ FIND ]------------------------------------------
#
                                        $code_lines[$i] = '$' . $retvar . '.= \'' . $code_lines[$i] . '\' . "\\n";';
                                }

#
#-----[ AFTER ADD ]------------------------------------------
#
// OPSR:A
$code_lines[$i]=iteration_template_cleaning_process($code_lines[$i], 0);

#
#-----[ OPEN ]------------------------------------------
#
includes/functions.php

#
#-----[ FIND ]------------------------------------------
# Find end of file
?>
#
#-----[ BEFORE ADD ]------------------------------------------
#
// OPSR:B
function crude_template_cleaning($s)
{
//crude cleaning
	// tab cleaning
	$s=str_replace("\t", '', $s);
	// windows file format clean, if need
	$s=str_replace("\r", '', $s);
	// reduce iteration
	$s=preg_replace("#^ *$#m", '',$s);
	$s=preg_replace("#\n+#", "\n", $s);
	// gap leaning
	$s=preg_replace("# +#", ' ', $s);
	return $s;
}

function iteration_template_cleaning_process($s, $first)
{
	static $counter = array('script' => 0,
				'style' => 0,
				'css_com' => 0);
	static $s_matches = array('');
	static $flag = array('xml' => false,
				'script' => false,
				'style' => false,
				'css_com' => false);
	static $clean_list = array('line_feed' => false,
				'string' => false);

	if($first==1)
	{
		//crude cleaning
		trim($s);

		if(preg_match("#(?:<(script|style|\?xml)[^>]*?>)#", $s, $s_matches)) {
			if($s_matches[1]=='?xml') {
				$flag['xml'] = true;
			} else if($s_matches[1] == 'script' ) {
				$counter['script']++;
			} else {
				$counter['style']++;
			}
		}

		if(preg_match("#(?:<\W*?\/(script|style)[^>]*?>)#", $s, $s_matches)) {
			if($s_matches[1] == 'script' ) {
				$counter['script']--;
				$flag['script'] = true;
			} else {
				$counter['style']--;
				$flag['style'] = true;
			}
		}
		if ($flag['xml'] == true ) {
// XML					cleaning
			$clean_list['line_feed']=false;

		} else if($counter['script'] > 0 || $flag['script'] == true ) {
// SCRIPT				cleaning
			$flag['script']=false;
			$clean_list['line_feed']=false;
			//Deleting coments, if need
			//ONLY JAVA FORMAT!!!
			$s=preg_replace("#\/\/.*[^-]{2}[^>]$#m", '',$s);

		} else if($counter['style'] > 0 || $flag['style'] == true ) {
// CSS					cleaning
			$flag['style']=false;
			$clean_list["cleaning_line_feed"] = true;
			//Deleting coments, if need
			$s=preg_replace("#\/\*.*\*?\/#s",'',$s);

			if(preg_match("#\/\*[\w ]*#i", $s) ) {
				$counter['css_com']++;
			} else if(preg_match("#[\w ]*\*\/\W*#i", $s) ) {
				$counter['css_com']--;
				$flag['css_com']=true;
			}

			if(($counter['css_com']>0) || ($flag['css_com']==true)) {
			$flag['css_com']=false;
			$clean_list['string']=true;
			}

		} else {
// HTML					cleaning
			$clean_list['line_feed']=true;
			//deleting comentary, if need        by my format
			//$s=preg_replace("#^<!--\/\/ [A-Z0-9]{2,4}(?:_[A-Z0-9]{2,4})?:[A-Z]{1,4}-->#",'',$s);
			$s=preg_replace("#^<!--(?!(?: BEGIN| END)).*?-->#",'',$s);

		}
//$s="\n" . '$s_m.[1]:|' . $s_matches[1]. '| fXml:' . $flag['xml'] . ' Style:' .  $counter['style'] .' Scr:' . $counter['script'] . '  css_tmp=' . $flag['css_com'] . '<br>' . '|' .$s ;
		if(preg_match("#^ *$#" , $s)) $clean_list['string']=true;
	} else {
		//Full deleting line feed
		if($clean_list['line_feed']==true) {
			$s=str_replace("\\n",'',$s);
		}

		//Deleting empty string
		if($clean_list['string']==true) {
			$s='';
			$clean_list['string']=false;
		}
	}
	return $s;
}
// OPSR:E

#
#-----[ SAVE/CLOSE ALL FILES ]---------------------
#
# EoM

Примечание
Удаляются символы табуляции, лишние символы пробела, переносы строки в CSS и html данных, переносы строки в скриптах сохраняются, благодаря чему мод совместим со стандартной формой ответа и с формой быстрого ответа Extended Quick Reply Form 3.0.3.
Так же удаляются комментарии в CSS данных; однострочные комментарии в HTML и в скриптах в формате java.
С версии 0.1.2 совместим и с модом RSS Feed.

Мод тестировался на совместимость с phpBB 2.0.21, php4.
Должен работать в php3~5.

Целесообразно совместное использование с модом:
CSS definition switch
( http://www.phpbbguru.net/community/viewtopic.php?t=4261 )
- автоматически записывает каскадные таблицы стилей в отдельный файл, который браузеры обычно кешируют, либо вынесение их в отдельный файл вручную.

Подобные моды разрабатывались:
http://www.phpbbguru.net/community/topic4106-45.html
http://www.phpbbguru.net/community/view ... highlight=
Но автор последнего прекратил все работы над ним в ноябре 2005, так и не доведя его до логического конца.

Первая версия мода, о быстродействии пока серьёзно не задумывался:)
Последний раз редактировалось Delestor 26.10.2006 11:45, всего редактировалось 11 раз(а).
Чувствую себя натуральной блондинкой...

Delestor
phpBB 1.4.1
 
Сообщения: 44
Зарегистрирован: 22.06.2006 14:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение quazi » 23.10.2006 21:41

фильтрацию пробельных символов надо делать не на стадии компиляции страницы из шаблонов, а на этапе выдачи законченного результата клиенту, когда страница полностью сформирована и последнее действие которое с ней надо совершить - это показать в окне браузера

то есть логику фильтра перенести из класса Template в includes/page_tail.php. за одно можно совместить фильтрацию и gzip-ование

quazi
phpBB 2.0.8
 
Сообщения: 306
Зарегистрирован: 15.03.2005 19:49
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Delestor » 23.10.2006 21:51

quazi писал(а):а на этапе выдачи законченного результата клиенту

Всё ради трафика...

Можно, если быстродействие совсем не волнует...
Подумаем...
Чувствую себя натуральной блондинкой...

Delestor
phpBB 1.4.1
 
Сообщения: 44
Зарегистрирован: 22.06.2006 14:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Xpert » 23.10.2006 22:00

Delestor
Ваш мод точно не меняет внешний вид страниц?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Delestor » 24.10.2006 21:08

quazi
quazi писал(а):фильтрацию пробельных символов надо делать не на стадии компиляции страницы из шаблонов, а на этапе выдачи законченного результата клиенту, когда страница полностью сформирована и последнее действие которое с ней надо совершить - это показать в окне браузера



то есть логику фильтра перенести из класса Template в includes/page_tail.php. за одно можно совместить фильтрацию и gzip-ование

Мод и без этого довольно эффективен, попробуй.
И там уже пойдут совсем другие объёмы обработки информации.

Идея была создать мод, который корректно уменьшает размер страницы, не нарушая при этом её структуру и работоспособность скриптов, и не уменьшает функциональности форума.

Если удалять двойный пробелы после сборки, то пользователь захотевший оформить что - нибудь мудрёдное с помощью них, будет неприятно удивлён. Или ещё хуже, захочется кому-нибудь ник с двумя пробелами...
Налицо уменьшение функциональности, возможно если надо это оформить в качестве аддона, или перестроить всю логику под постобработку только уже в отдельной (Extreme) версии.
Хотелось бы прокоонсультироваться насчёт быстродействия php по этому вопросу с экспертами, сам я с php совсем недавно познакомился...
Xpert писал(а):Delestor

Ваш мод точно не меняет внешний вид страниц?

Даже не знаю, что на это ответить... А надо?
Увы он удаляет только непечатаемые символы...

Не заметил такого...
Работает второй день на рабочем форуме, вроде заметных изменений никто не заметил..., да и я тоже:)
Использовал Opera 9.02, Internet Explorer 6.0.2900.2180.xpsp_sp2_rtm..., Оpera mini (для сотовых:))...

Версию обновил до 0.1.1 скрипты типа: <script [тра ля ля]><!--[тра ля ля]--></script>, если шли одной строкой проходили через ветку для обработки html, и рисковали удалением тела как комментария.
Последний раз редактировалось Delestor 24.10.2006 21:30, всего редактировалось 1 раз.
Чувствую себя натуральной блондинкой...

Delestor
phpBB 1.4.1
 
Сообщения: 44
Зарегистрирован: 22.06.2006 14:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение quazi » 24.10.2006 21:15

Delestor писал(а):Мод и без этого довольно эффективен, попробуй

да знаю, что он эффективен

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

quazi
phpBB 2.0.8
 
Сообщения: 306
Зарегистрирован: 15.03.2005 19:49
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Delestor » 26.10.2006 11:37

Версия 0.1.2, устранил несовместимость с модом RSS Feed.
Чувствую себя натуральной блондинкой...

Delestor
phpBB 1.4.1
 
Сообщения: 44
Зарегистрирован: 22.06.2006 14:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Delestor » 04.11.2006 14:02

quazi писал(а):страница полностью сформирована

Думаю для меня в этом и будут заключаться сложности, и весит она уже около 200кб. Использую UTF-8.

Появилась идея отличного выходного фильтра.
Типа ("#>(?:(?:\n| |\t)+)<#",'><').
Функциональность нарушаться не будет. (Но вообе-то сейчас занят очень.)
Ждём:)

P. S.
Хотелось бы услышать комментарии по быстродействию этого всего.
Чувствую себя натуральной блондинкой...

Delestor
phpBB 1.4.1
 
Сообщения: 44
Зарегистрирован: 22.06.2006 14:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение CodeWorld » 10.11.2006 21:02

Сколько килобайт удаётся вырезать?

CodeWorld
phpBB 1.4.3
 
Сообщения: 68
Зарегистрирован: 04.03.2006 17:19
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Delestor » 11.11.2006 13:40

1 109 байт, в странице которая весит 32 084 байт.
Или 3.45% Главная страница форума, (с модом CSS definition switch, экономия за счёт него в цифру не входит). При кодировке UTF-8.
Да, посчитаешь, оказвывается не очень-то и много=)
Чувствую себя натуральной блондинкой...

Delestor
phpBB 1.4.1
 
Сообщения: 44
Зарегистрирован: 22.06.2006 14:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение CodeWorld » 11.11.2006 20:49

Я тоже когда то пробовал подобный мод реализовать - понял что фигня потому что экономия малая, а гемороя много (чтобы не нарушить отображение страниц). Хотя мне удавалось по 5 - 20 кб жрать 8)

CodeWorld
phpBB 1.4.3
 
Сообщения: 68
Зарегистрирован: 04.03.2006 17:19
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Xpert » 12.11.2006 0:05

Delestor
Гораздо интереснее сделать рельно легкий стиль. Я делал одно время, потом плюнул...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Delestor » 12.11.2006 19:41

Xpert писал(а):Гораздо интереснее сделать рельно легкий стиль.

Да...
Стиль на java Script это прикольно...

Против лома, что называется, нет приёма...

(Правда с поисковиками напряженка.)
P. S.
CodeWorld писал(а):Хотя мне удавалось по 5 - 20 кб жрать :)

Ещё не вечер:)

P. S.
Xpert
А разве у данного форума не "реально лёгкий стиль"?
Чувствую себя натуральной блондинкой...

Delestor
phpBB 1.4.1
 
Сообщения: 44
Зарегистрирован: 22.06.2006 14:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Xpert » 12.11.2006 21:16

Нет, не реально легкий...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Delestor » 07.01.2007 16:48

Нужна помощь гуру.
Сделал версию 0.1.5. Может и не стал бы делать, но заметил, что браузер всё-равно лишние пробелы не показывает, да ещё установил eXtreme Styles, в его класс template я влезать не стал, страшно...

Как и советовал quazi, работа фильтра перенесена в page_tail.php.
Всё было отлично, сжатие, думаю, максимально возможное...

Было нормально, пока не попытался зайти через Microsoft Internet Испортил.
Чистая страница, и так оказалось не только на локальном хостинге... И не только у меня (на хостинге тоже поэксперементировал)...
В чём дело, и возможно ли с этим что-нибудь сделать - не знаю.
Ошибку вызывает функция ob_end_clean(). Ничего не отображается, в то время как через Opera всё прекрасно.
Не понимаю, почему работа с выходным буфером зависит от браузера, невероятно, но факт...
Может Ослику нужен мгновенный отклик? Даже не знаю...

Требуется php4 и выше.
Вложения
Output Page Size Reducer v 0.1.5.txt
(7.92 КБ) Скачиваний: 292
Чувствую себя натуральной блондинкой...

Delestor
phpBB 1.4.1
 
Сообщения: 44
Зарегистрирован: 22.06.2006 14:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

След.

Вернуться в Бета-версии модов для phpBB 2.0.x

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы