• Home
  • Info
  • Non per babbani (solo sviluppatori)

Al di là della cache: ripensare i componenti

Considerazioni su com_content, e sui moduli di Joomla!

Il core di Joomla è solido e ben documentato, la cache efficiente.

Questo però non vale per tutti i componenti e moduli, anche quelli distribuiti con Joomla.

Le molte opzioni disponibili permettono una estrema versatilità; tuttavia richiedono join di tante tabelle, anche quando non strettamente necessario. Magari al vostro componente non serve conoscere per ciascun articolo il nome della categoria, piuttosto che il nome dell'autore, eppure le tabelle vengono incluse, rallentando il tempo di elaborazione.

Con qualche migliaio di articoli il problema diventa evidente: mod_category_articles impiega mezzo secondo, mod_related può richiederne uno su un server piccolo.

Con la cache abilitata, questo accade solo per alcune richieste; tuttavia è tempo che si può risparmiare!

I componenti ed i moduli “High Performance”

Per i moduli che usano il modello di Joomla “article”, la soluzione più veloce da implementare è sostituire il modello con una query SQL tagliata sulle nostre esigenze.

Questa attività richiede:

  • sostituire il modello con un oggetto generato da una query

  • verificare che il sistema di cache funzioni.

Negli anni abbiamo trovato che la gestione degli articoli correlati è uno dei punti critici per le performance di un sistema. Per aumentare il tempo di permanenza sul sito molti tendono a riempire di correlati, tag clouds ecc.

L'istruzione di selezione “standard” che usano tutti i componenti per ricercare i correlati (o anche semplicemente per fare una ricerca sul testo) è una query sql con la clausola

where CONCAT(“,”,a.keywords,”,”) like '%,parola,%' complicata ulteriormente in vario modo per rimuovere gli spazi, e ripetuta per ciascuna parola chiave.

Ripetere per 1000 articoli è già doloroso, ma se si arriva a 10000... il risultato è inaccettabile.

Fortunatamente MySQL mette a disposizione altri meccanismi che permettono query notevolmente più veloci grazie all'uso di indici full-text: questo è il primo requisito per avere un comportamento veloce di queste query. E ha il vantaggio aggiuntivo di mettere i risultati in ordine di corrispondenze trovate: quindi

  • Risultati più calzanti

  • e più in fretta!

Perché nessun componente segue questo approccio?

Facile a dirsi: farlo richiede di fare una modifica al database che potrebbe essere proibita da qualche soluzione di hosting, e che comunque non è standard.

L'approccio dei moduli FasterJoomla

Nel pannello amministrativo di ciascuna delle estensioni FasterJoomla si trova un tasto che permette di applicare le modifiche al database necessarie per utilizzare query “veloci”. I componenti ed i moduli HPJ controllano la configurazione del database e usano il sistema ad alta efficienza solo se il database è configurato per supportarli, altrimenti fanno rollback a soluzioni “standard”.

Tags: Joomla Cache