Tag: Query

Velocizzare Wordpress (ma non solo) lato server con APC

“Wordpress è una piattaforma leggera e performante”. Vero. Cosa succede però se installiamo una decina di plugin super-fighi oppure il nostro tema troppo-web-2.0 (dove il requisito per essere 2.0 è di fare più di 100 query al database per aggregare gli stessi dati in 800 modi diversi)?

Esistono diverse regole di profilassi meno drastiche della soluzione che vi proponiamo in questo post e se non le avete ancora provate, o semplicemente non sapete di cosa diavolo stiamo parlando, vi esortiamo a dare un’occhio su google ai numerosi tutorial che trattano questa tematica. Se invece siete utenti più smaliziati, oppure le avete provate tutte e rischiate il posto di lavoro, quello che fa per voi si chiama APC.

APC è l’acronimo di Alternative PHP Cache ed è un sistema di caching del bytecode di PHP che viene distribuito sotto forma di estensione di PHP ed è incluso nel pacchetto PECL (verrà incluso di default nel core di PHP a partire dalla versione 6).

APC permette di immagazinare in cache le porzioni di codice PHP che vengono eseguite più frequentemente. L’impatto sulle performance è rilevante (kifulab.net è passato da 1.2 secondi a 0.7 secondi come tempo di generazione dell’homepage) e se usato insieme ad altre tecniche di ottimizzazione può dare molte soddisfazioni soprattutto se usato su siti ad alto traffico.

Per installare APC è necessario disporre degli accessi al server come amministratore e di avere un minimo di dimestichezza con apache e i file di configurazione di PHP.

Da riga di comando basta soltanto digitare:

pecl install apc

Pecl si occuperà di installare, compilando, l’estensione di PHP (se non avete PECL installato dovete installare il pacchetto php-devel).

Nel file php.ini (tipicamente collocato in /etc/php.ini) cercate la sezione dedicata alle estensioni e inserite la seguente riga di codice

extension=apc.so

Et voilà, abbiamo finito. Riavviate apache

/etc/init.d/httpd restart

E il gioco è fatto. Ovviamente l’estensione ha diverse configurazioni per le quali vi rimando alla documentazione ufficiale.

{ Nessun Commento }

Il loop di Wordpress con query SQL personalizzate

Il Codex di Wordpress, si sa, è una miniera inesauribile di informazioni per usare al meglio questo potente strumento di pubblicazione. Una delle funzioni più importanti e potenti (e meno documentate) a mio avviso è la funzione setup_postdata.

Grazie a questa funzione è possibile utilizzare delle query SQL personalizzate per ottenere delle viste dati che il classico loop di Wordpress non sarebbe in grado di gestire. Per utilizzare questa funzione è necessario modificare la classica struttura del loop di wordpress facendolo diventare simile a questo:

posts wposts, $wpdb->postmeta wpostmeta
	WHERE wposts.ID = wpostmeta.post_id
	AND wpostmeta.meta_key = 'tag'
	AND wpostmeta.meta_value = 'email'
	AND wposts.post_status = 'publish'
	AND wposts.post_type = 'post'
	ORDER BY wposts.post_date DESC
	";
 
	// # Estraiamo i dati tramite la classe db di Wordpress
	$pageposts = $wpdb->get_results($querystr, OBJECT);
 
?>
<div class="entry"></div>
<h2 class="center">Oooops</h2>
D'oh! dove diamine sono gli articoli?

Vediamo come funziona il tutto in dettaglio:
1. Scriviamo la nostra fantastica ed utilissima query SQL
2. Creiamo il nostro oggetto “$postdata” usando la classe layer di gestione database integrata in Wordpress
3. Modifichiamo il loop in modo da sostituire il while con un foreach e chiamiamo ad ogni iterazione la funzione setup_postdata prima di gestire/stampare qualunque dato

Per i campi standard del post ovviamente sarà possibile usare le funzioni template classiche di Wordpress (the_content, the_title, the_time etc) mentre per richiamare i campi non standard (quelli estratti tramite la nostra query personalizzata) sarà sufficiente usare le proprietà dell’oggetto $post (esempio $post->mio_campo_estratto_con_la_custom_query)

Approfondimenti:
http://justinvincent.com/docs/ezsql/ez_sql_help.htm [English]
http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query [English]

{ 2 Commenti }