Come probabilmente si sa già, Google ha incominciato ad utilizzare il Web Search Ranking per valutare la velocità e le prestazioni dei siti internet, e ciò è una buona notizia. La velocità del proprio negozio/sito è fondamentale e non solamente per Google ma per tutti i visitatori del nostro sito internet. Una ricerca di Google e Microsoft mostrano che i siti web lenti hanno una conversione dei visitatori in clienti (ROI) molto bassa e questo è l'effetto di un sito internet o di un negozio non ben gestito.

Molti siti internet vengono ottimizzati per i motori di ricerca con lo studio di parole chiave che permettono una migliore posizione nella lista dei risultati. Tale pratica è errata perchè tende a modificare la naturale struttura delle informazioni contenute nel sito internet non considerando che tale ottimizzazione deve essere effettuata a favore dei propri potenziali clienti e non sulla base dei motori di ricerca.

Niente di nuovo fino adesso, ma riguardo alla velocità di Magento, cosa possiamo fare?

Se si è dei seri commercianti non si può far altro che scegliere Magento con le sue funzionalità e la sua flessibilità nello sviluppo ma come molti lamentano Magento usa moltissime risorse ed è molto lento. Ciò si traduce in una cattiva esperienza degli utenti.

Il presente articolo è stato tradotto dall'inglese e sono state apportate delle migliorie legate all'aggiornamento del progetto. L'articolo originale si trova al seguente link.

Sebbene molte di queste lamentele non sono spesso gentili (naturalmente il negozio è lento se viene mantenuto in un piano hosting economico insieme ad altri 200 siti web!) sappiamo che Magento non è tra i più veloci della sua categoria di software. Ecco i motivi per cui proponiamo la seguente lista:

