Ottimizzare e velocizzare WooCommerce per aumentare le vendite.

woocommerce-performance-manutenzione

Se dovessimo parlare delle sfide più impegnative che abbiamo dovuto affrontare, non potremmo sicuramente citare quella di andare ad ottimizzare WooCommerce, per un importante Store come Italydreamdesign.

Il progetto nasce dalla sapiente mano di un’altra agenzia Web, che si trova ad un certo punto della sua vita a dover trovare la giusta soluzione per un ecommerce basato su WordPress e WooCommerce che inizia a mostrare i primi sintomi di lentezza dovuta ad un numero sempre più crescente di prodotti e le relative traduzioni gestite dal famoso plugin WPML

A fronte di ciò ci siamo attivati con una configurazione ben collaudata che ha permesso di ridurre i tempi di caricamento di ogni singola pagina da circa 10 secondi a meno di 2.

É doveroso dire che i risultati raggiunti sono frutto di un buon mix di accortezze tecniche di tipo sistemistico e un’integrazione tramite plugin di WordPress e WooCommerce.

L’hosting proposto infatti è ottimizzato su WebServer NGINX con una precisa ed adeguata integrazione con Memcached, PHP in FPM con Zend OpCache abilitato e un Object Storage in REDIS. Percona Server è stato configurato ad hoc per un caching ottimale delle query al Database e il tutto è stato cachato con Varnish in reverse proxy con le opportune regole di configurazione.

Ricordiamo che la velocità di un ecommerce è fondamentale.

Ciò che molti potevano già intuire come una semplice “sensazione”, è stata confermata da uno studio compiuta da Monitis. Di cosa si tratta? Secondo questa recente indagine statistica, se una pagina web non si carica entro il limite massimo di 30 secondi, il potenziale acquirente esce dalla pagina e cambia anche sito di e-commerce. Ecco perché la velocità è un elemento fondamentale di un e-commerce, più dell’aspetto esteriore e dei servizi offerti.

Se per i navigatori la pagina è lenta, l’acquisto viene abbandonato dal 56% di essi proprio all’atto finale. Addirittura, è sufficiente che gli utenti abbiano anche solo questa percezione, per far sì che tutto il meccanismo si inceppi.

Indicativamente, sono stati calcolati 30 secondi come tempo massimo in cui l’utente è disposto ad aspettare prima di “perdere la pazienza” e di mandare all’aria l’intera operazione. Un tempo che se in un negozio tradizionale può essere considerato brevissimo, non lo è per i negozi online, che fondano parte delle loro caratteristiche essenziali proprio sulla velocità.

Se abbiamo detto che il 56% abbandona l’acquisto dopo 30 secondi di attesa, la rapidità è in generale un fattore fondamentale d’acquisto per l’86% degli utenti. Perché ? Per il semplice fatto che un utente si rivolge a un e-commerce piuttosto che ad un negozio online proprio per la possibilità che offre il primo di garantire un acquisto facile, economico e veloce. Risparmiare tempo in questo caso è un vero e proprio valore. Altri elementi come accessibilità, interattività, usabilità, sono sì importanti, ma vengono in ogni caso al secondo posto rispetto alla velocità.

I dati si rilevano preziosi alla luce del miglioramento del proprio e-commerce: velocizzare il processo di caricamento delle pagine web legate all’acquisto, anche in funzione di picchi di traffico. Un sistema efficiente sotto questo punto di vista, può generare maggiori ricavi anche “indotti” da quei siti che vengono abbandonati a causa della lentezza.

Se siete proprietari un ecommerce WooCommerce non propriamente brillante, o avete il dubbio che ci possa essere degli importanti margini di miglioramento e che dunque vendiate di più, contattateci pure. Sarà nostra premura valutare la vostra situazione e l’esperienza utente per indicarvi la soluzione migliore.

DREAMSNET.IT ha cambiato nome in MANAGEDSERVER.IT azienda specializzata in Hosting WordPress e WooCommerce.

 

Database MySQL, 10 trucchi per migliorarne le performance e la stabilità

 sveliamo dei semplici segreti che molti amministratori di database MySQL usano per migliorare le performance delle proprie basi dati.

wordpress_mysql_backup

Il database è la memoria del nostro sito internet o applicativo e ci permette di offrire contenuti dinamici in tempo reale ai nostri utenti.
Ottimizzare il database del proprio sito internet è un’operazione estremamente complessa e condizionata da tante variabili.

Se gestiamo applicazioni o siti che devono supportare numerosi accessi simultanei oppure gestiamo una base di dati che nel tempo ha assunto una elevata complessità (nell’ordine di qualche centinaia di migliaia di righe) è possibile avere un degrado nelle prestazioni, che di solito può essere risolto generalmente ottimizzando il DB.

Quelli che seguiranno sono 10 trucchi che aiutano a migliorare ed ottimizzare le performance di un DB MySQL e/o Percona Server basato su motore InnoDB (praticamente tutti quelli dei maggiori CMS, come WordPress, Moodle, Prestashop, Magento, Joomla, ecc.).

Parametri MySQL da modificare/configurare per un database performante

1.      Configurare il parametro innodb_buffer_pool_size

Il parametro più importante da modificare immediatamente è innodb_buffer_pool_size ed è quello che indica quanta memoria può essere usata per memorizzare in RAM i dati (e quindi evitare accessi al disco continui). Che valore dare dunque al buffer?

Mettiamo che abbiamo un server su cui risiede sia il webserver che Mysql, con 8 giga di ram: dedichiamo a innodb_buffer_pool_size 4GB

Per essere più chiaro e meno ripetitivo faccio una tabella

TIPOLOGIA DI SERVER RAM A DISPOSIZIONE RAM DA DEDICARE
Webserver+mysql 8GB RAM 4GB RAM
Webserver+mysql 16GB RAM 10GB RAM
DBserver dedicato 6GB RAM 5GB RAM
DBserver dedicato 12GB RAM 10GB RAM
DBserver dedicato 24GB RAM 20GB RAM

2.      Configurare il parametro innodb_log_file_size

Questa proprietà definisce la grandezza massima del file di log per tabelle InnoDB. Pur essendo vero che maggiore è la dimensione, migliori sono le prestazioni, è anche vero che bisogna fare i conti con le dimensioni del server. A seconda di tale considerazione si consiglia un tuning di questa variabile tra i 512 e i 4GB.

3.      Configurare il parametro max_connections

Un numero massimo di connessioni disponibili inferiori al numero di connessioni correnti impedirà agli utenti di accedere al database, rendere il vostro sito inaccessibile e / o lenta. Un numero molto elevato di connessioni disponibili per un numero molto basso di connessioni effettive farà server MySQL richiedono più RAM rispetto effettivamente necessario. Il problema di valori troppo alti (oltre i 1000) è il possibile crash del server che si trova a dover gestire contemporaneamente oltre 1000 transazioni attive.

4.      Configurare il parametro innodb_file_per_table

Questa impostazione serve per indicare a MySQL se si vuole conservare i dati e gli indici in un unico tablespace (impostazione su OFF) o in un file IBD separato per ogni tabella (impostazione su ON). Il consiglio è di impostare il parametro su ON (valore di default per MySQL 5.6) soprattutto se si effettuano operazioni di cancellazione e ricostruzione tabelle od operazioni di compressione, che permettono di recuperare spazio. Evitare però di usare l’impostazione su ON qualora si abbia a che fare con un database dal numero di tabelle davvero elevato (oltre 10 mila).

5.      Configurare il parametro innodb_flush_log_at_trx_commit

Se sembra che InnoDB sia più lento di MyISAM è possibile che questo valore sia stato configurato male. Il default (1) significa che ad ogni commit di una transizione (o statement fuori dalla stessa) necessita di fare flush del log su disco, un’operazione piuttosto costosa se molto frequente. Settare il valore a 2 significa fare il flush del log solo tramite cache del sistema operativo. Il valore 0 è più veloce, ma è rischioso perchè si possono perdere dati durante le transizioni nel caso di un crash di MySQL Server. Anche il valore 2 è rischioso se il sistema operativo va in crash.

6.      Configurare il parametro innodb_flush_metod

Sui sistemi Linux e simili (FreeBSD, Solaris…) c’è inoltre il problema di evitare il doppio buffering e per farlo occorre settare la variabile innodb_flush_method a O_DIRECT. Fatelo se vi accorgete che il vostro sistema swappa più del previsto quando il db è sotto stress.

