Swift Performance Lite: Acelerando tu Sitio Web

Swift Performance Lite: Acelera tu Sitio Web

por | Oct 31, 2018 | WordPress | 0 Comentarios

Swift Performance es un plugin de WordPress relativamente nuevo, del cual me tope por recomendaciones en la red. Tras probarlo por algĆŗn algĆŗn tiempo, me ha dejado sorprendido.

Recientemente escribĆ­ sobre la migraciĆ³n que realice de W3 Total Cache a WP Super Cache. En el cual explique algunos problemas que tuve con W3 Total Cache.

Sin embargo, la soluciĆ³n de WP Super Cache + Autoptimize no me tenia del todo contento. Las cosas se podĆ­an mejorar. En especial, el rendimiento de ambos plugins. Ya que no era de mi completo agrado.

Es ahĆ­ que escuche de Swift Performance Lite y decidĆ­ probarlo.

Instalando y probando Swift Performance

Tras instalar Swift Performance Lite, una de las cosas que debemos de hacer primero es el ejecutar su Wizard de instalaciĆ³n.

La gran ventaja es que prƔcticamente todo esta automatizado. El plugin detecta correctamente muchas de las opciones del entorno. AdemƔs de que mostrarƔ cualquier problema que tenga el servidor.

Con lo cual sabemos que debemos cambiar o instalar para mejorar el desempeƱo en general.

En el Wizard de InstalaciĆ³n podemos incluso elegir muchas de las opciones mĆ”s importantes. Como la forma en la cual controlaremos cuando se expira el cache. O si queremos incluso purgar el cache de Cloudflare, si usamos esa soluciĆ³n.

Imagen de las opciones del Wizard de InstalaciĆ³n de Swift Performance Lite.

AdemĆ”s incluye un minificador de cĆ³digo Javascript y CSS. Que si bien ya no es tan extremadamente necesario, siempre es bueno tener esas opciones.

Con la configuraciĆ³n detectada por Swift Performance Lite, se tiene una base sĆ³lida sobre la cual trabajar.

Dependiendo de las condiciones de tu servidor, el desempeƱo se puede sentir incluso mejor que con W3 Total Cache o WP Super Cache.

Personalmente, he encontrado que el desempeƱo puede ser mejor que con los plugins antes mencionados.

Afinando Swift Performance Lite

Sin embargo, en algunos casos, se necesita de realizar algunos cambios a la configuraciĆ³n. En especial si usamos software adicional o si observamos comportamientos errĆ”ticos.

En mi caso, me gusta combinar Javascript y CSS externo. Con lo cual estƔn disponibles aunque el medio original tenga problemas.

Para activarlo, debemos de ir a Settings Ā» Optimization Ā» Scripts y asegurarnos de la opciĆ³n de Exclude 3rd Party Scripts este desactivada.

AhĆ­ mismo, debemos de indicarle a Swift Performance que recursos queremos omitir a la hora de combinar scripts. En mi caso, declaro los siguientes:

Excluyendo scripts en Swift Performance Lite

Como se puede ver, es relativamente sencillo el decirle que recursos no se han de combinar. Esto es realmente Ćŗtil si encontramos problemas o si el cache crece demasiado rĆ”pido.

Otra de las opciones que ofrece Swift Performance es la posibilidad de usar el Lazyload de imĆ”genes. Esta caracterĆ­stica se encuentra bajo Settings Ā» Media Ā» Images.

AhĆ­ podemos decidir si queremos usar esta opciĆ³n y que condiciones causarĆ”n que se cargue la imagen completa.

PĆ”ginas 404, Archivos y Autores: ĀæAgregarlas al Cache?

Otra de las opciones que permite Swift Performance Lite es la posibilidad de almacenar en el cache las pƔginas de error HTTP 404 (no encontrado), las pƔginas de los archivos o de los perfiles.

Si bien el guardar en cache estƔs pƔginas suena tentador, es algo que se debe de analizar profundamente.

Personalmente decidƭ no permitir que se agreguen estas pƔginas al cache, ya que pueden interferir con las re-direcciones o registros de apache.

Sin embargo, puedes encontrar esta opciĆ³n en Settings Ā» Caching Ā» General.

Igualmente Swift Performance nos permite decidir si queremos guardar en el cache ciertas pƔginas como son end-points del REST API, Feeds, etc.

En Settings Ā» Caching Ā» Exceptions encontrarĆ”s estas opciones.

Si consideras que te serĆ” Ćŗtil, puedes desactivar los casilleros. Pero personalmente he encontrado que pueden generar que el tamaƱo del cache crezca mucho.

DependerĆ” de cada caso si se ha de activar o no.

Otras opciones de Swift Performance Lite

AdemƔs de encargarse del cache, Swift Performance tambiƩn nos permite realizar otras tareas. Como lo es el realizar un mantenimiento a nuestra Base de Datos de WordPress.

Si bien el tipo de herramientas que ofrece son bƔsicas, como es Reindexar u Optimizar la Base de Datos, Eliminar Transients, Revisiones, Comentarios o Usuarios; estas son generalmente las que mƔs se usarƔn para obtener una pequeƱa mejora en el desempeƱo. Especialmente notorio si la Base de Datos es grande.

