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

статистика: gzip-сжатие, время генерации

Форум для авторов модов для phpBB 2.0.x.
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет 1 месяц

статистика: gzip-сжатие, время генерации

Сообщение quazi »

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

#
#---OPEN includes/page_header.php
#

#
#---FIND
#
//
// gzip_compression
//
$do_gzip_compress = FALSE;
if ( $board_config['gzip_compress'] )
{
        $phpver = phpversion();

        $useragent = (isset($_SERVER["HTTP_USER_AGENT"]) ) ? $_SERVER["HTTP_USER_AGENT"] : $HTTP_USER_AGENT;

        if ( $phpver >= '4.0.4pl1' && ( strstr($useragent,'compatible') || strstr($useragent,'Gecko') ) )
        {
                if ( extension_loaded('zlib') )
                {
                        ob_start('ob_gzhandler');
                }
        }
        else
        if ( $phpver > '4.0' )
        {
                if ( strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') )
                {
                        if ( extension_loaded('zlib') )
                        {
                                $do_gzip_compress = TRUE;
                                ob_start();
                                ob_implicit_flush(0);
                                @header('Content-Encoding: gzip');
                        }
                }
        }
}

#
#---REPLACE WITH
#
ob_start();

#
#---OPEN includes/page_tail.php
#

#
#---FIND
#
$template->pparse('overall_footer');


#
#---ADD AFTER
#
//
// SAVE QSL QUERIES COUT
//
$page_sql_queries = $db->num_queries;

#
#---FIND
#
/* Un-comment the line below to restrict Admins only to view page generation info */

//if( ($userdata['session_logged_in']) and ($userdata['user_level'] == ADMIN) )
{
	$gzip_text = ($board_config['gzip_compress']) ? 'GZIP enabled' : 'GZIP disabled';

	$debug_text = (DEBUG == 1) ? 'Debug on' : 'Debug off';

	$excuted_queries = $db->num_queries;

	$mtime = microtime();
	$mtime = explode(" ",$mtime);
	$mtime = $mtime[1] + $mtime[0];
	$endtime = $mtime;

	$gentime = round(($endtime - $starttime), 4);

	$sql_time = round($db->sql_time, 4);

	$sql_part = round($sql_time / $gentime * 100);
	$php_part = 100 - $sql_part;

	echo '<br /><div class="gensmall" align="center">Page generation time: '. $gentime .'s (PHP: '. $php_part .'% - SQL: '. $sql_part .'%) - SQL queries: '. $excuted_queries .' - '. $gzip_text .' - '. $debug_text .'</div>';
}


//
// Compress buffered output if required and send to browser
//
if ( $do_gzip_compress )
{
        //
        // Borrowed from php.net!
        //
        $gzip_contents = ob_get_contents();
        ob_end_clean();

        $gzip_size = strlen($gzip_contents);
        $gzip_crc = crc32($gzip_contents);

        $gzip_contents = gzcompress($gzip_contents, 9);
        $gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4);

        echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
        echo $gzip_contents;
        echo pack('V', $gzip_crc);
        echo pack('V', $gzip_size);
}

