Ak máte fórum s veľa SQL dopyt na databázu tak robíte aj vysoký traffic. Málo koho to zaujíma, ale mňa to zaujíma viac ako dosť. Už dlho ma zaujímalo ako môžu niektoré obrovské fóra s modifikáciami, ktoré pridávajú na každú stránku aj 2 SQL dopyty a pritom majú na úvodnej stránke 5?
Zdalo sa mi to nemožné tak som si myslel, že aj keď sa to podobá na phpBB 3 verziu tak predsa to bola stará dobrá dvojka.
Jeden a najúčinnejší spôsob ako nemať fórum s 30 dopytmi na každej stránke je cachovanie..
Čo je to cachovanie?
V súčastnosti sa používajú dve metódy, ako urýchliť generovanie stránok. Jednou je generovanie, jednou cachovanie. Fungujú na podobnom princípe, avšak generovaní si predpripraví všetko vopred (napr. sa generujú dáta v noci) a cachovanie si ich vygeneruje a uloží vtedy keď je to potrebné (pri prístupe na stránku/článok)
Ďalej sa rozdeľuje, v ktorej časti sa cachovanie/generovanie použije. Buď na uloženie dát z databázy (nespomaľuje zbytočné pripájanie na db server a zdĺhavé selektovanie dát), alebo na statické uloženie už výslednej html stránky. Ten druhý typ sa používa hlavne na portáloch, kde sa neočakáva žiadna zmena, čiže v takom prípade na stránke nemôže byť napríklad diskusia a pod.
Uveďme si hotové príklady ktoré si hneď môžete vyskúšať:
Pre správne fungovanie musí byť nastavený adresár cache na CHMOD 777
PS: Po nainštalovaní možno prvý krát hodia niektoré chybu no dajte obnoviť a všetko pobeží....je to tým že sa snaží načítať súbor ktorý ešte neexistuje...
PS2: Otázky, chyby, bugy smerujte mne cez SS, EMAIL alebo do fóra phpBB2 podpora, diskusia...NESPAMUJTE TU!
Dôležité
V každom prípade cachovania, ktorý tu uvediem, bude potrebná funckia format_array ktorú pridáte na koniec súboru (samozrejme pred ?>) functions.php v priečinku includes
## EasyMod 0.3.0 Compatible
##############################################################
## MOD Title: Format array
## MOD Author: Huli < huli0401@gmail.com >
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################
#
#-----[ OPEN ]------------------------------------------
#
includes/function.php
#
#-----[ FIND ]------------------------------------------
#
?>
#
#-----[ BEFORE, ADD ]------------------------------------------
#
function format_array($array)
{
$lines = array();
foreach ($array as $k => $v)
{
if (is_array($v))
{
$lines[] = "'$k'=>" . format_array($v);
}
elseif (is_int($v))
{
$lines[] = "'$k'=>$v";
}
elseif (is_bool($v))
{
$lines[] = "'$k'=>" . (($v) ? 'TRUE' : 'FALSE');
}
else
{
$lines[] = "'$k'=>'" . str_replace("'", "\\'", str_replace('\\', '\\\\', $v)) . "'";
}
}
return 'array(' . implode(',', $lines) . ')';
}
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
# by Huli < huli0401@gmail.com >
Cachovanie templatu:
Nahradíme iba celú funkciu setup_style vo includes/functions.php
- táto úprava originálnej funkcie načíta jeden krát z databázy všetky hodnoty a uloží ich do súboru cache/theme_1.php a pri ďalšom načítaní stránky máte o 1 SQL dopyt menej.
## EasyMod 0.3.0 Compatible
##############################################################
## MOD Title: Setup style
## MOD Author: Huli < huli0401@gmail.com >
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################
#
#-----[ OPEN ]------------------------------------------
#
includes/function.php
#
#-----[ FIND ]------------------------------------------
#
function setup_style($style)
#
#-----[ REPLACE WITH ]------------------------------------------
# Nahradíme celú funkciu setup_style
#
function setup_style($style)
{
global $db, $board_config, $template, $images, $phpbb_root_path, $phpEx;
// Start caching
$row = array();
if ( file_exists($phpbb_root_path . 'cache/theme_'.$style.'.' .$phpEx) )
{
include($phpbb_root_path . 'cache/theme_'.$style.'.' .$phpEx);
}
if (sizeof($row) == 0)
{
$sql = "SELECT SQL_CACHE *
FROM " . THEMES_TABLE . "
WHERE themes_id = $style";
if( !$result = $db->sql_query($sql) )
{
message_die(CRITICAL_ERROR, 'Could not query database for theme info');
}
$file_data = '<? ' . '$row = ' . format_array($db->sql_fetchrow($result)) . ' ?'.'>';
$db->sql_freeresult($result);
$handle = fopen($phpbb_root_path . 'cache/theme_'.$style.'.' .$phpEx, 'w');
@flock($handle, LOCK_EX);
fwrite($handle, $file_data);
@flock($handle, LOCK_UN);
fclose($handle);
include($phpbb_root_path . 'cache/theme_'.$style.'.' .$phpEx);
}
// End caching
$template_path = 'templates/' ;
$template_name = $row['template_name'] ;
$template = new Template($phpbb_root_path . $template_path . $template_name);
if ( $template )
{
$current_template_path = $template_path . $template_name;
@include($phpbb_root_path . $template_path . $template_name . '/' . $template_name . '.cfg');
if ( !defined('TEMPLATE_CONFIG') )
{
message_die(CRITICAL_ERROR, "Could not open $template_name template config file", '', __LINE__, __FILE__);
}
$img_lang = ( file_exists(@phpbb_realpath($phpbb_root_path . $current_template_path . '/images/lang_' . $board_config['default_lang'])) ) ? $board_config['default_lang'] : 'english';
while( list($key, $value) = @each($images) )
{
if ( !is_array($value) )
{
$images[$key] = str_replace('{LANG}', 'lang_' . $img_lang, $value);
}
}
}
return $row;
}
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
# by Huli < huli0401@gmail.com >







News
![Validate my Atom 1.0 feed [Valid Atom 1.0]](http://validator.w3.org/feed/images/valid-atom.png)