Una opciĆ³n, relacionada al mantenimiento, que es realmente bienvenida y que nos ahorra el tener que depender de otra herramienta adicional.

Finalmente, otra de las opciones adicionales en Swift Performante Lite, es la del Plugin Organizer.

Con esta, nosotros podemos indicar en que circunstancias se deben de desactivar ciertos plugins. Ya sea si se visita una pƔgina en especifico, si el usuario actual tiene un determinado nivel, si se estƔ ejecutando en contexto AJAX, etc.

Esta opciĆ³n, si es configurada correctamente, puede ayudar a mejorar el rendimiento del sitio web en ciertos escenarios. En especial es Ćŗtil si se quieren optimizar los recursos en un entorno limitado o con alta demanda.

Problemas con Swift Performance Lite

Por desgracia, no todo es miel sobre hojuelas. Algo que en verdad ha de esperarse cuando se prueba un plugin nuevo.

Sin embargo estos problemas pueden ser solucionados relativamente fĆ”cil, ya que solo hace falta aplicar pequeƱos parches de cĆ³digo. He visto buen potencial en este plugin que he decidido seguir adelante con este a pesar de esos pequeƱos detalles.

Esto son algunos de los problemas que he encontrado y como puedes solucionarlos:

1. Swift Performance guarda en cache pƔginas de error

Si tienes soluciones de seguridad para WordPress como Wordfence, es muy posible que en algunos escenarios te encuentres con problemas si usas Swift Performance Lite.

AdemƔs de Wordfence, yo tambiƩn cuento con soluciones de seguridad adicionales creadas a medida.

En ambos casos, observe que los errores 503 de Wordfence y los 403 de mi soluciĆ³n eran guardados en el cache de Swift Performance Lite.

Peor aĆŗn, las pĆ”ginas de error generadas y guardadas en el cache le eran mostradas a los visitantes como si fuera la correcta.

En casos como este, normalmente buscarĆ­as los cĆ³digos de error en el Log de Apache. Pero estos no aparecian por ningĆŗn lado. Resulto que estaban en el registro con cĆ³digos HTTP 200.

Eventualmente encontrĆ© el origen del problema en Swift Performance y tras revisar su cĆ³digo tambiĆ©n la forma de solucionar ese tipo de problemas:

En este ejemplo, usamos el filtro swift_performance_is_cacheable junto con la funciĆ³n http_response_code para obtener el estado actual de la peticiĆ³n y saber si se debe de permitir que se almacene en el cache.

En este caso, use una lista predeterminada de cĆ³digos de error tĆ­picos, pero se puede comparar solamente contra el cĆ³digo HTTP 200:

Sin embargo, en este caso en especifico, se requerirĆ” realizar pruebas para saber si genera los resultados deseados.

2. Swift Performance agrega pƔginas inesperadas al warmup

Otro mal hƔbito de Swift Performance Lite es el hecho de que agrega a su tabla de warmup recursos como el robots.txt e incluso end-points del REST API, sitemaps, entre otros.

AdemĆ”s, cuando algĆŗn bot intenta acceder a un recurso vulnerable, tambiĆ©n se agrega esa pĆ”gina a la tabla de warmup de Swift. Esto si se regresĆ³ un error diferente al de no encontrado.

Si queremos evitar que Swift haga esto, podemos definir que clase de urls se deben de excluir desde el back-end de WordPress.

Pero tambiĆ©n lo podemos hacer usando un poco de cĆ³digo:

En este caso, se usĆ³ de nueva cuenta el filtro swift_performance_is_cacheable para filtrar si Swift Performance deberĆ” de guardar la pĆ”gina en el cache.

Entonces se compara la variable $_SERVER['REQUEST_URI'] contra un array pre-definido.

La ventaja de este mƩtodo es que la lista no puede ser modificada desde el plugin, con lo cual prevenimos que la lista sea eliminada si se restauran los valores por defecto de Swift Performance.

Otra alternativa a esta soluciĆ³n es el usar la propiedad $wp->request que ofrece WordPress. Sin embargo, esto solo funcionarĆ” en el front-end.

Una limitaciĆ³n que puede ser problemĆ”tica, en especial si queremos filtrar resultados que incluyan pĆ”ginas del back-end.

Finalmente, tambiĆ©n puedes obtener el valor original usando  filter_input(INPUT_SERVER, 'REQUEST_URI'). En especial si sospechas que otro plugin manipula esta variable global.

3. No se eliminan algunos de los archivos del Cache de Swift Performance Lite

Otro de los problemas de Swift Performance, e incluso de W3 Total Cache, es que una vez que ha expirado un elemento del cache, este no siempre se elimina.

Estos archivos pueden permanecer guardados ahĆ­ por tiempo indefinido.

Si tenemos muchos visitantes o mĆŗltiples pĆ”ginas, esto puede hacer que el cache crezca muy rĆ”pido a un tamaƱo excesivo.

Ejemplo del tamaƱo de cache generado por Swift Performance Lite.