7.      Configurare il parametro innodb_log_buffer_size

Il default per questa variabile è 1MB e per sistemi con poche transazioni ed un traffico medio potrebbe bastare. Non va settato un valore troppo alto perchè è il buffer è flushato ogni secondo ed esagerare significherebbe sprecare memoria. Solitamente sono più che sufficienti 8-16 MB.

8.      Configurare il parametro query_cache_size

Utile per applicazioni con molti dati in lettura. Valori compresi tra i 256 e i 2048 MB sono i migliori, a seconda della potenza della vostra macchina.
Al momento in cui scrivo le considerazioni valgono per MySQL Server 5.5 (io le ho provate su MySQL Server 5.6) e sono comunque suggerimenti da utilizzare con criterio e in base alle possibilità della propria macchina.

9.      Configurare il parametro log_bin

Attivare il logging binario è necessario sia per far funzionare il server come replica di un database server master, sia se sul server (in configurazione singola) si vuole abilitare il sistema di backup automatico. Logga le istruzioni che scrivono dati in formato binario. L’argomento opzionale deve essere il nome del log. Se non è specificato, verrà usato datadir/’log-basename’-bin o ‘datadir’/mysql-bin (il secondo solo se --log-basename non è specificato). Si raccomanda caldamente di usare --log-basename o specificare un nome file per essere sicuri che la replica non si arresti nel caso in cui il nome host del server cambi.

10.  Configurare il parametro skip_name_resolve

MySQL, per i client che si collegano da remoto, mantiene una cache dove memorizza numero IP, nome host ed altre informazioni. Per far ciò il server tenta una risoluzione DNS IP->host name.
Se i DNS interni alla LAN non forniscono un reverse DNS lookup (PTR records) allora è probabile sperimentare un rallentamento nelle connessioni. Infatti MySQL tenterà ogni volta di reinserire nella cache il nome host, processo inevitabilmente destinato a fallire con un timeout.
Per disabilitare il DNS host name lookup è sufficiente far partire MySQL con l’opzione –skip-name-resolve. Basta modificare il file di configurazione my.cnf o my.ini

Miglioriamo le performance di MySQL Server ottimizzando e riparando le tabelle.

MySQL non ha purtroppo  la sana abitudine di ottimizzare le tabelle qualora ve ne sia bisogno.

Per ottimizzazione delle tabelle si intende la riduzione dei byte in eccesso che si vengono a verificare quando un campo di un qualsiasi record viene modificato oppure quando un record viene cancellato.

Ad esempio, se un campo contiene del testo d occupa 100 byte e poi il campo viene modificato ed occuperà 90 byte, c’è il rischio di trovarsi con 10 byte in eccesso.

Stesso discorso quando un record viene cancellato: se la tabella occupa 1000 byte e viene cancellato un record che ne occupa 150, ci troveremo con una tabella di 850 byte col rischio di averne 150 in eccesso.

MySQL mette a disposizione l’istruzione OPTIMIZE TABLE il cui compito è quello, appunto di ottimizzare la tabella e compattare i dati.

Per far ciò basta usare lo strumento Mysqlcheck, in questo modo:

mysqlcheck u root p autorepair c o nomedatabase

Ottimizzazione WordPress. Come ottimizzare e velocizzare un blog WordPress con una consulenza sistemistica dedicata. Linux Server Hosting per WordPress.

speed-up-wordpress-siteAbbiamo scritto parecchio in questi ultimi due anni che ci ha visto fornire consulenze ad-hoc (a clienti importanti) sull’importanza di avere un blog WordPress veloce e performante e su come raggiungere lo scopo.
Abbiamo scritto dell’importanza di un’installazione Server adeguata ed ottimizzata, dell’importanza di sostituire software come Apache, MySQL, con i più performanti NGINX e Percona Server.
Abbiamo scritto dell’importanza di scegliere un partner adeguato alle esigenze di hosting, relativamente al traffico generato, ai picchi di banda, in rapporto al budget disponibile.
Abbiamo scritto di come sia intelligente utilizzare CDN come Incapsula per migliorare la velocità nella distribuzione di contenuti statici (come le immagini), di come risparmare banda e di come risparmiare connessioni in ingresso che possano gravare in modo negativo sul server e sulle prestazioni.
Abbiamo scritto dell’importanza dei metodi di caching, sia a livello DB (MySQL o Percona Server che sia), sia a livello di CMS, sfruttando ottimi plugin come W3 Total Cache in accoppiata con software di sistema come Memcache o Redis.
Abbiamo scritto sulla possibilità di cachare le pagine statiche tramite un reverse proxy come Varnish.
Altri hanno scritto per noi di come sia importante un caricamento immediato delle pagine web, e di come un solo secondo di ritardo provochi :

  • 11% in meno di pagine visitate;
  • 16% di riduzione nella customer satisfaction;
  • 7% in meno di conversione della visita in acquisto;
  • Il cliente online tipico attende al massimo 2 secondi.

