Guida: Come Ottimizzare vBulletin 4 Forum e vBulletin 4 Suite CMS

Ci sono diversi modi per ottimizzare e velocizzare al massimo il nuovo VBulletin 4, sia la VBulletin Suite CMS che VBulletin Forum. Ecco una guida con i consigli migliori (alcune modifiche sono a vostro rischio e pericolo e non mi assumo alcuna responsabilità).

come ottimizzare vbulletin 4Disabilita Lista Utenti

Vi basta spuntare l’opzione in Impostazioni->Opzioni->Opzioni Lista Utenti (o in inglese: Settings -> Options -> User Listing Options). Visualizzare la lista degli utenti a cosa serve? Serve per vedere chi ha creato più post, chi ha reputazione alta… ma a chi serve vedere questi dati? Sicuramente a ben pochi o nessun utente, mentre per gli spammer è un modo semplice per creare liste di utenti a cui inviare mail di spam! Inoltre aumenterà la richiesta di risorse ogni volta che viene creata una lista, quindi è bene disabilitarla.

Pulisci la Cache

VBulletin 4 ha una cache interna basata sul database che non si pulisce mai ed elementi scaduti nella cache rimangono nel database all’infinito finché non svuoti l’intera cache.

Crea un nuovo plugin (Aggiungi nuovo plugin) e seleziona dalla lista Locazione Hook la voce cron_script_cleanup_hourly e inserisci il seguente codice php che permette di pulire gli elementi non utilizzati nella cache ogni ora:

require_once(DIR . '/includes/class_bootstrap_framework.php');
vB_Bootstrap_Framework::init();
vB_Cache::instance()->clean(true);


Generare la lista di Utenti Attualmente Attivi in modo più efficiente

La lista degli Utenti Attualmente Attivi che viene mostrata in homepage può richiedere davvero tante risorse, specie se avete un numero elevato di utenti connessi. E’ molto meglio usare il tag di vBulletin 4 {vb:each} per generarla. Ecco come modificare il vostro template:

In forum.php cambia questo codice:

$show['comma_leader'] = ($activeusers != '');
$templater = vB_Template::create('forumhome_loggedinuser');
    $templater->register('loggedin', $loggedin);
$activeusers .= $templater->render();

in questo:

$activeusers[] = $loggedin;

e nel template FORUMHOME modifica il codice

{vb:raw activeusers}

in questo:


{vb:stylevar dirmark}{vb:raw loggedin.musername}{vb:raw loggedin.invisiblemark}{vb:raw loggedin.buddymark}


Aumenta la velocità della lista dei Messaggi Privati

Se non hai mai importato i messaggi privati da altre piattaforme con ImpEx o altro, allora puoi tranquillamente utilizzare il PMID per ordinare i messaggi senza che il database debba creare tabelle temporanee per ordinarli.

Crea un nuovo plugin usando come Locazione Hook la voce private_messagelist_filter e inserisci questo codice:

if ($sortfield == 'pmtext.dateline') $sortfield = 'pm.pmid';

Usa in modo più efficiente Memcache Datastore

Se usi Memcache sul tuo server come Datastore, puoi renderlo più veloce utilizzando Datastore Keys multiple in un singolo passo:

In includes/class_datastore.php, all’interno di vB_Datastore_Memcached::fetch() sostituisci il codice

$unfetched_items = array();
foreach ($items AS $item)
{
    $this->do_fetch($item, $unfetched_items);
}

con:


if ($this->prefix) {
    foreach ($items as $item) {
        $items_fetch[] = $this->prefix . $item;
    }
}
else
{
    $items_fetch =& $items;
}
 
$items_found = $this->memcache->get($items_fetch);
$unfetched_items = array_keys(array_diff_key(array_flip($items_fetch), $items_found));
foreach ($items_found AS $key => $data)
{
    $this->register(substr($key, strlen($this->prefix), 50), $data);
}


Questo renderà il vostro Datastore (necessario la visualizzazione di ciascuna pagina) circa il 20% più veloce.

Usa YUI 2.8.2 o superiore

vBulletin 4 usa una versione datata di Yahoo User Interface (versione 2.7.0) quindi non c’è motivo di tenerla quando esiste già la versione aggiornata 2.8.x che è pienamente compatibile e ha  un gran numero di bug fixes.

Per modificarlo basta andare in Impostazioni->Opzioni->Impostazioni Server e Opzioni Ottimizzazione (in inglese Settings -> Options -> Server Settings and Optimization Options) e imposta Utilizza YUI Remoto su Yahoo. Dopodiché modifica il file includes/class_core.php cambiando

define('YUI_VERSION', '2.7.0'); // define the YUI version we bundle

in

define('YUI_VERSION', '2.8.2'); // define the YUI version we bundle

Imposta SQL Mode

Di default l’impostazione per sql_mode è vuota, quindi se non hai dato un’impostazione generale per il tuo MySQL per l’sql_mode, allora puoi commentare tale opzione in includes/init.php:

$db->force_sql_mode('');

in

// $db->force_sql_mode('');

showgroups.php Query Cache

C’è una query in showgroups.php che non scala e diventa sempre più lenta man mano che gli utenti aumentano. Un modo per rimediare è quello di mettere i risultati di tale query nella cache per 6 ore. Cambia queste linee:


