Non so se questo argomento sia maggiormente appropriato in Tassonomia o Viste.
== PREMESSA ==
Ho un sito con un dato albero di categorie.
si parte da quattro macro categorie:
CAT-A, CAT-B, CAT-C, CAT-D
che hanno delle sotto-categorie, che hanno a loro volta delle sotto-categorie.
== COSA VIENE RICHIESTO ==
una navigazione per categorie dove per ogni pagina di categoria io possa visualizzare i primi 15 elementi della categoria visitata e figlie.
nella pagina principale si vuole un box con 3 elementi presi dalla macrocategoria CAT-A e figli un box per la CAT-B ecc
((per i box in home ho usato delle singole viste (blocco), e poi ho attivato queste viste solo per la home.))
== PROBLEMI DA RISOLVERE ==
il sito risulta molto lento, fatica un po' nell'apertura delle pagine.
E' da dire che ha un sacco di moduli, workflow, taxonomy access control, internazionalizzazione e altri.
ma a me sembra che il problema principale possa essere dato dalla ricorsività delle query utilizzate dalla vista di tassonomia necessario per vedere quali siano gli elementi della categorie figlie con profondità.
Si riesce ad evitare questo massiccio lavoro che mi va ad intasare il DB?
io avevo pensato ad una soluzione, forse un po' carlona, ma non saprei come realizzarla, non tanto per scarsa conoscenza di MySQL/PHP ma di Drupal stesso.
Ovvero, se potessi salvarmi in un campo aggiuntivo la categoria padre del nodo eviterei query ricorsive.
Vorrei sapere se è possibile, al salvataggio o aggiornamento di un nodo, eseguire uno script PHP che determini la categoria padre (CAT-A, CAT-B, CAT-C, CAT-D) in modo da poter fare delle query per i blocchi della home davvero molto più snelli.
Oppure sapete suggerirmi un modo per realizzare la vista richiesta in modo che questa possa essere più leggera ed evitare pesanti ricorsività?
grazie in anticipo per l'aiuto che riuscirete a darmi
vedi views_content_cache
nel mio caso fa molta differenza. Certo, l'efficacia della cache è inversamente proporzionale alla frequenza di aggiornamento dei contenuti.
vedi anche altri sistemi di caching più generici (boost, apc, memcached, etc...)
Certified to Rock
adesso provo il modulo suggerito.
credevo che abilitando la cache all'interno della schermata "prestazioni" bastasse.
adesso ho chiesto al manutentore del server se mi abilita memcached visto che mi sembra un'ottima cosa.
ma al di la dei vari meccanismi di caching volendo "giocare sporco" ed aggiungere un campo ovviamente ridondante ma che mi potrebbe permettere queries più veloci e performanti dici che si potrebbe riuscire?
lato programmazione conosco molto meglio wordpress, e questo fornisce degli aggangi, ad esempio al salvataggio di un post è possibile intercettare l'azione ed eseguire un proprio codice php.
Una cosa del genere potrebbe essere utile, perché farei fare le query ricorsive al salvataggio per poi archiviare il dato finale che mi interessa per le mie query, sarei quindi disposto ad attendere un po' in fase di salvataggio a vantaggio della navigazione.
comunque adesso provo il modulo sugerito e magari riferisco i benefici riscontrati o meno ;)
grazie
Micheke
L'esecuzione di codice al salvataggio di un post la puoi fare ovviamente anche con Drupal. Non so se esistano moduli che già lo fanno, comunque, puoi crearne tu uno che implementi hook_nodeapi sull'evento "presave".
@Pinolo
grazie per il suggerimento, proverò a fare qualche prova di realizzazione di moduli :)