Il negozio è lento: è il negozio o è il server?
Cambi tema, togli moduli e resta lento. Metà delle volte il problema sta sotto, nella macchina. Come distinguerlo senza…
Sabato pomeriggio. Arriva un'email dell'hosting che avvisa che il tuo account è da ore al 100 % di CPU. Apri le statistiche aspettandoti una valanga di clienti e trovi l'opposto: quarantamila pagine viste e zero ordini.
Non è un attacco, non è un modulo rotto, non è il tuo negozio che fa cose strane. È che qualcuno si è messo a percorrere, uno per uno, tutti i filtri del tuo catalogo.
Il tuo negozio ha la ricerca a faccette: taglia, colore, marca, prezzo, disponibilità, e sopra l'ordinamento dei risultati. È ciò che lo rende comodo da usare.
Il problema è che ogni combinazione di quei filtri è un indirizzo web diverso. Taglia M in blu di una marca ordinata per prezzo è uno. Taglia M in blu di quella marca ordinata per novità è un altro. E così con tutte le combinazioni possibili: in un negozio medio vengono fuori centinaia di migliaia; in uno grande, milioni.
I crawler dei social e dei servizi di intelligenza artificiale —quelli di Facebook, quelli di TikTok, quelli di mezza dozzina di aziende di cui non hai mai sentito parlare— hanno deciso che devono vederle tutte. E le chiedono tutte, insieme, senza pause.
Ognuno di quegli indirizzi non è una pagina che hai in magazzino: è una ricerca nuova contro il tuo database.
I filtri del tuo negozio li disegna un modulo preciso, Ricerca a faccette (ps_facetedsearch), quello incluso in PrestaShop dalla 1.7 che ha sostituito la vecchia Navigazione a livelli. Se hai i filtri nelle categorie, ce l'hai attivo.
Riconoscerlo nei tuoi registri è facile: ogni combinazione viaggia nel parametro q dell'indirizzo, con questo aspetto.
/12-magliette?q=Taglia-M/Colore-Blu/Marca-Adidas
Se aprendo il registro degli accessi vedi migliaia di righe con ?q=, tutte diverse e una dietro l'altra, sai già cosa ti sta mangiando la macchina.
Ed ecco perché costa tanto. Quando arriva una di quelle richieste, il modulo non cerca solo i prodotti che rispettano il filtro: ricalcola anche i contatori di tutti gli altri filtri —quel «Blu (12)», «Verde (5)» accanto a ogni casella— e per farlo lancia diverse query di conteggio sulle sue tabelle di indice. Moltiplicalo per un catalogo grande e per migliaia di richieste al minuto.
Due leve che stanno nel modulo stesso e che quasi nessuno tocca, in Catalogo → Ricerca a faccette:
Nessuna delle due risolve il problema da sola, ma entrambe abbassano il costo di ogni colpo prima di toccare altro.
Una ricerca filtrata è una delle operazioni più costose che fa un negozio: deve scorrere tutto il catalogo, incrociare attributi, contare quanti prodotti restano sotto ogni filtro e ordinare il risultato. Un cliente ne fa tre o quattro in tutta la visita. Un crawler ne fa tre o quattro al secondo.
Ed ecco la parte che spiazza tutti: la cache non ti salva. La cache serve quando molti visitatori chiedono la stessa cosa. Qui non si ripete niente: ogni combinazione è unica, quindi sono tutte «prime visite» e arrivano tutte al database.
Il risultato è sempre lo stesso. Le richieste si accumulano, il server resta senza spazio e il negozio smette di rispondere — al robot e al cliente che stava per pagare. Se poi capita in piena campagna, hai pagato pubblicità verso un sito che non si apriva.
Quattro segnali, e se due si sommano è quasi certo:
Se nel frattempo anche il pannello di amministrazione arranca, hai la conferma: non è la parte pubblica, è la macchina satura. Lo raccontavamo in quando la lentezza è del negozio e quando del server.
Questo problema attira parecchie soluzioni popolari che nella pratica non reggono:
Tutte condividono lo stesso difetto: curano il sintomo, cioè il traffico, invece della causa, cioè che il tuo negozio è disposto a fabbricare milioni di pagine diverse a chiunque le chieda.
Quello che regge si costruisce su tre livelli, e nessuno consiste nello spegnere i filtri:
Con questo, di solito il consumo crolla già il primo giorno e il negozio smette di cadere, senza toccare un solo filtro lato cliente e senza perdere posizioni su Google. Anzi: quando smetti di far spendere a Google il suo tempo su quattrocentomila pagine ripetute, inizia a guardare quelle che ti interessano — ed è esattamente ciò che raccontavamo in da dove partire quando non compari.
È un problema antipatico perché non si fa vedere: non c'è un errore da guardare, solo un negozio che certi giorni va e certi no, e un hosting che dà la colpa a te.
Se hai già provato un paio delle soluzioni dell'elenco e sei al punto di prima, scrivici. Guardiamo i tuoi registri, ti diciamo quante di quelle richieste sono reali e quante sono rumore, e ti lasciamo il filtraggio montato e sotto misura. L'abbiamo fatto parecchie volte e si vede dal primo giorno.
Cambi tema, togli moduli e resta lento. Metà delle volte il problema sta sotto, nella macchina. Come distinguerlo senza…
Il negozio è pronto, i prodotti caricati e da Google non entra nessuno. Sono queste le cinque cose che guardiamo…