Publicado el Domingo 04 de Febrero del 2007 @ 1:15 por Armonth.
Recientemente estuve ayudando a un conocido a optimizar WordPress, tenía problemas de CPU que le causaban problemas con el hosting compartido y aún tengo pendiente de escribir sobre ello pero todavía no es el momento…
Pero sí que quiero aprovechar para comentar que me dí cuenta de que las visitas desde Google causaban mucho más consumo que normalmente: El causante era WordPress Plugin MoreMoney un plugin que tiene como objetivo principal mostrar publicidad Adsense cuando el visitante viene desde buscadores.
En principio tenía mis dudas, no sé mucho de programación (sinceramente, si tuviera que hacer un plugin similar seguramente metería cosas peores) pero el plugin me puso la mosca detrás de la oreja y después de consultar a alguien que sí sabe lo suyo me dio los siguientes puntos:
Y es que mezclar preg_replace y eregi está mal. Fue desactivar el plugin y aplicar otro método similar para ver un aumento de rendimiento más que notable…
En defensa del plugin tengo que decir que no fue el culpable de los problemas de CPU (los tiros van por otro sitio) pero sí que ayudo a empeorarlo ya que es poco eficiente.
La solución que yo uso para mostrar publicidad a los visitantes desde buscadores — realmente no necesito más — es la misma que se puede ver en el código del menéame, en una sola línea:
if (preg_match('/q=|search/', $_SERVER['HTTP_REFERER']) ) {
La sentencia anterior viene a ser que si el referido (HTTP_REFERER) incluye /q= o search/ entonces se debe ejecutar lo que viene entre { y }. Por ejemplo Google envía de referido algo parecido a http://www.google.es/search?q= por lo que la sentencia saltará.
No es perfecto ya que no lo coge absolutamente todo pero coge el 99% de búsquedas desde buscadores y funciona. Todo ello en una línea de código, y muy simple, se aplica perfectamente el principio KISS.
Como colofón final, una manera fácil de aplicarlo a WordPress y WP-Cache es la siguiente:
Introduce el siguiente código en ad.php:
<?php
if (preg_match('/q=|search/', $_SERVER['HTTP_REFERER']) ) {
print 'aquí el codigo Adsense, tal cual te lo da Google';
}
?>
Donde quieras que se muestre ese bloque adsense (sólo para quienes vengan desde buscadores) metes el código para ejecutar ese fichero php de forma dinámica que aparece en la documentación de WP-Cache:
<!--mclude wp-content/themes/plantilla/ad.php-->
<?php include_once(ABSPATH . 'wp-content/themes/plantilla/ad.php'); ?>
<!--/mclude-->
No seré programador, pero sé reconocer cuando algo es tan simple que es brillante y pienso ¿cómo no se me ocurrió a mí?.
Interesante… a ver si tengo un ratillo y lo pruebo :)
Gracias
¿Por qué mostrar anuncios solo a visitantes de Buscadores y no a todos?
A.- “Respetar” a tus lectores habituales
B.- Es mas efectiva sobre visitantes fortuitos (los habitules acaban ignorando la publi)
encima o debajo del post? Mmm… ingenioso. No lo había visto (uso adblock :D )
Pues lo voy a probar, aunque lo del wp-cache no lo entiendo mucho :P
Hace tiempo escribí dos artículos sobre WordPress y uso de CPU que podrían ayudar: WordPress y uso de CPU: algunas lecciones y Optimizar automáticamente tu base de datos
Sobre el método que presentas, está excelente… simple y efectivo
Hector, una cosa. Dices que es poco eficiente y la verdad es que no voy a discutir si lo es o no, pero la Alternativa que tienes solo cubre una parte de la funcionalidad que el plugin tiene.
Osea, te permite saber si vienen de un motor de busqueda, pero no permite añadir demás sitios (meneame, barrapunto, digg,…) ni filtrar por palabras clave que el plugin si permite hacer.
Supongo que si empezamos a añadir funcionalidades al final todo consume procesador.
Esto no quita esté o no optimizado, solo es una puntualización.
Por cierto, el wp-cache en algunas ocaciones cachea el envio del comentario y da la sensación de que no se ha añadido el comentario. Hay que recargar la página para ver el comentario.
Me acaba de pasar, por eso te lo digo ;)
Realmente interesante tu post, aunque sería más interesante todavía si en lugar de optar por una solución tan simple se te hubiera ocurrido optimizar el código del plugin… ;) (así los que lo usamos estaríamos más contentos).
Fiera tienes la variable TEMPLATEPATH, para definir la ruta del theme.
Asi te valdrá para cualquier theme ;)
Saludos.
Iva de muerte hasta que…
resulta que el wp-cache me da un error cuando entras en el blog directamente, creo que lo que pasa, es que en la cache se queda guardado el blog con publicidad cuando alguien entra desde un buscador, y entonces cuando viene una vista directa le da un error.
Lo he estado mirando y nos e como solucionarlo :(
¡¡¡¡¡¡¡¡¡¡¡ Help !!!!!!!!
Que ingenioso!!!
Voy a investigar a ver como puedo sacar el referer con rails.
Un saludo!
Gracias Armonth, espero eso solucione una razón que me obligó a limitarme en cuanto a Wordpress
Muy interesante, armonth, pero lo cierto es que no consigo que funcione. En qué parte exacta del plugin wp-cache hay que meter el código mclude al que haces referencia?
¿Alguien lo sabe?
Pues eso es lo que había entendido incialmente, y es lo que había probado, pero no me salía y por eso pensé que había que hacerlo en wp-cache.php. Así que lo que había hecho - todavía está así - es incluirlo en page.php, que queda más o menos así:
… y sigue
Y mi fichero ad.php está en wp-content/adsense/ad.php, y es tal cual:
¿Qué hago mal? Hago una búsqueda en Google de alguna entrada y llego a esa entrada a través de Google, pero como si no…
Uy, no sale el código en los comentarios. Bueno, te lo envío por correo… :-(
Oye… muy bueno tu post… he probado entrar directamente y desde algun buscador y funciona perfectamente, de hecho ya lo implemente en un mi sitio.
Ahora tengo varias preguntas… al parecer tu no tienes muchos adsense en la pagina, asi que mis dudas son:
1.- has visto algun cambio notable en tus ingresos al no imprimir anuncios a tus visitantes habituales?
2.- con respecto al wp-cache, realmente te funciona? yo tengo la idea que la pagina en memoria (cache) no desplegaria los anuncios nunca…
gracias
Volviendo al artículo en sí, se puede refinar un poco más en ámbitos de eficiencia si reemplazamos el uso de preg_match, donde estamos usando un autómata para una expresión regular bastante simple, por un doble strpos, que además, creo recordar que en PHP se evalua en circuito corto, lo que lo hace todavía más rápido.
Las expresiones regulares son muy potentes pero también mucho más lentas.
Saludos ^^
Bueno un buen truco al que llego desde el blog de Inkilino, jejeje, la verdad es que ahora que me había planteado tener adsense de nuevo es una buena forma de no penalizar a la gente que suele leer el blog normalmente.
100% de acuerdo! Con experiencia se van mejorando esos aspectos menores. ;)