// get usergroups who should be displayed on showgroups
// Scans too many rows. Usergroup Rows * User Rows
$users = $db->query_read_slave("
    SELECT user.*,
        usergroup.usergroupid, usergroup.title,
        user.options, usertextfield.buddylist,
        " . ($show['locationfield'] ? 'userfield.field2,' : '') . "
        IF(user.displaygroupid = 0, user.usergroupid, user.displaygroupid) AS displaygroupid
        " . ($vbulletin->options['avatarenabled'] ? ",avatar.avatarpath, NOT ISNULL(customavatar.userid) AS hascustomavatar, customavatar.dateline AS avatardateline,customavatar.width AS avwidth,customavatar.height AS avheight, customavatar.width_thumb AS avwidth_thumb, customavatar.height_thumb AS avheight_thumb, filedata_thumb, NOT ISNULL(customavatar.userid) AS hascustom" : "") . "
    FROM " . TABLE_PREFIX . "user AS user
    LEFT JOIN " . TABLE_PREFIX . "usergroup AS usergroup ON(usergroup.usergroupid = user.usergroupid OR FIND_IN_SET(usergroup.usergroupid, user.membergroupids))
    LEFT JOIN " . TABLE_PREFIX . "userfield AS userfield ON(userfield.userid = user.userid)
    LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON(usertextfield.userid=user.userid)
    " . ($vbulletin->options['avatarenabled'] ? "LEFT JOIN " . TABLE_PREFIX . "avatar AS avatar ON(avatar.avatarid = user.avatarid) LEFT JOIN " . TABLE_PREFIX . "customavatar AS customavatar ON(customavatar.userid = user.userid)" : "") . "
    WHERE (usergroup.genericoptions & " . $vbulletin->bf_ugp_genericoptions['showgroup'] . ")
");
 
$groupcache = array();
while ($user = $db->fetch_array($users))
{
    $t = strtoupper($user['title']);
    $u = strtoupper($user['username']);
    $groupcache["$t"]["$u"] = $user;
}


in


require_once(DIR . '/includes/class_bootstrap_framework.php');
vB_Bootstrap_Framework::init();
if (!$groupcache = vB_Cache::instance()->read('showgroups.groupcache')) {
 
    // get usergroups who should be displayed on showgroups
    // Scans too many rows. Usergroup Rows * User Rows
    $users = $db->query_read_slave("
        SELECT user.*,
            usergroup.usergroupid, usergroup.title,
            user.options, usertextfield.buddylist,
            " . ($show['locationfield'] ? 'userfield.field2,' : '') . "
            IF(user.displaygroupid = 0, user.usergroupid, user.displaygroupid) AS displaygroupid
            " . ($vbulletin->options['avatarenabled'] ? ",avatar.avatarpath, NOT ISNULL(customavatar.userid) AS hascustomavatar, customavatar.dateline AS avatardateline,customavatar.width AS avwidth,customavatar.height AS avheight, customavatar.width_thumb AS avwidth_thumb, customavatar.height_thumb AS avheight_thumb, filedata_thumb, NOT ISNULL(customavatar.userid) AS hascustom" : "") . "
        FROM " . TABLE_PREFIX . "user AS user
        LEFT JOIN " . TABLE_PREFIX . "usergroup AS usergroup ON(usergroup.usergroupid = user.usergroupid OR FIND_IN_SET(usergroup.usergroupid, user.membergroupids))
        LEFT JOIN " . TABLE_PREFIX . "userfield AS userfield ON(userfield.userid = user.userid)
        LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON(usertextfield.userid=user.userid)
        " . ($vbulletin->options['avatarenabled'] ? "LEFT JOIN " . TABLE_PREFIX . "avatar AS avatar ON(avatar.avatarid = user.avatarid) LEFT JOIN " . TABLE_PREFIX . "customavatar AS customavatar ON(customavatar.userid = user.userid)" : "") . "
        WHERE (usergroup.genericoptions & " . $vbulletin->bf_ugp_genericoptions['showgroup'] . ")
    ");
 
    $groupcache = array();
    while ($user = $db->fetch_array($users))
    {
        $t = strtoupper($user['title']);
        $u = strtoupper($user['username']);
        $groupcache["$t"]["$u"] = $user;
    }
 
    vB_Cache::instance()->write('showgroups.groupcache', $groupcache, 360);
}

 

Disabilita la Navigazione Rapida (Quick Nav)

Quanti di voi usano la lista dei forum che compare come menu a tendina in fondo a ogni post e pagina? Praticamente nessuno e disabilitarla salverà molte risorse utilizzate da vBulletin 4 per generarla. Per farlo basta andare in Impostazioni->Opzioni->Impostazioni Generali e mettere no a Utilizza Menù Navigazione Veloce.

Fai molta attenzione ai plugin che installi

Quando installi un plugin per vBulletin 4 fai molta attenzione: potresti aggiungere del codice molto pesante che può generare query e richiedere risorse anche elevate al tuo server. E’ bene quindi testare ogni plugin su un server di prova e monitorare l’utilizzo delle risorse molto attentamente.

GD Star Rating
loading...

Ti può interessare anche: