Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[BETA] Output Page Size Reducer MOD

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

[BETA] Output Page Size Reducer MOD

Сообщение Delestor »

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

Код: Выделить всё

####################################################################################################
## 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 раз.
Чувствую себя натуральной блондинкой...
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет 1 месяц

Сообщение quazi »

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

то есть логику фильтра перенести из класса Template в includes/page_tail.php. за одно можно совместить фильтрацию и gzip-ование
Delestor
phpBB 1.4.1
Сообщения: 44
Стаж: 17 лет 9 месяцев

Сообщение Delestor »

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

Можно, если быстродействие совсем не волнует...
Подумаем...
Чувствую себя натуральной блондинкой...
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Delestor
Ваш мод точно не меняет внешний вид страниц?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Delestor
phpBB 1.4.1
Сообщения: 44
Стаж: 17 лет 9 месяцев

Сообщение Delestor »

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 раз.
Чувствую себя натуральной блондинкой...
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет 1 месяц

Сообщение quazi »

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

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

Сообщение Delestor »

Версия 0.1.2, устранил несовместимость с модом RSS Feed.
Чувствую себя натуральной блондинкой...
Delestor
phpBB 1.4.1
Сообщения: 44
Стаж: 17 лет 9 месяцев

Сообщение Delestor »

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

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

P. S.
Хотелось бы услышать комментарии по быстродействию этого всего.
Чувствую себя натуральной блондинкой...
CodeWorld
phpBB 1.4.2
Сообщения: 68
Стаж: 18 лет 1 месяц

Сообщение CodeWorld »

Сколько килобайт удаётся вырезать?
Delestor
phpBB 1.4.1
Сообщения: 44
Стаж: 17 лет 9 месяцев

Сообщение Delestor »

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

Сообщение CodeWorld »

Я тоже когда то пробовал подобный мод реализовать - понял что фигня потому что экономия малая, а гемороя много (чтобы не нарушить отображение страниц). Хотя мне удавалось по 5 - 20 кб жрать 8)
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Delestor
Гораздо интереснее сделать рельно легкий стиль. Я делал одно время, потом плюнул...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Delestor
phpBB 1.4.1
Сообщения: 44
Стаж: 17 лет 9 месяцев

Сообщение Delestor »

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

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

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

P. S.
Xpert
А разве у данного форума не "реально лёгкий стиль"?
Чувствую себя натуральной блондинкой...
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Нет, не реально легкий...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Delestor
phpBB 1.4.1
Сообщения: 44
Стаж: 17 лет 9 месяцев

Сообщение Delestor »

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

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

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

Требуется php4 и выше.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Чувствую себя натуральной блондинкой...

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