#
#---REPLACE WITH
#
function dk_ob_gzhandler($uncompress)
{
    global $board_config, $page_gen_time, $page_sql_queries, $page_size;
    $len1 = strlen($uncompress);
    if ($board_config['gzip_compress'] && strstr(@$_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
    {
        $compress = ob_gzhandler($uncompress, 9);
    }
    else
    {
        $compress = $uncompress;
    }
    /*
    if ($board_config['gzip_compress']) {
        if (strstr(@$_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
        {
            $compress = ob_gzhandler($uncompress, 9);
        }
        else
        {
            $compress = $uncompress;
        }
    } else {
        $compress = $uncompress;
    }
    */
    $len2 = strlen($compress);
    @SetCookie('page_gen_time',    $page_gen_time,    0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
    @SetCookie('page_sql_queries', $page_sql_queries, 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
    @SetCookie('page_size',        "$len1, $len2",    0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
    return $compress;
}

$html = ob_get_contents();
ob_clean();

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;

$page_gen_time = round(($endtime - $starttime), 4);

echo dk_ob_gzhandler($html);

#
#---OPEN templates/subSilver/overall_footer.tpl
#

#
#---FIND
#
                </td>
        </tr>
</table>

</body>
</html>

#
#---BEFORE ADD
#
	<table width="100%" align="center" border="0" cellpadding="3">

	<tr>
	    <td width="100">&nbsp;</td>
	    <td id="stat" align="center" class="gensmall"></td>
	    <td width="100" align="right" class="gensmall">&nbsp;</td>
	</tr>

	</table>
<script language="JavaScript">
<!--
// The trim-family functions
String.prototype.ltrim = function()
{
    return this.replace(/(^\s*)/, "");
}

String.prototype.rtrim = function()
{
    return this.replace(/(\s*$)/g, "");
}

String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

function getCookie(name)
{
    var cookies = document.cookie.split(";");
    for (var i = 0; i < cookies.length; i++) {
        var s = cookies[i].trim().split('=');
        if (name == s[0]) return unescape(s[1]);
    }
    return null;
}

// The code below is modified cosmetically
// Original code has copyright by Dmitry Koteroff http://forum.dklab.ru

var time = getCookie('page_gen_time');
var sql = getCookie('page_sql_queries');
var size = getCookie('page_size');
size = size ? size.split(/,\s*/) : null;

var size_before = getCookie('page_size_before');
var size_after = getCookie('page_size_after');

document.getElementById("stat").innerHTML = ''
    + (time ? '[Generation time: ' + time + ' s] .::. ' : '')
    + (sql ? '[SQL queries: ' + sql + '] .::. ' : '')
    + (size ? '[GZIP compression: ' + (size ? size[1] + '/' + size[0] + ' (' + (100 - Math.round(size[1] / size[0] * 100)) + '
//-->
</script>
Добавлено спустя 1 минуту 43 секунды:

написано по мотивам Page Generation Time
немного кода (javascript с небольшими косметическими изменениями) взяты с форума ДК

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

хотя это больше похоже модификацию модификации и требует наличия оригинального мода
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

quazi
Вопрос не относящийся к форуму..
А как сделать сжатие Gzip для своего сайта? (движок на PHP)
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
MiTrI
phpBB 1.4.2
Сообщения: 67
Стаж: 19 лет 4 месяца
Откуда: Spb

Сообщение MiTrI »

quazi
У меня в файле page_tail.php нет вот этого кода
/* Un-comment the line below to restrict Admins only to view page generation info */

//if( ($userdata['session_logged_in']) and ($userdata['user_level'] == ADMIN) )
{
$gzip_text = ($board_config['gzip_compress']) ? 'GZIP enabled' : 'GZIP disabled';

$debug_text = (DEBUG == 1) ? 'Debug on' : 'Debug off';

$excuted_queries = $db->num_queries;

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;

$gentime = round(($endtime - $starttime), 4);

$sql_time = round($db->sql_time, 4);

$sql_part = round($sql_time / $gentime * 100);
$php_part = 100 - $sql_part;

echo '<br /><div class="gensmall" align="center">Page generation time: '. $gentime .'s (PHP: '. $php_part .'% - SQL: '. $sql_part .'%) - SQL queries: '. $excuted_queries .' - '. $gzip_text .' - '. $debug_text .'</div>';
}
Может быть из-за этого. Но у меня этот мод не работает. Время генерации не отображается...
Cold silence has a tendency to atrophy any sense of compassion...
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет 1 месяц

Сообщение quazi »

видимо мой пост вводит многих в заблуждение.

ввожу ОЧЕНЬ ВАЖНОЕ замечание
я решил поставить себе оригинальный мод Page Generation Time, посмотрел и решил исправить - ни мне, ни юзерам абсолютно не надо знать какой режим DEBUG у меня на форуме
и еще одна причина (я говорил выше) gzip-сжатие отнимает некоторое процессорное время, это время должно учитываться в статистике

сейчас я уже не могу отследить всех изменений в коде мода и оригинального текста файлов форума
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

quazi
Хм.. сделал все эти изменения и строчка с информацией о генерации пропала вобще.. Пойду копать где чего.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет 1 месяц

Сообщение quazi »

если вы пользуетесь МСИЕ, то о его проблемах я писал здесь http://phpbbguru.net/community/viewtopi ... 6955#26955
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Переделал мод Page Generation Time с учётом замечаний quazi для своих нужд, получилось что-то сильно смахивающее на аналогичную фичу из Олимпуса :D (75% - это экономия траффика)

Изображение

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

# 
#-----[ OPEN ]------------------------------------------ 
# 
extension.inc

# 
#-----[ FIND ]------------------------------------------ 
# 
?>

# 
#-----[ BEFORE, ADD ]----------------------------------
# 

// Advanced Page Generation Time START
$starttime = explode(' ', microtime());
$starttime = $starttime[0] + $starttime[1];
// Advanced Page Generation Time END

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

# 
#-----[ FIND ]------------------------------------------ 
#
$do_gzip_compress = FALSE;

#
#-----[ AFTER, ADD ]------------------------------------
#
/*
// Advanced Page Generation Time Cut START

# 
#-----[ FIND ]------------------------------------------ 
#
                        } 
                } 
        } 
}

# 
#-----[ AFTER, ADD ]----------------------------------
#
// Advanced Page Generation Time Cut END
*/

# 
#-----[ FIND ]------------------------------------------ 
#
//
// Parse and show the overall header.
//

# 
#-----[ AFTER, ADD ]----------------------------------
#
ob_start();

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

# 
#-----[ FIND ]------------------------------------------ 
#
$template->assign_vars(array(

#
#-----[ AFTER, ADD ]------------------------------------
#
	
	// Advanced Page Generation Time START
	'L_TIME' => $lang['Time'],
	'L_SECOND' => $lang['Second'],
	'L_SQL_QUERIES' => $lang['SQL_Queries'],
	'L_GZIP' => $lang['Gzip'],
	'L_NA' => $lang['NA'],
	'L_OFF' => $lang['OFF'],
	'L_LOAD' => $lang['Load'],
	// Advanced Page Generation Time END

# 
#-----[ FIND ]------------------------------------------ 
#
//
// Close our DB connection.
//

# 
#-----[ BEFORE, ADD ]----------------------------------
#
$page_sql_queries = $db->num_queries;

# 
#-----[ FIND ]------------------------------------------ 
# 
//
// Compress buffered output if required and send to browser
//
if ( $do_gzip_compress )

# 
#-----[ BEFORE, ADD ]----------------------------------
#
/*
// Advanced Page Generation Time Cut START

# 
#-----[ FIND ]------------------------------------------ 
# 
	echo pack('V', $gzip_size);
}

# 
#-----[ AFTER, ADD ]----------------------------------
#
// Advanced Page Generation Time Cut END
*/

# 
#-----[ FIND ]------------------------------------------ 
#
exit;

# 
#-----[ BEFORE, ADD ]----------------------------------
#
// Advanced Page Generation Time START
if (@file_exists('/proc/loadavg'))
{
	if ($load = @file('/proc/loadavg'))
	{
		list($cur_load) = explode(' ', $load[0]);
	}
}

function dk_ob_gzhandler($uncompress) 
{ 
    global $board_config, $page_gen_time, $page_sql_queries, $gzip_stats, $cur_load; 
    
    if ($board_config['gzip_compress'] && strstr(@$_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) 
    { 
        $compress = ob_gzhandler($uncompress, 9);
    } 
    else 
    { 
        $compress = $uncompress;
    } 

    $gzip_stats = 100 - round(  strlen($compress) / strlen($uncompress) * 100);
    @SetCookie('page_gen_time',    $page_gen_time,    0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']); 
    @SetCookie('page_sql_queries', $page_sql_queries, 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']); 
    @SetCookie('page_gzip_stats',  $gzip_stats,       0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']); 
    @SetCookie('page_cur_load',    $cur_load,         0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']); 
	
    return $compress;
} 

$html = ob_get_contents(); 
ob_clean(); 

$mtime = explode(' ', microtime());
$page_gen_time = round(($mtime[0] + $mtime[1] - $starttime), 4); 

echo dk_ob_gzhandler($html);
// Advanced Page Generation Time END


# 
#-----[ OPEN ]------------------------------------------ 
#
language/lang_english/lang_main.php

# 
#-----[ FIND ]------------------------------------------ 
#
?>

# 
#-----[ BEFORE, ADD ]----------------------------------
#
// Advanced Page Generation Time START
$lang['Second'] = 's';
$lang['SQL_Queries'] = 'Queries';
$lang['Gzip'] = 'Gzip';
$lang['NA'] = 'N/A';
$lang['OFF'] = 'Off';
$lang['Load'] = 'Load';
// Advanced Page Generation Time END

# 
#-----[ OPEN ]------------------------------------------ 
#
language/lang_russian/lang_main.php

# 
#-----[ FIND ]------------------------------------------ 
#
?>

# 
#-----[ BEFORE, ADD ]----------------------------------
#
// Advanced Page Generation Time START
$lang['Second'] = 'с';
$lang['SQL_Queries'] = 'SQL-запросов';
$lang['Gzip'] = 'Gzip';
$lang['NA'] = 'Недоступно';
$lang['OFF'] = 'Выкл.';
$lang['Load'] = 'Загрузка';
// Advanced Page Generation Time END

# 
#-----[ OPEN ]------------------------------------------ 
#
templates/subSilver/overall_footer.tpl

# 
#-----[ FIND ]------------------------------------------ 
#
Powered by <a href="http://www.phpbb.com/" target="_phpbb" class="copyright">phpBB</a> &copy; 2001, 2005 phpBB Group<br />{TRANSLATION_INFO}</span></div>

# 
#-----[ AFTER, ADD ]----------------------------------
#
<br />
<div id="stat" align="center" class="copyright"></div>

<script language="JavaScript"> 
<!-- 
// The trim-family functions 

String.prototype.trim = function() 
{ 
    return this.replace(/(^\s*)|(\s*$)/g, ""); 
} 

function getCookie(name) 
{ 
    var cookies = document.cookie.split(";"); 
    for (var i = 0; i < cookies.length; i++) { 
        var s = cookies[i].trim().split('='); 
        if (name == s[0]) return unescape(s[1]); 
    } 
    return null; 
} 

// The code below is modified cosmetically 
// Original code has copyright by Dmitry Koteroff http://forum.dklab.ru 
var l_time = "{L_TIME}";
var l_second = "{L_SECOND}";
var l_sql_queries = "{L_SQL_QUERIES}";
var l_gzip = "{L_GZIP}";
var l_na = "{L_NA}";
var l_off = "{L_OFF}";
var l_load = "{L_LOAD}";

var time = getCookie('page_gen_time'); 
var sql = getCookie('page_sql_queries'); 
var gzip_stats = getCookie('page_gzip_stats');
var cur_load = getCookie('page_cur_load');

document.getElementById("stat").innerHTML =
'[ ' + l_time + ' : ' + (time ? time + l_second : l_na) +
' | ' + l_sql_queries + ' : ' + (sql ? sql : l_na) +
' | ' + l_gzip + ' : ' + (gzip_stats ? ( (gzip_stats!=0) ? gzip_stats + '%' : l_off ) : l_na) +
' | ' + l_load + ' : ' + (cur_load ? cur_load : l_na) +
' ]';

//--> 
</script>

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

quazi, Coagulant
Граждане, опеределитесь пожалуйста со своими правами на данный мод, есть желание зарелизить.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Xpert писал(а):Граждане, опеределитесь пожалуйста со своими правами на данный мод, есть желание зарелизить.
Скромно предлагаю:

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

## MOD Author: quazi < nomail@nospam.com > ( Rumata ) http://forum.dklab.ru/users/Rumata/ 
## MOD Author: Coagulant < baryshev@gmail.com > (Baryshev Ilya) http://coagulant.com.ru
Пример работы смотреть тут: http://coagulant.com.ru/
(javascript и куки должны быть включены)
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Поставил и не обрадовался.
Всё работает, но вот мысли на меня нехорошие нагоняет, но не суть. А так всё живет.
Только я наверное дурак: "Загрузка" - это что, что оно отображает?
я люблю daft punk | новый sugoi.ru
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

VVVas
VVVas писал(а):"Загрузка" - это что, что оно отображает?
Наверно Load average..
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Siava писал(а):Load average
А можно раскрыть это понятие?
а то у меня тут траблы нехилые по жизни и я немного плохо соображаю.
я люблю daft punk | новый sugoi.ru
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

VVVas
Глянь тут :lol:
(а то мне эту ссылку уже совали) :lol:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Siava писал(а):Глянь тут
tnx
А теперь объясните почему оно у меня всегда "Н3д0S7упн0"?
я люблю daft punk | новый sugoi.ru
Аватара пользователя
Mr. Anderson
phpBB Guru
phpBB Guru
Сообщения: 7522
Стаж: 20 лет 1 месяц
Откуда: СССР
Благодарил (а): 5 раз
Поблагодарили: 105 раз

Сообщение Mr. Anderson »

VVVas писал(а):А теперь объясните почему оно у меня всегда "Н3д0S7упн0"?
Может потому, что Windows-хостинг (або другой неUNIX)?

Вернуться в «Для авторов (phpBB 2.0.x)»