Impostazioni Server

  1. Scegli un Server Dedicato
  2. Stabilisci il negozio dove dove si trova la maggioranza della clientela
  3. Non mantenere files sul server web non utilizzati, grandi o piccoli.
  4. Ottimizza e ripara su MySQL Admin tutte le tabelle del database
  5. Utilizza un acceleratore come APC, ZendOptimizer+ o Xcache
    1. APC: Aumentare il parametro APC.shm.size a circa 128 per consentire la registrazione di più dati in cache da apc.
    2. Xcache: http://xcache.lighttpd.net/
  6. Installare solamente i moduli Apache necessari
  7. Utilizzare il modulo mod_expires ed assicurarsi di impostare il tempo di cache desiderato. Ecco un esempio di virtualhost: https://gist.github.com/4647524
  8. Abilitare la funzionalità di compressione Gzip nel htaccess
  9. Comprimere l'output, utilizzare zlib.output_compression oppure mod_deflate
  10. Utilizzare un Content Delivery Network (CDN) per la gestione dello scaricamento dei files statici in parallelo. C'era un'estensione gratuita su Magento Commerce che assolveva a tale funzionalità, speriamo nel suo aggiornamento, il suo nome è One Pica Image CDN ma .... (vedi prossimo suggerimento)
  11. Non utilizzare troppe risorse esterne (immagini, iframes, social network (facebook, twitter, ecc), feeds in genere) perchè ogni risoluzione del dns richiede più tempo creando un'ulteriore dipendenza, ai server esterni al proprio negozio.
  12. Abilitare il modulo Apache KeepAlives: Assicurarsi che tale opzione sia attiva. KeepAlives permette di incanalare molteplici richieste in una sola connessione TCP. La richiesta di connessione via TCP richiede ulteriore tempo, questo significa che si potrà ridurre il tempo di attesa di download di tutti i files (HTML, Javascript, Immagini) da un sito web. Per ulteriori informazioni si raccomanda di leggere questa guida. Fare attenzione a tale funzionalità perchè nei casi di maggiore affluenza di visitatori durante la giornata, il server potrebbe collassare e bloccarsi.
  13. Minimizza il redirect
  14. Ottimizza il codice HTML rispettando le regole W3C.
  15. Scegli NginX o Litespeed al posto di Apache. Se questo non è possibile prediligi Zend Server (versione non Community Edition CE così sarà possibile usare la cache)
  16. Disabilitare o al massimo ridurre i log del server (riduce la scrittura sul disco)
    1. Disabilitare Access Time Logging
  17. Compila MySQL usando i sorgenti piuttosto che usare il package manager.
  18. Aggiornare sempre Magento all'ultima versione non solo per avere le ultime funzionalità, per la correzione deglie errori e per la sicurezza dei dati ma anche per le prestazioni
  19. Query Cache: Modificare la configurazione del server MySQL per utilizzare al meglio la RAM del server. Molte distribuzioni linux provvedono alla possibilità di configurare il file my.cnf con dei parametri che consentono di utilizzare più RAM durante le operazioni di recupero dei dati. Tale operazione è consigliata a chi ha più di 1 GB di RAM a disposizione nel proprio server. Per ulteriori informazioni: my.cnf.
  20. Impostare il parametro php_value_memory_limit 128M nel file di configurazione php o nel file .htaccess ed assicurarsi di non esagerare, potrebbe causare un blocco del server.
  21. Utilizzare la modalità memory-based filesystem per registrare i dati di var/cache, var/session su RAMdisk o tmpfs, in questo modo la scrittura nel disco si ridurrà.
  22. Modificare il parametro nel php.ini: realpath_cache_size in
    1. realpath_cache_size=1M (attenzione, questo valore è per singolo processo apache) realpath_cache_ttl=86400 (ok per i siti in produzione)
  23. Utilizzare Memcache. Ecco la documentazione: Magento Commerce Forum oppure http://alexle.net/archives/275
  24. Disabilitare il parametro open_basedir. Ecco la documentazione: http://blog.nexcess.net/2010/03/31/php-open_basedir-and-magento-performance/
  25. Eliminare le impostazioni Directory dal file .htaccess ed inserirle nel virtualhost di apache
  26. Impostazioni raccomandate per il parametro innodb_buffer_pool_size:
    1. Web e Db in un solo server: 6GB RAM a disposizione: 2GB da dedicare al Web e 3GB al DB
    2. Server database dedicato, 6GB RAM: dedicarne 5GB per il DB
    3. Server database dedicato 12GB RAM: dedicarne 10GB per il DB
  27. Impostare il parametro innodb_thread_concurrency calcolando: 2 * [numeroCPU] + 2
  28. Query Cache: query_cache_size: 64MB, query_cache_limit: 2MB
  29. Utilizzare un server separato per gestire gli utenti amministratori di Magento (iperstore)
  30. Utilizzare nodi web multipli per gestire velocità di visualizzazione del catalogo ed acquisto. (iperstore)
  31. Utilizzare Vanish reverse proxy caching per iperstore da 4M di visite/giorno (iperstore)
  32. Se il negozio viene continuamente letto dai motori di ricerca attraverso i BOT impostare il file robots.txt
  33. Provare alcune di queste soluzioni per gestire la cache di magento:
    1. http://www.artio.net/magento-extensions/m-turbo-accelerator
    2. http://www.aitoc.com/en/magento_booster.html
    3. http://www.tinybrick.com/magento-modules/performance.html/

