Soporte » WordPress Avanzado » Un codigo diferente de cache, sin usar plugin de wordpress, que les parece ?

  • Primero les cuento del tema.
    Un cliente tiene una web con muchas visitas (cerca de 1 millon x mes).
    Es una web de noticias, con un theme muy malo, en la home tiene varios widgets con muchas notas (con offsets y demas), sumado a que esta llena de ads (adsense y otras plataformas). No tenia ni https y funcionaba muy lenta.
    Sin saberlo me metí en un gran lio.

    El tema es que despues de cambiar de servidor, optimizar un poco todo, y probar muchos plugins… noté que la mayoria de los plugins no cachean bien, con bien me refiero a que siempre se hace alguna llamada a la base de datos, se «levanta» codigo de wordpress, etc.

    Entonces pensaba (como tenia en una empresa que trabajé anteriormente , pero no usaba WP), generar archivos html y servirlos sin pasar por todo el código de wordpress.

    Basicamente hace esto:
    el .htaccess redirige al index.php
    el index.php (si tiene la variable encendida de mi cache) incluye una clase que hace lo siguiente:
    1- verifica si la url ya esta cacheada (buscando en una carpeta un nombre .html)
    2- si esta hace un file_get_contents y lo muestra por pantalla.
    3- si no está vuelve pide por curl a la misma ruta con un parametro para que no pase x el cache, y obtiene el codigo de la web
    4- con ese codigo crea el archivo .html y lo sirve por pantalla

    Ademas agregué un listado de textos (que los revisa de la url) para que haga un bypass y no pase x el cache (ejemplo archivos .php, wordfence, o el curl cuando no tiene la url cacheada)

    Ah, también agregúe una libreria para detectar que tipo de dispositivo es (mobile, tablet, escritorio) para generar un cache diferente para cada uno.

    Que les parece esto ?
    El codigo está libre en github:
    https://github.com/anibalardid/AviWPCache

    Se agradecen comentarios y debates 😉

Viendo 9 respuestas - de la 1 a la 9 (de un total de 9)
  • Buenos días Anibal, ese funcionamiento que describes es el que hacen muchos plugins de caché que utilizan disco (donde guardan los html estáticos e incluso en formato gzip) y un rewrite en el htaccess o fichero de configuración del servidor web.

    En esas reglas puedes saltar aquellas url que no quieras cachear, por ejemplo las del back-end, o aquellas que vengan con cookies o parámetros GET/POST

    Espero te ayude

    Saludos

    Hola Aníbal, la idea está muy bien, pero como te dice Fernando Puente, ese es el comportamiento de gran parte de los plugins de caché. Hay muchos niveles de caché, de la base de datos, del navegador, proxy, Optcode de PHP para no volver a generarlo y/o tirar de los htmls ya generados previamente en disco que como bien te dice @fpuenteonline incluso pueden estar ya comprimidos en gzip para ahorrase el trabajo posterior de la compresión por parte del servidor. Además también se puede hacer directamente desde el servidor web en Nginx (yo lo utilizo en alguna web) e incluso servir páginas aunque PHP esté caído, mira por ejemplo este link https://www.nginx.com/blog/nginx-caching-guide/ aunque @fpuenteonline te podrá dar muchos más consejos al respecto, microcaché, etc 🙂

    Iniciador del debate anibalardid

    (@jackalpret)

    Fernando y Carlos muchas gracias x sus respuestas.
    Pero si se usa un plugin, primero no pasa por el core de wordpress minimamente para verificar si está activo o no el plugin ?

    yo nginx no uso , pero en apache tengo opcache activo, ademas de servir en gzip, deflate y no recuerdo si algo mas

    Hola de nuevo Anibal.
    Aunque se use un plugin de WordPress, si este escribe una configuración especial en el servidor web, lo que esté en esa configuración se ejecuta siempre antes que WordPress, es decir, primero se ejecutan las reglas del servidor web y luego redirige la llamada a PHP (WordPress).

    Saludos

    Iniciador del debate anibalardid

    (@jackalpret)

    Sisi eso si, por eso como el htaccess va al index yo edite ahi directo para usar mi cache.
    Por eso preguntaba si no era mejor eso que hice antes q un «plugin» de cache, el cual necesita q antes «levante» wordpress , acceda a la db para comprobar si esta activo, leer las opciones configuradas, etc

    Hola Anibal, lo que te cuenta Fernando es que algunos (en realidad la gran mayoría) de plugins de caché lo que hacen es escribir las reglas al .htaccess y una vez escritas el proceso es más o menos el siguiente:

    • Petición de url
    • Entra Apache en juego para servirla
    • Si existe una regla de Apache en el .htaccess que afecte a la url pedida ésta entra en juego
    • La regla puede ser que en vez de ejecutarse el WordPress se sirva un html estático previamente guardado en caché
    • Si no hay regla del Apache, la petición seguiría su curso normal, WordPress que atacaría a la Base de Datos (aquí puede entrar en juego el caché de la BD), ejecución de PHP (que puede estar precompilado con Optcode), etc…

    Es decir, un plugin de caché en WordPress puede decirle al servidor que ejecute ordenes sin el hacer nada, ni entrar en juego WordPress, PHP y/o la Base de datos.

    Este proceso es una simplificación de algo mucho más complejo y con muchos más actores en juego (DNSs, CDNs, caché en proxys, del propio navegador, del ISP, etc., etc.), pero para contar un poco como un plugin puede «actuar sin actuar» o «actuar sin ejecutar WordPress»

    Iniciador del debate anibalardid

    (@jackalpret)

    Carlos, ahora si !
    Claro quizas pocos de los que probe vi que hacian eso, ahora si eso me cierra y me parece bien 😉

    Esto empezó x ese cliente que probe de todo y todos los plugins de cache y siempre notaba que igualmente se hacian requests a WordPress.
    Y como yo habia trabajado en un periodico que el backend estaba en otro servidor y al publicar las notas o cambiar la home directamente generaban los htmls en el servidor que se usaba como front habia tenido esta idea.

    A Uds que les funcionó mejor como combinación de plugins de cache, software de servidor (apache o nginx, opcache, varnish, memcached, uso de cloudflare u otro dns y/o cdn, etc) , mas allá del hosting, que yo normalmente uso digitalocean o sino el que el cliente ya tenga

    A mi hasta ahora lo mejor caché desde Nginx y configurar bien Optcode de PHP y caché de BD como ponía arriba (y CDN), en otras instalaciones muy buenos resultados con W3TC, pero también grandes dolores de cabeza con la configuración y romper todo el sitio web por un parámetro mal configurado, aunque me ha funcionado bien en varias ocasiones no es un plugin que recomendaría a la mayoría de la gente.

    Iniciador del debate anibalardid

    (@jackalpret)

    Claro te entiendo , yo w3tc lo use mucho y lo se configurar, tb cdn, config de apache y demas.
    Voy a probar crear un nuevo droplet en digital con nginx para probar ahi como funcionan las cosas

    muchas gracias !

Viendo 9 respuestas - de la 1 a la 9 (de un total de 9)
  • El debate ‘Un codigo diferente de cache, sin usar plugin de wordpress, que les parece ?’ está cerrado a nuevas respuestas.