0
Colabora:               Web Performance                para WordPress                      Javier Casares                 ...
Javier Casares   •   Internet 1995          •   Barcelona 1979   •   Web 1997               •   javiercasares.com/wpo   • ...
Preparación   • WordPress es potente pero viene muy mal     configurado.   • Antes de lanzarlo hay que preparar bastantes ...
Apache Virtual Host<VirtualHost aaa.bbb.ccc.ddd:80>  RewriteEngine On  RewriteOptions Inherit  ServerAdmin root@example.co...
Apache Virtual Host  <IfModule mod_expires.c>    ExpiresActive on    ExpiresDefault "access plus 1 hour"    ExpiresByType ...
Apache Virtual Host  <IfModule mod_deflate.c>    DeflateCompressionLevel 9    <FilesMatch ".(js|css|php)$">      SetOutput...
Virtual Host estáticos<VirtualHost aaa.bbb.ccc.ddd:80>  RewriteEngine On  RewriteOptions Inherit  ServerAdmin root@example...
Virtual Host estáticos  <IfModule mod_deflate.c>    DeflateCompressionLevel 9    <FilesMatch ".(js|css|php)$">      SetOut...
Preparación   • Ficheros “tamaño 0”:       – /.htaccess       – /sitemap.xml       – /robots.txt   • Carpetas “no existent...
.htaccess   • Control de hostname (si-www / no-www).   • Filtrado de peticiones a ficheros directos (sin     pasar por el ...
.htaccessRewriteEngine OnRewriteBase /RewriteCond %{HTTP_HOST} !^javiercasares.com$ [NC]RewriteRule ^.*$ http://javiercasa...
sitemap.xml   • Se puede dejar inicialmente en blanco (se     actualizará mediante un plugin).   • Ha de tener permisos de...
robots.txt   • Hay que crear un fichero “físico” y no dejar     que el sistema lo virtualice.   • Indicaremos la localizac...
robots.txtSitemap: http://javiercasares.com/sitemap.xmlUser-Agent: *Disallow: /blog/*/feed/Disallow: /blog/*/trackback/Dis...
Configuración   • El fichero <wp-config.php> se puede mejorar     mucho con muchas opciones:       – Configuración de BDD ...
wp-config.phpdefine(DB_NAME, javiercasares);define(DB_USER, javiercasares);define(DB_PASSWORD, xxxxxxxxxxxxxx);define(DB_H...
wp-config.phpdefine(WPLANG, es_ES);define(WP_CACHE, true);define(WP_POST_REVISIONS, false);define(AUTOSAVE_INTERVAL,120);d...
wp-config.phpdefine(FS_METHOD, direct);define(FTP_BASE, /web/javier/);define(FTP_CONTENT_DIR, /web/javier/wp-content/);def...
Instalación   •   Subimos los ficheros por FTP (o como sea).   •   Entramos en el panel de instalación.   •   Instalamos. ...
Administración   • Que nadie se pueda registrar (al menos en     general será así).   • WordPress corregirá de forma autom...
Administración   • No tener comentarios anidados (y si se tienen,     no más de 2 niveles de recursividad).   • No paginar...
Administración   • Los enlaces permanentes pueden ser:       – /%postname%/   • Desde la versión WordPress 3.2.x, el siste...
Multimedia   • Hay 2 opciones:       – Usar la carpeta /wp-content/       – Usar un dominio para estáticos   • Un dominio ...
Multimedia   • Carpeta para los ficheros:       – /web/static   • Ruta para los ficheros:       – http://examplestatic.net...
Plugins Generales   • Akismet       – Sistema antispam de los creadores de WordPress.       – http://wordpress.org/extend/...
Plugins Generales   • Limitador de intentos de login       – Bloquea ataques de acceso al panel de         administración ...
Plugins Generales   • WordPress Backup to Dropbox       – Genera una copia de todo el WordPress en         Dropbox.       ...
Plugins SEO   • All in One SEO Pack       – Hay que configurarlo bien para que no entre en         conflicto con otros plu...
Plugins SEO   • OpenGraphProtocol (no repositorio)       – Genera encabezados para Open Graph Protocol         (Facebook)....
Plugins Mantenimiento   • Better Delete Revision       – http://wordpress.org/extend/plugins/better-delete-revision/   • D...
Plugins WPO   • WP caché       – ¿Dónde está Ricardo Galli cuando se le necesita?       – https://dl.dropbox.com/u/1996407...
Plugins WPO   • Lazy Load       – Gracias a jQuery, carga las imágenes de forma         asíncrona, cuando el usuario las v...
Plugins WPO   • WP Smush.it       – Optimiza los contenidos multimedia cuando se         suben al panel.       – http://wo...
Plugins WPO   • WP Minify       – ¿Dónde estás?       – Selecciona TODOS los CSS y los JS (otros plugins         sólo los ...
Plugins WPO   • WP Parallel Loading System       – Permite automatizar el Domain Sharding de         imágenes.       – htt...
Cuando tu ISP no te permite tocar   • En muchos casos no podemos optimizar     recursos de los servidores (Apache, PHP,   ...
Varnish   • ¡Haz que tu web vuele! http://www.varnish-cache.org/   • Web-Proxy + caché   • Sirve para WordPress y para cua...
Varnish   • Configurar el VCL       – Tiempos de gracia de media hora a un día.       – Elimina cookies y codificaciones. ...
Varnish   • VCL para WordPress   if (req.url ~ "/wp-admin/css/" || req.url ~ "/wp-admin/images/"   || req.url ~ "/wp-admin...
Varnish   set req.http.Cookie = regsuball(req.http.Cookie,   "comment_author=[^;]+(; )?", "");   set req.http.Cookie = reg...
Varnish   if (req.url ~ "/xmlrpc.php"){     return(pipe);   }   if (req.url ~ "/wp-config.php"){     return(error);   }   ...
Varnish y las IP   • Varnish es un Web-Proxy, así que al servidor     web no le llega la IP del usuario, sólo la del     V...
Varnish y las cachés   • Si cacheo y actualizo mi página… ¿qué?   • WordPress Varnish as a Service Plugin       – Informac...
Pruebas   • La máquina VPS:       – 1 GB / 4 GB / 256 MB de RAM       – 8 CPU (100% / 12,5% cada una)       – MySQL 5.5   ...
Pruebas   • Las herramientas:       – http://www.webpagetest.org/           •   Frankfurt, DE           •   IE 9          ...
Pruebas   • Las herramientas:       – http://loadimpact.com/           •   100 Usuarios           •   10 Minutos          ...
Pruebas   • Las herramientas:       – ApacheBenchmark (ab)           • ab -k -n 5000 -c 250 http://example.com/           ...
Primer Byte recibido                    no cache        si cache        si cache                    no varnish      no var...
Inicio de Render                    no cache        si cache        si cache                    no varnish      no varnish...
Tiempo de Carga                    no cache        si cache        si cache                    no varnish      no varnish ...
Carga completa                    no cache        si cache        si cache                    no varnish      no varnish  ...
Waterfall (no cache – no varnish)#webperf   @WebPerfES
Waterfall (sí cache – no varnish)#webperf   @WebPerfES
Waterfall (sí cache – sí varnish)#webperf       @WebPerfES
Tiempo Carga (no cache – no varnish)#webperf   @WebPerfES
Tiempo Carga (sí cache – no varnish)#webperf   @WebPerfES
Tiempo Carga (sí cache – sí varnish)#webperf   @WebPerfES
Connect Time (ms)                    no cache       si cache       si cache                    no varnish     no varnish  ...
Processing Time (ms)                    no cache       si cache         si cache                    no varnish     no varn...
Waiting Time (ms)                    no cache       si cache         si cache                    no varnish     no varnish...
Total Time (ms)                    no cache       si cache         si cache                    no varnish     no varnish  ...
Conclusiones   • Es básico activar la caché interna de     WordPress.   • Para un sitio “normal” es suficiente con eso,   ...
No se vayan todavía, aún hay más…   • VPS       – 8 GB       – 8 CPU (100% - 12,5% x CPU)       – Varnish en memoria (5 GB...
Abusando de Varnish   Peticiones simultáneas             100       1000       2500       5000   Time taken for tests (s)  ...
Posibles mejoras   • MySQL con innoDB (total, las próximas     versiones de MySQL sólo serán innoDB).   • Tablas relaciona...
Sentido Común   • No seamos más papistas que el Papa.   • Hagamos un mix para encontrar la fórmula     que mejor se adapte...
Consultoría   • Si a alguien le interesa y no quiere pringar:              Puesta a punto de WordPress       Instalación, ...
Colabora:    ¡Gracias!Ahora es el momentode ponerme a caldo…
Upcoming SlideShare
Loading in...5
×

Webperf wordpress

2,222

Published on

"Web Performance para Wordpress" es una presentación de Javier Casares pronunciada en La Salle Campus Barcelona el 26 de abril de 2012. Esta es una de las sesiones sobre #webperf que organiza Javier Casares en colaboración con nuestro centro universitario. Se pueden seguir en directo a través del canal Livestream de La Salle BCN: http://new.livestream.com/LaSalleBCN

Published in: Education
1 Comment
2 Likes
Statistics
Notes
  • Excelente ponencia sobre WPO (WordPress). Gracias Javier
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
2,222
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
69
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Webperf wordpress"

  1. 1. Colabora: Web Performance para WordPress Javier Casares javier@casares.org#webperf @WebPerfES
  2. 2. Javier Casares • Internet 1995 • Barcelona 1979 • Web 1997 • javiercasares.com/wpo • SEO 2003 • javier@casares.org • WPO 2009 • @JavierCasares#webperf @WebPerfES
  3. 3. Preparación • WordPress es potente pero viene muy mal configurado. • Antes de lanzarlo hay que preparar bastantes cambios. • Comprobar Apache, PHP y MySQL. • Recomendable: – Apache 2.2.x – PHP 5.3.x – MySQL 5.5.x#webperf @WebPerfES
  4. 4. Apache Virtual Host<VirtualHost aaa.bbb.ccc.ddd:80> RewriteEngine On RewriteOptions Inherit ServerAdmin root@example.com DocumentRoot /web/javier/ ServerName javiercasares.com ServerAlias www.javiercasares.com casares.org www.casares.org Header unset ETag FileETag None <Directory "/web/javier/"> Allow from all Options +Indexes FollowSymLinks AllowOverride All </Directory>… continúa#webperf @WebPerfES
  5. 5. Apache Virtual Host <IfModule mod_expires.c> ExpiresActive on ExpiresDefault "access plus 1 hour" ExpiresByType image/* "access plus 1 month" ExpiresByType video/* "access plus 1 month" ExpiresByType text/css "access plus 1 month" ExpiresByType application/x-javascript "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType text/html "access plus 1 hour" </IfModule>… continúa#webperf @WebPerfES
  6. 6. Apache Virtual Host <IfModule mod_deflate.c> DeflateCompressionLevel 9 <FilesMatch ".(js|css|php)$"> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html </FilesMatch> </IfModule> <Filesmatch ^wp-config.php$> Deny from all </Filesmatch></VirtualHost>#webperf @WebPerfES
  7. 7. Virtual Host estáticos<VirtualHost aaa.bbb.ccc.ddd:80> RewriteEngine On RewriteOptions Inherit ServerAdmin root@example.com DocumentRoot /web/static/ ServerName javiercasares.net ServerAlias w1.javiercasares.net w2.javiercasares.net FileETag All <IfModule mod_expires.c> ExpiresActive on ExpiresDefault "access plus 1 month" </IfModule> <IfModule mod_headers.c> RequestHeader unset Cookie Header unset Set-Cookie </IfModule>… continúa#webperf @WebPerfES
  8. 8. Virtual Host estáticos <IfModule mod_deflate.c> DeflateCompressionLevel 9 <FilesMatch ".(js|css|php)$"> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html </FilesMatch> </IfModule></VirtualHost>#webperf @WebPerfES
  9. 9. Preparación • Ficheros “tamaño 0”: – /.htaccess – /sitemap.xml – /robots.txt • Carpetas “no existentes” (permisos 777): – /wp-content/cache/ – /wp-content/uploads/#webperf @WebPerfES
  10. 10. .htaccess • Control de hostname (si-www / no-www). • Filtrado de peticiones a ficheros directos (sin pasar por el software PHP). • No dejar que sea “escribible” (aunque WordPress lo pida).#webperf @WebPerfES
  11. 11. .htaccessRewriteEngine OnRewriteBase /RewriteCond %{HTTP_HOST} !^javiercasares.com$ [NC]RewriteRule ^.*$ http://javiercasares.com%{REQUEST_URI}[R=301,L]RewriteCond $1 ^(index.php)?$ [OR]RewriteCond $1 .(css|js|sql|txt|xml|7z|bmp|bz2|csv|doc|docx|epub|gif|gz|ico|jpeg|jpg|key|log|mp3|odp|ods|odt|ogg|pdf|png|pps|ppt|pptx|ps|psd|rar|rtf|svg|tar|tbz|tgz|tif|tiff|vcf|xls|xlsx|zip)$ [NC,OR]RewriteCond %{REQUEST_FILENAME} -f [OR]RewriteCond %{REQUEST_FILENAME} –dRewriteRule ^(.*)$ - [S=1]RewriteRule . /index.php [L]#webperf @WebPerfES
  12. 12. sitemap.xml • Se puede dejar inicialmente en blanco (se actualizará mediante un plugin). • Ha de tener permisos de escritura (666). • Se puede usar la versión alternativa con el fichero <sitemap.xml.gz>.#webperf @WebPerfES
  13. 13. robots.txt • Hay que crear un fichero “físico” y no dejar que el sistema lo virtualice. • Indicaremos la localización del Sitemap. • Filtraremos determinadas estructuras de URL para evitar contenidos duplicados (evitar el Google Panda).#webperf @WebPerfES
  14. 14. robots.txtSitemap: http://javiercasares.com/sitemap.xmlUser-Agent: *Disallow: /blog/*/feed/Disallow: /blog/*/trackback/Disallow: /blog/*/attachment/Disallow: /blog/author/Disallow: /category/*/page/Disallow: /category/*/feed/Disallow: /tag/*/page/Disallow: /tag/*/feed/Disallow: /page/Disallow: /xmlrpc.phpDisallow: /*?s=#webperf @WebPerfES
  15. 15. Configuración • El fichero <wp-config.php> se puede mejorar mucho con muchas opciones: – Configuración de BDD – Claves autentificación – Caché e historial – Dominio de cookies – Configuración FTP – Configuración hostname#webperf @WebPerfES
  16. 16. wp-config.phpdefine(DB_NAME, javiercasares);define(DB_USER, javiercasares);define(DB_PASSWORD, xxxxxxxxxxxxxx);define(DB_HOST, aaa.bbb.ccc.ddd);//define(DB_CHARSET, utf8);//define(DB_COLLATE, ); • Tras esto, añadir la codificación “secreta”… https://api.wordpress.org/secret-key/1.1/salt/#webperf @WebPerfES
  17. 17. wp-config.phpdefine(WPLANG, es_ES);define(WP_CACHE, true);define(WP_POST_REVISIONS, false);define(AUTOSAVE_INTERVAL,120);define(COOKIE_DOMAIN, javiercasares.com);define(WP_SITEURL, http://javiercasares.com);define(WP_HOME, http://javiercasares.com);#webperf @WebPerfES
  18. 18. wp-config.phpdefine(FS_METHOD, direct);define(FTP_BASE, /web/javier/);define(FTP_CONTENT_DIR, /web/javier/wp-content/);define(FTP_PLUGIN_DIR , /web/javier/wp-content/plugins/);define(FTP_USER, aaaaaaaaaa);define(FTP_PASS, xxxxxxxxxxxx);define(FTP_HOST, aaa.bbb.ccc.ddd); • Otras variables para actualización automática: http://codex.wordpress.org/Editing_wp- config.php#WordPress_Upgrade_Constants#webperf @WebPerfES
  19. 19. Instalación • Subimos los ficheros por FTP (o como sea). • Entramos en el panel de instalación. • Instalamos. • Felicitamos por una instalación tan simple (por ejemplo a @WordPress)#webperf @WebPerfES
  20. 20. Administración • Que nadie se pueda registrar (al menos en general será así). • WordPress corregirá de forma automática el XHTML incorrectamente anidado • Servicios de actualización: – http://rpc.pingomatic.com/ – http://ping.blo.gs/ – http://rpc.technorati.com/rpc/ping#webperf @WebPerfES
  21. 21. Administración • No tener comentarios anidados (y si se tienen, no más de 2 niveles de recursividad). • No paginar los comentarios (genera contenidos duplicados y páginas absurdas). • No mostrar avatares (el sistema de Gravatar es bastante malo a la hora de llamar a las imágenes). Opción de plugin para cachear.#webperf @WebPerfES
  22. 22. Administración • Los enlaces permanentes pueden ser: – /%postname%/ • Desde la versión WordPress 3.2.x, el sistema ya lleva como nativo este ajuste, por lo que los problemas de rendimiento históricos se han eliminado.#webperf @WebPerfES
  23. 23. Multimedia • Hay 2 opciones: – Usar la carpeta /wp-content/ – Usar un dominio para estáticos • Un dominio para estáticos: – Ha de ser un dominio distinto (.com o .net) – Ha de ser “sin cookies” – ETag o Cachés altas#webperf @WebPerfES
  24. 24. Multimedia • Carpeta para los ficheros: – /web/static • Ruta para los ficheros: – http://examplestatic.net#webperf @WebPerfES
  25. 25. Plugins Generales • Akismet – Sistema antispam de los creadores de WordPress. – http://wordpress.org/extend/plugins/akismet/ • Elimina Cabeceras (no repositorio) – Quita cabeceras que pueden molestar (link rel="wlwmanifest") o provocar problemas de seguridad (meta name="generator"). – https://dl.dropbox.com/u/19964073/EliminaCabeceras.zip#webperf @WebPerfES
  26. 26. Plugins Generales • Limitador de intentos de login – Bloquea ataques de acceso al panel de administración – http://wordpress.org/extend/plugins/limit-login-attempts/ • Simple Trackback Validation – Bloquea ataques de links en trackbacks. – http://wordpress.org/extend/plugins/simple-trackback-validation/#webperf @WebPerfES
  27. 27. Plugins Generales • WordPress Backup to Dropbox – Genera una copia de todo el WordPress en Dropbox. – http://wordpress.org/extend/plugins/wordpress-backup-to-dropbox/ • WordPress Firewall 2 – Analiza peticiones extrañas y ataques XSS – http://wordpress.org/extend/plugins/wordpress-firewall-2/#webperf @WebPerfES
  28. 28. Plugins SEO • All in One SEO Pack – Hay que configurarlo bien para que no entre en conflicto con otros plugins y configuraciones. – http://wordpress.org/extend/plugins/all-in-one-seo-pack/ • Google XML Sitemaps – Básico para generar los Sitemaps. – http://wordpress.org/extend/plugins/google-sitemap-generator/#webperf @WebPerfES
  29. 29. Plugins SEO • OpenGraphProtocol (no repositorio) – Genera encabezados para Open Graph Protocol (Facebook). – https://dl.dropbox.com/u/19964073/OpenGraphProtocol.zip • PubSubHubbub – Ayuda a avisar a sistemas de novedades en contenidos. – http://wordpress.org/extend/plugins/pubsubhubbub/#webperf @WebPerfES
  30. 30. Plugins Mantenimiento • Better Delete Revision – http://wordpress.org/extend/plugins/better-delete-revision/ • Debug Queries – http://wordpress.org/extend/plugins/debug-queries/ • P3 (Plugin Performance Profiler) – http://wordpress.org/extend/plugins/p3-profiler/#webperf @WebPerfES
  31. 31. Plugins WPO • WP caché – ¿Dónde está Ricardo Galli cuando se le necesita? – https://dl.dropbox.com/u/19964073/wp-cache.zip – Este plugin NO CACHEA, gestiona la caché propia de WordPress – Los cambios de rendimiento de la caché interna a otros plugins no es tan distinta (sobre todo si luego…)#webperf @WebPerfES
  32. 32. Plugins WPO • Lazy Load – Gracias a jQuery, carga las imágenes de forma asíncrona, cuando el usuario las ve en la pantalla. – Es un “plugin de Automattic”. – http://wordpress.org/extend/plugins/lazy-load/ – Va bien para reducir el tiempo de respuesta inicial de carga de la página.#webperf @WebPerfES
  33. 33. Plugins WPO • WP Smush.it – Optimiza los contenidos multimedia cuando se suben al panel. – http://wordpress.org/extend/plugins/wp-smushit/ – Utiliza Yahoo! SmushIt, la herramienta que se usa para calcular en YSlow.#webperf @WebPerfES
  34. 34. Plugins WPO • WP Minify – ¿Dónde estás? – Selecciona TODOS los CSS y los JS (otros plugins sólo los que están encolados). – Los agrupa y comprime, también el HTML. – Ya no está en el repositorio y da algunos problemas (posible incompatibilidad WP 3.2). – No hay ningún plugin que llegue a su nivel.#webperf @WebPerfES
  35. 35. Plugins WPO • WP Parallel Loading System – Permite automatizar el Domain Sharding de imágenes. – http://wordpress.org/extend/plugins/parallel-loading-system/ – Es recomendable un máximo de 3 subdominios. – Hay que recordar hacer un “hack” para no generar contenidos duplicados en los subdominios (robots.txt según hostname con “Disallow: /”)#webperf @WebPerfES
  36. 36. Cuando tu ISP no te permite tocar • En muchos casos no podemos optimizar recursos de los servidores (Apache, PHP, MySQL…). • Estás en un servidor compartido de 1 euro de 1&1 (¡a la p*** calle ahora mismo!) • Tienes tus servidores en Estados Unidos o fuera del país de mayor tráfico.#webperf @WebPerfES
  37. 37. Varnish • ¡Haz que tu web vuele! http://www.varnish-cache.org/ • Web-Proxy + caché • Sirve para WordPress y para cualquier otro software o gestor de contenidos. • Se puede externalizar (recomendado) en un VPS. • Lo óptimo es discos SSD (con uno de 80GB hay de sobra) o en memoria (pero es caro).#webperf @WebPerfES
  38. 38. Varnish • Configurar el VCL – Tiempos de gracia de media hora a un día. – Elimina cookies y codificaciones. – Prioriza el tipo de caché: • ETag • Cache-Control • Expires • Last-Modified • Age – Elimina cabeceras HTTP inútiles.#webperf @WebPerfES
  39. 39. Varnish • VCL para WordPress if (req.url ~ "/wp-admin/css/" || req.url ~ "/wp-admin/images/" || req.url ~ "/wp-admin/js/") { return(lookup); } if (req.url ~ "/wp-(login|admin)" || req.url ~ "preview=true") { return(pipe); } … continúa#webperf @WebPerfES
  40. 40. Varnish set req.http.Cookie = regsuball(req.http.Cookie, "comment_author=[^;]+(; )?", ""); set req.http.Cookie = regsuball(req.http.Cookie, "comment_author_email =[^;]+(; )?", ""); set req.http.Cookie = regsuball(req.http.Cookie, "comment_author_url =[^;]+(; )?", ""); if (req.http.Cookie ~ "wordpress_logged_in_") { return (pass); } … continúa#webperf @WebPerfES
  41. 41. Varnish if (req.url ~ "/xmlrpc.php"){ return(pipe); } if (req.url ~ "/wp-config.php"){ return(error); } • ¡Seguro que se puede mejorar aún más!#webperf @WebPerfES
  42. 42. Varnish y las IP • Varnish es un Web-Proxy, así que al servidor web no le llega la IP del usuario, sólo la del Varnish… • Instalar el WP-IP-Proxy (espero que pronto esté en el repositorio oficial) o integrarlo en el “wp-config”. – https://dl.dropbox.com/u/19964073/wp-ip-proxy.zip • Solventa comentarios, AntiSpam y demás…#webperf @WebPerfES
  43. 43. Varnish y las cachés • Si cacheo y actualizo mi página… ¿qué? • WordPress Varnish as a Service Plugin – Información: – http://javiercasares.com/wp-varnish-aas/ – Repositorio: – http://wordpress.org/extend/plugins/wordpress-varnish-as-a-service/ • Cada día intentando mejorarlo, se aceptan sugerencias. javier@casares.org#webperf @WebPerfES
  44. 44. Pruebas • La máquina VPS: – 1 GB / 4 GB / 256 MB de RAM – 8 CPU (100% / 12,5% cada una) – MySQL 5.5 – Apache 2.2 – PHP 5.3 – Varnish 3.0 (caché en disco)#webperf @WebPerfES
  45. 45. Pruebas • Las herramientas: – http://www.webpagetest.org/ • Frankfurt, DE • IE 9 • DSL 1,5 Mbps • 5 test • First and Repeat#webperf @WebPerfES
  46. 46. Pruebas • Las herramientas: – http://loadimpact.com/ • 100 Usuarios • 10 Minutos • 25% US (Ashburn) • 25% IE (Dublin) • 25% BR (Sao Paulo) • 25% SG (Singapore)#webperf @WebPerfES
  47. 47. Pruebas • Las herramientas: – ApacheBenchmark (ab) • ab -k -n 5000 -c 250 http://example.com/ • 5000 peticiones en bloques de 250 concurrentes • keep alive activado#webperf @WebPerfES
  48. 48. Primer Byte recibido no cache si cache si cache no varnish no varnish si varnish 256 MB 1,243 s 0,734 s 0,454 s 1 GB 0,624 s 0,358 s 0,494 s 4 GB - - 0,337 s#webperf @WebPerfES
  49. 49. Inicio de Render no cache si cache si cache no varnish no varnish si varnish 256 MB 1,607 s 1,754 s 1,338 s 1 GB 1,000 s 1,154 s 1,416 s 4 GB - - 1,140 s#webperf @WebPerfES
  50. 50. Tiempo de Carga no cache si cache si cache no varnish no varnish si varnish 256 MB 3,588 s 2,499 s 1,813 s 1 GB 3,054 s 1,803 s 1,793 s 4 GB - - 1,653 s#webperf @WebPerfES
  51. 51. Carga completa no cache si cache si cache no varnish no varnish si varnish 256 MB 6,036 s 5,792 s 5,168 s 1 GB 5,454 s 5,065 s 5,294 s 4 GB - - 4,987 s#webperf @WebPerfES
  52. 52. Waterfall (no cache – no varnish)#webperf @WebPerfES
  53. 53. Waterfall (sí cache – no varnish)#webperf @WebPerfES
  54. 54. Waterfall (sí cache – sí varnish)#webperf @WebPerfES
  55. 55. Tiempo Carga (no cache – no varnish)#webperf @WebPerfES
  56. 56. Tiempo Carga (sí cache – no varnish)#webperf @WebPerfES
  57. 57. Tiempo Carga (sí cache – sí varnish)#webperf @WebPerfES
  58. 58. Connect Time (ms) no cache si cache si cache no varnish no varnish si varnish 256 MB 3 0 6 1 GB 11 0 7 4 GB - - 7#webperf @WebPerfES
  59. 59. Processing Time (ms) no cache si cache si cache no varnish no varnish si varnish 256 MB 31695 403 97 1 GB 32100 405 95 4 GB - - 98#webperf @WebPerfES
  60. 60. Waiting Time (ms) no cache si cache si cache no varnish no varnish si varnish 256 MB 31104 403 5 1 GB 31495 405 7 4 GB - - 5#webperf @WebPerfES
  61. 61. Total Time (ms) no cache si cache si cache no varnish no varnish si varnish 256 MB 31695 404 103 1 GB 32101 405 102 4 GB - - 105#webperf @WebPerfES
  62. 62. Conclusiones • Es básico activar la caché interna de WordPress. • Para un sitio “normal” es suficiente con eso, para un sitio “profesional” es recomendable Varnish para estabilidad.#webperf @WebPerfES
  63. 63. No se vayan todavía, aún hay más… • VPS – 8 GB – 8 CPU (100% - 12,5% x CPU) – Varnish en memoria (5 GB) • ¿Qué tal si hacemos una “meneada” abusiva? aká ataque DDOS…#webperf @WebPerfES
  64. 64. Abusando de Varnish Peticiones simultáneas 100 1000 2500 5000 Time taken for tests (s) 52,309 63,921 18,474 39,371 Number of requests 100.000 100.000 25.000 50.000 Requests per second 1.911,71 1.564,44 1.353,23 1.269,97 Time per request (ms) 0,523 0,639 0,739 0,787 Connect Time (ms) 2 113 362 668 Processing Time (ms) 7 488 1.448 2.099 Waiting Time (ms) 2 177 878 901 Total Time (ms) 11 602 1.810 2.831#webperf @WebPerfES
  65. 65. Posibles mejoras • MySQL con innoDB (total, las próximas versiones de MySQL sólo serán innoDB). • Tablas relacionadas (se pueden sacar unas cuantas consultas para relacionar “ids”). • Encontrar mejores plugins (sugerir a los desarrolladores posibles mejoras e informar de problemas). • Usar PHP-FPM (FastCGI Process Manager).#webperf @WebPerfES
  66. 66. Sentido Común • No seamos más papistas que el Papa. • Hagamos un mix para encontrar la fórmula que mejor se adapte y que aumente el rendimiento. • Al principio es fácil rascar segundos, al final es difícil rascar décimas.#webperf @WebPerfES
  67. 67. Consultoría • Si a alguien le interesa y no quiere pringar: Puesta a punto de WordPress Instalación, Configuración, Diseño, Maquetación, SEO, WPO, Varnish… • ¡Un correo a simple@kisslab.com y hablamos!#webperf @WebPerfES
  68. 68. Colabora: ¡Gracias!Ahora es el momentode ponerme a caldo…
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×