Impostazioni del Template

  1. Ottimizzare tutte le immagini usate in Magento. Molte e non tutte dovrebbero essere al massimo di 10Kb.
    1. Eliminare lo spazio binco utilizzando photoshop o gimp
    2. Utilizzare files PNG8 oppure GIF piuttosto che Jpg. Non utilizzare le trasparenze (ovviamente dipende dalle immagini e dalla loro dimensione ma l'importante e tendere verso questa direzione)
    3. Ridimensionare le immagini: realizzare le immagini per la reale dimensione desiderata nel proprio negozio e non ridimensionare l'immagine nel WYSIWYG di Magento (editor di testi di Magento)
    4. Utilizzare un compressore immagini come smush.it
    5. Utilizzare la tecnica CSS Sprites, ci sono moltissimi generatori online
  2. Minimizza il file CSS eliminando codice non utile e non utilizzato.
  3. Minimizza il file javascript utilizzato
  4. Utilizzare un template leggero come base per la progettazione del proprio template. Per esempio Yoast
  5. Specificare sempre le dimensioni delle immagini nel template e negli articoli CMS
  6. Utilizzare l'opzione Block Cache e HTML Output nell'estensioni.
  7. Utilizzare il metodo Lazy Loader per Javascript
  8. Studiare il manuale tecnico per Designers a disposizione al seguente link

Configurazione Generica Magento

  1. Disinstallare tutte le estensioni non utilizzate
  2. Disabilitare tutti i moduli non utilizzati da Sistema > Configurazione > Avanzate > Avanzate
  3. Abilitare la Cache di Magento da Sistema > Gestione Cache
  4. Utilizzare un gestore per le statistiche come Google Analytics e non altri servizi che richiedono il Javascript connesso ad un server esterno.
  5. Utilizzare la Compressione CSS e la Compressione Javascript in un unico file direttamente da Sistema > Configurazione > Avanzate > Sviluppatore > Impostazioni Javascript ed impostazioni CSS.
  6. Utilizzare / Testare una delle estensioni per la gestione delle performance proposte direttamente dal Magento Connect
  7. Abilitare il Flat Catalog in magento, utile solamente per cataloghi molto grandi
  8. Non utilizzare la modalità Layered Navigation (Categorie) se proprio se ne può fare a meno. Richiede molte risorse.
  9. Utilizzare la compilazione del codice Magento per migliorarne le prestazioni. Alcune estensioni bloccano l'impostazione di tale funzionalità. L'impostazione è possibile farla da Sistema > Strumenti > Compilation. Yoav Kutner CTO di Magento informa che nella nuova versione di magento sono state effettuate molte migliorie della sezione catalog EAV e la modalità Compilation potrebbe essere superflua se nel proprio server è stato ben configurato il Byte Code Caching.
  10. Utilizzare la corretta registrazione dei dati di sessione. Durante l'installazione al 99% viene indicata la scelta di registrare tutte le informazioni nel filesystem sotto forma di file e non nel database per l'ovvia ragione di non sovraccaricare il server database. Se il negozio è gestito da più server è molto utile impostare come destinazione dei file di sessione il database così da consentire ai prorpri utenti di essere serviti direttamente dal server a cui viene effettuata la richiesta. Per maggiori informazioni http://www.aschroder.com/category/magento/
  11. Limitare il numero di prodotti consigliati/suggeriti/alternativi presenti nella pagina del prodotto
  12. Impostare solamente gli attributi dei prodotti necessari ed utilizzati nel frontend. Non impostare gli attributi nel Quick Search, Ricerca avanzata e/o confronto fra prodotti se non realmente necessario. Impostare i rimanenti attributi come non visibili nel frontend. Catalogo > Attributi > Gestione Attributi > Frontend Properties.
  13. Disabilitare i LOG di Magento se non necessari durante le fasi di test: Sistema > Configurazione > Avanzate > Sviluppatore > Impostazione Log (disabilitate di default)

 Misurare le Prestazioni

  1. Effettuare un test del tuo negozio Magento usando il tool Magento Speed Site
  2. Eseguire un test utilizzando il Tool WebSiteOptimization
  3. Utilizzare Google Page Speed Firefox extension oppure Yahoo Yslow
  4. Implementare il controllo di Google Speed in Analytics: Misurare il caricamento della pagina con Site Speed Analytics Report
  5. Controllo delle performance di MySQL correggendo la configurazione di default con Tuning Primer (Solo Esperti)
  6. Controllo sulla velocità e sugli eventuali down con
    1. Mon.itor.us
    2. Pingdom