fino ad arrivare all’abbandono del sito dopo aver atteso 5 secondi.

http://www.businesscommunity.it/m/_Marzo2013/fare/Il_successo_delle_vendite_online_si_misura_in_secondi.php

Tutto questo per dire che un Blog WordPress, può e deve usufruire di tutte queste tecnologie disponibili per due scopi essenziali : essere rapido e scattante, reggere migliaia di utenti al secondo.
Il costo è alla portata di tutti, sul lungo termine si arriva spesso al risparmio, in alcuni casi addirittura DECIMANDO il costo di affitto infrastruttura.

Nel frattempo, si sono rivolti a noi per velocizzare il loro sito, clienti come :

e molti altri blog famosi basati su WordPress, coperti da clausola di riservatezza.

Va necessariamente detto, che di norma uno sviluppatore non ha conoscenze specifiche nell’implementare una corretta configurazione e dimensionamento dell’hardware e del software che saranno alla base dell’ottimizzazione del sito in WordPress, per cui se volete realmente fare la differenza, chiedeteci pure una consulenza sistemistica gratuita.

Grazie a competenze specifiche di networking e di sistemistica su Gnu/Linux, nonchè una conoscenza approfondita dei principali fornitori di connettività italiani ed europei, analizzeremo le problematiche attuali, e svilupperemo una strategia ad-hoc da proporvi al fine di garantirvi i migliori risultati al costo più basso, proponendo al contempo un’assistenza continuativa nel tempo grazie a piani di assistenza managed su server VPS, Cloud, o Server Dedicati.

Il vostro blog wordpress vi ringrazierà, ed anche i vostri utenti.

Anche curiosone.tv preferisce l’assistenza server managed Dreamsnet.it.

curiosone-tv

E’ con questo annuncio che Curiosone.tv avvisava i lettori di una problematica tecnica che rendeva inaccessibile il loro visitatissimo sito.

Ciò che sembrava dunque un’operazione di routine era qualcosa di molto più serio. Cpanel infatti (il pannello di controllo del server su cui gira Curiosone.tv), aveva crashato inspiegabilmente, e al riavvio del servizio non voleva saperne di ripartire.

Dunque, contatti online da un loro responsabile ci accordiamo sul da farsi per far ripartire i servizi e valutare delle ottimizzazioni.

Dopo un paio d’ore di test e reinstallazione del pannello, onde che brancolare nel buio è stata presa una scelta drastica : backup Web e DB, switch DNS, formattazione della macchina, reinstallazione sistema operativo (Linux CentOS 6.6), reinstallazione e configurazione servizi, ripristino backup.

Nel fare ciò è stato deciso di unire l’utile al più utile, ovvero reinstallare tutti i servizi sostituendoli con tecnologie più performanti, adatti a siti Web con picchi di visite di oltre 30 mila.

Dunque abbiamo utilizzato questa configurazione :

Rimpiazzo del Webserver Apache con Nginx
Rimpiazzo del vecchio MySQL 5.1 col nuovo Percona Server 5.6
Sostituzione del PHP 5.3 con PHP 5.6 con Zend OpCache abilitato e in modalità PHP-FPM
Sostituzione di plugin di caching di WordPress con W3 Total Cache
Caching DB a livello Memcache

Valutando con l’azienda se installare un Varnish per un caching aggressivo lavorando in reverse proxy con il webserver NGINX, per ora abbiamo ripristinato in una nottata una situazione molto critica, dando inopinabile valore aggiunto in termini di efficienza e performance.