En este caso, el cache llego a ser de casi 2GB. Lo cual claramente muestra un problema por que solo se tienen 79 pƔginas en la tabla de warmup.

ĀæDe donde ha salido todo los demĆ”s?

Una soluciĆ³n rĆ”pida es simplemente limpiar el cache manualmente a intervalos regulares. Pero puede ser tedioso despuĆ©s de un tiempo o si se tienen mĆŗltiples sitios web que administrar.

Una soluciĆ³n mĆ”s prĆ”ctica es el definir un Cron Job de WordPress y que este haga el trabajo por nosotros:

En este caso, se estƔn usando las propias clases de Swift Performance para saber el tamaƱo actual del cache, calcular cual deberƭa de ser su tamaƱo y eventualmente limpiarlo si es necesario.

Adicionalmente, tambiƩn se puede limpiar el cache una vez al dƭa. En ese caso, se define un cron job el cual solamente harƭa lo siguiente:

Hay que tener en mente que, debido a que es un trabajo cron de WordPress, es posible que no siempre se ejecute. Esto en especial en sitios web con poco trƔfico.

Para esos casos, es posible el crear un script especial y agregarlo a los trabajos cron del servidor. Pero ello estƔ un poco mƔs allƔ del alcance de esta entrada.

4. Multiples Hosts en el cache de Swift Performance Lite

Cuando se cuenta con una instalaciĆ³n de multisitios, es de esperarse que un plugin como Swift genere una carpeta por cada dominio que sirve contenido desde una instalaciĆ³n en especifico de WordPress.

Sin embargo, a veces esto tambiƩn sucede con las instalaciones regulares, bajo ciertas condiciones.

Por ejemplo, si cuentas con una instalaciĆ³n de WordPress en un VPS y Apache ha definido a ese servidor virtual como el principal… entonces es posible que te encuentres con una sorpresa.

Swift Performance crea una carpeta en su directorio de cache por cada dominio que accede a la instalaciĆ³n en donde esta presente. Pero cada una de esas carpetas solo se puede acceder desde el dominio que la creo.

AsĆ­, si cuentas con una instalaciĆ³n que se puede acceder desde www.ejemplo.com, ejemplo.com y una IP como 123.456.789.012, entonces terminarĆ”s con 3 carpetas.

Pero para limpiar el cache generado para 123.456.789.012, deberĆ”s de ingresar directamente en esa direcciĆ³n. No puedes limpiar ese cache desde www.ejemplo.com. Pero tampoco la de ejemplo.com.

Sin embargo, puedes mostrarle a Swift cuales son los hosts y carpetas que puede ver haciendo uso del filtro swift_performance_enabled_hosts:

En este caso, nosotros obtuvimos todas las carpetas en root del cache de Swift Performance y los regresamos como si fueran nombres de dominio.

De esta forma, el cache generado para otros dominios se puede ver, administrar y purgar desde el back-end.

Hay que tener en cuenta, por supuesto, que en el caso de las instalaciones multisitio; esta soluciĆ³n puede generar problemas. Por lo cual pudiera necesitar validaciones adicionales.

5. Problemas cuando se corre WP-CLI con Swift Performance

Una de las herramientas mƔs importantes para administrar WordPress, desde la lƭnea de comandos, es la de WP-CLI.

Con ella podemos hacer una infinidad de tareas para administrar las instalaciones  el software. Sin embargo, Swift Performance parece emitir ciertas advertencias cuando es ejecutado en este tipo de entorno.

Por ejemplo, emite un error cuando intenta usar el indice HTTP_HOST. El cual no se define en contexto de lĆ­nea de comandos.

Por lo cual, para evitar algunos problemas, o que la salida de la consola pierda formato; siempre es bueno desactivarlo con el siguiente parƔmetro:

wp plugin list --skip-plugins=swift-performance-lite

Solo con el agregar la opciĆ³n --skip-plugins, se puede corregir el pequeƱo problema. Ya que si no se ejecuta Swift Performance Lite en el entorno CLI, entonces este no tratarĆ” de optimizar esas salidas.

Conclusiones sobre Swift Performance Lite

Si bien, como cualquier plugin nuevo, todavƭa tiene mucho que mejorar; Swift Performance me ha dejado sorprendido en muchas Ɣreas.

Por ejemplo, este es uno de los resultados que he obtenido usando este plugin como soluciĆ³n de cache:

Prueba de desempeƱo del sitio web con Swift Performance Lite

Para nada despreciable. Incluso ya por debajo de un segundo de carga. Algo que invariablemente buscaba lograr, pero me era algo elusivo con otras soluciones.

Claro, siempre ayuda mucho el contar con un servidor optimizado.

Vale la pena el tomarse el tiempo probar este plugin, el cual ofrece buenos beneficios por default. Aunque obtienes mucho mƔs de este una vez sabes donde tienes que apuntalar.

ĀæUstedes que opinan al respecto?

Ā”ƚnete a la conversaciĆ³n!

C

0 comentarios

Enviar un comentario

Tu direcciĆ³n de correo electrĆ³nico no serĆ” publicada. Los campos obligatorios estĆ”n marcados con *

Pin It on Pinterest

Share This