Semplicemente non lo facciamo affatto. Mai. Lo diremo ancora e ancora ma
Caching! = Prestazioni
Il tuo sito deve essere veloce senza l'aggiunta di FPC (o Vernice per questo). Ci sarà sempre un momento in cui il contenuto non è pronto (il tuo scenario sopra).
In un negozio senza carico, i tempi di caricamento della pagina con FPC non dovrebbero essere molto più impressionanti di quelli non FPC; Magento è abbastanza felicemente in grado di < 400ms
caricare la pagina in cache standard (nelle pagine categoria / prodotto / ricerca). FPC lo porterà a < 80ms
- ma viene fornito con avvertimenti.
- Le informazioni su stock / prezzo non sono aggiornate fino alla scadenza o alla scadenza TTL
Nuovi articoli / ricerca più pertinente non sono aggiornati fino all'invalidazione o alla scadenza TTL
eccetera.
Perché fare affidamento su FPC (o vernice) è una cattiva idea
Se stai cercando di assicurarti continuamente che le cache siano caricate manualmente, probabilmente ci sono alcuni motivi
- Non hai abbastanza footfall naturale per mantenere le cache innescate (vedi 'Dove FPC è utile')
- Il tuo sito è troppo lento senza di loro
Non puoi memorizzare tutto nella cache
Se prendi un negozio con solo 5 categorie, 2 livelli annidati in profondità, 5 attributi filtrabili, 5 opzioni di attributo ciascuno e 1000 prodotti; sono molte le combinazioni possibili.
25 opzioni tra cui scegliere, scegliendone una fino a 5 volte di seguito - Non sono uno statistico , ma sono consapevole che è ... (supponendo che il numero di opzioni di attributo non diminuisca completamente)
25 possible URLs on the first selection
20 possible URLs on the second selection
15 possible URLs on the third selection
10 possible URLs on the fourth selection
5 possible URLs on the fifth selection
5^5 = 3,125 possible combinations (for top level categories)
5^4 = 625 possible combinations (for 2nd level categories)
Ok, quanto sopra non è uno scenario probabile, come immagino, entro 3 clic: il numero di prodotti disponibili sarebbe diminuito sufficientemente per consentire al cliente di trovare il proprio prodotto. Quindi anche se fosse ...
25 possible URLs on the first selection
10 possible URLs on the second selection
3 possible URLs on the third selection
5^3 = 125 possible URL combinations
Quindi moltiplicalo per 5 categorie, ovvero 625 URL. In questa fase, stiamo parlando di un piccolo catalogo e ignoriamo completamente tutti gli URL del prodotto.
Inoltre non stiamo prendendo in considerazione il fatto che se avessi categorie nidificate con is_anchor
on, aumenterà esponenzialmente.
Quindi, per scansionare quel volume di pagine - o devi sperare che i tempi di caricamento della tua pagina siano carini e bassi, in modo che sia un processo leggero e veloce (sconfiggendo così lo scopo della scansione) - o che tu abbia abbastanza tempo per il completamento prima della scadenza del TTL.
Se le tue pagine avevano un tempo di caricamento della pagina di 0.4s e avevi una CPU a 8 core - allora ...
625 * 0.4 = 250 / 8 = 31 seconds
0,5 minuti, non male, ma immaginiamo che tu abbia avuto tempi di caricamento della pagina 2s
625 * 2 = 1250 / 8 = 156 seconds
Ma se hai preso il massimo scenario possibile
3,750 * 2 = 7,500 / 8 = 937 seconds ~ 15 minutes
Questo è il tuo server di produzione, con un carico della CPU inferiore al 100% per 15 minuti. Riduresti la velocità di scansione in proporzione al TTL che desideri.
Quindi, se si desidera che il contenuto abbia un TTL 3600, la ricerca per indicizzazione potrebbe essere 4 volte più lenta, ad es. solo il 25% di CPU dedicata alla ricerca per indicizzazione. Questa è molta risorsa solo per mantenere il contenuto della categoria innescato - non abbiamo nemmeno preso in considerazione prodotti, termini di ricerca o visualizzazioni aggiuntive del negozio in questa fase
In effetti, solo osservando la mera dimensione delle combinazioni nella catalog_url_rewrites
tabella (che non include nemmeno il factoring nei parametri della navigazione a più livelli), avrai un'idea di quanti URL potresti finire per dover eseguire la scansione.
Ogni negozio sarà sicuramente diverso, ma quello che sto cercando di colpire a casa è che la scansione del sito per innescare FPC non è pratica. Assicurati solo che il tuo negozio sia veloce per cominciare .
Dove FPC è utile
Dove i vantaggi dell'FPC entrano in gioco è in un negozio pesantemente carico - dove hai livelli di traffico davvero elevati e le cache sono innescate in modo naturale e continuo dalla sola caduta del piede.
FPC entra quindi in gioco riducendo le spese generali dell'infrastruttura sui contenuti comunemente richiesti - riducendo quelle ripetute chiamate al backend Magento.
Quindi abbiamo scoperto che FPC è ottimo da distribuire quando si hanno livelli di traffico molto elevati, non per ridurre il tempo di caricamento della pagina, ma per ridurre l'utilizzo delle risorse.
Chi se ne frega, voglio ancora gattonare
Bene, allora hai due opzioni
- Scansione da un modello (ad es. Sitemap)
- Estrai i collegamenti pagina per pagina ed esegui la scansione di ciascuno
E ci sono molte utility per fare entrambe queste cose, queste sono alcune che conosco
- MAGE-perftest
- HTTrack
- Nutch
- Sphider
- Crawler4j
Usando Mage-Perftest
Puoi eseguire la scansione del tuo negozio con Mage-Perftest abbastanza facilmente, prima scaricalo
wget http://sys.sonassi.com/mage-perftest (64bit) OR
wget http://sys.sonassi.com/mage-perftest-i386 (32bit)
chmod +x http://sys.sonassi.com/mage-perftest*
Quindi definisci il processo di ricerca per indicizzazione utilizzando la Sitemap Magento (puoi personalizzarla creando una Sitemap di qualsiasi URL, a condizione che gli URL siano racchiusi in <loc></loc>
tag). Il comando seguente leggerà tutti gli URL dal file Sitemap, quindi eseguirà la scansione (solo PHP) degli URL nel corso di 1440 minuti (1 giorno). Se il server supera il 20% di CPU o una media di carico pari a 2, la ricerca per indicizzazione si interromperà temporaneamente.
./mage-perftest -u www.example.com -s www.example.com/sitemap.xml -r auto -b -d 1440 -z -a 20 -l 2
Se hai 1000 URL, sottoposti a scansione per 1 giorno, saranno circa. 1 richiesta ogni 86 secondi (s) ~ target di 0,011 RPS