Como mejorar la velocidad de WordPress en 2 sencillos pasos

Como mejorar la velocidad de WordPress en 2 sencillos pasos

26 Junio, 2014 6 Comentarios1


Como mejorar la velocidad de WordPress en 2 sencillos pasos
4.8 (96%) 5 votes

Hola a tod@s de nuevo! He tardado un tiempo en publicar pero es que hemos estado haciendo el cambio de servidor y si alguna vez os ha tocado entenderéis que es un buen lío. De hecho el artículo de hoy se me ha ocurrido gracias a la migración de servidor ya que estuve mirando el rendimiento del blog y he visto como mejorar la velocidad de WordPress.

Específicamente estas optimizaciones van relacionadas con dos artículos que redacté tiempo atrás. Uno es el de lo botones sociales y el otro es el mejor sistema de comentarios. Os voy a desglosar cada cosa para que podáis implementarlo:

Botones sociales con un toque diferente

Podéis ver el artículo original en https://www.muchomasquewebs.com/blog/botones-sociales-diferentes/.

Vamos a realizar optimizaciones sobre estos botones ya que cada vez que cargamos la página se calculan los seguidores de cada red social y eso hace que el rendimiento baje, para ello vamos a cachear estos resultados para que los calcule por ejemplo una vez cada hora. Recordad que estos cambios se realizaban en vuestro archivo functions.php de vuestro theme

function twitter_user_info($screen_name){
	$cache = 'twitter_followers.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 3600){ 		
            // if a cache file newer than 1000 seconds exist, use it 		
            $twitter_data = file_get_contents($cache); 		
            return round_num_follows($twitter_data); 	
        } else { 		
            $ch = curl_init(); 		
            curl_setopt($ch, CURLOPT_URL, "https://cdn.api.twitter.com/1/users/lookup.json?screen_name=" . $screen_name);  		           
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  		
            $output = curl_exec($ch);   		 		
            // convert response 		
            $output = json_decode($output); 		
            // handle error; error output 		
            if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) { 			
                $twitter_data = file_get_contents($cache); 			
                return $twitter_data; 		
            } 		
            curl_close($ch); 		
            file_put_contents($cache, $output[0]->followers_count);
            return round_num_follows($output[0]->followers_count);
	}
}
function facebook_user_info($page_id)
{
	$cache = 'facebook_followers.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 3600){
		// if a cache file newer than 1000 seconds exist, use it
		$facebook_data = file_get_contents($cache);
		return round_num_follows($facebook_data);
	} else {
		$data = file_get_contents("http://graph.facebook.com/".$page_id."/");
		$fans = json_decode($data, true);
		file_put_contents($cache, $fans['likes']);
		return round_num_follows($fans['likes']);
	}
}
function googleplus_user_info($profile) {
	$cache = 'gplus_followers.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 3600){
		// if a cache file newer than 1000 seconds exist, use it
		$gplus_data = file_get_contents($cache);
		return round_num_follows($gplus_data);
	} else {
		$google_api_key = 'AIzaSyDSNlIRJTXVR0aR2H8Rspj9llNNYeV6OkY';
		$data = @file_get_contents("https://www.googleapis.com/plus/v1/people/$profile?key=$google_api_key");   
		$data = json_decode($data, true);
		file_put_contents($cache, $data['circledByCount']);
		return round_num_follows($data['circledByCount']);
	}
}

function youtube_user_info($channel) {
	$cache = 'youtube_followers.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 3600){
		// if a cache file newer than 1000 seconds exist, use it
		$youtube_data = file_get_contents($cache);
		return round_num_follows($youtube_data);
	} else {
		$data = file_get_contents("http://gdata.youtube.com/feeds/api/users/$channel?alt=json");
		$data = json_decode($data, true);
		$stats_data = $data['entry']['yt$statistics'];
		file_put_contents($cache, $stats_data['subscriberCount']);
		return round_num_follows($stats_data['subscriberCount']);
	}
}

function pinterest_user_info($profile) {
	$cache = 'pinterest_followers.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 3600){
		// if a cache file newer than 1000 seconds exist, use it
		$pinterest_data = file_get_contents($cache);
		return round_num_follows($pinterest_data);
	} else {
		$metas = get_meta_tags("http://www.pinterest.com/$profile/");
		file_put_contents($cache, $metas['pinterestapp:followers']);
		return round_num_follows($metas['pinterestapp:followers']);
	}
}

Si en vez de que lo ejecute cada hora queréis cambiar el intervalo sólo tenéis que cambiar los segundos (3600) de esta línea:

if(file_exists($cache) && time() - filemtime($cache) < 3600){

Parece una tontería, ¿no? Pues este cambio nos ahorra entre 1 y 2 segundos de carga en la web y eso es muchísimo cuando tu web está entre los 2 y 5 segundos.

El mejor sistema de comentarios WordPress

El artículo original se encuentra en https://www.muchomasquewebs.com/blog/el-mejor-sistema-de-comentarios-wordpress/

Aquí el problema de rendimiento era mayor, de hecho tuve que desactivar el plugin porque aumentaba mucho el consumo de recursos WordPress y la velocidad de carga del blog aumentó considerablemente. Y por este motivo en concreto he escrito este artículo ya que el plugin es muy bueno para los comentarios pero si consume tantos recursos no merece la pena usarlo.

Por ello vamos a modificar el plugin para que cacheé los comentarios cada 6 horas ya que los comentarios no aumentan considerablemente.

function comments_evolved_get_wordpress_count() {
  global $post, $comments, $wp_query, $comments_by_type, $id;
  	$cache = get_template_directory().'/comments_cache/wordpress_count'.$id.'.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 21600){
		// if a cache file newer than 1000 seconds exist, use it
		$wordpress_count_data = file_get_contents($cache);
		return $wordpress_count_data;
	} else {
		$get_comments= get_comments('post_id=' . $id);
	  	$comments_by_type = &separate_comments($get_comments);
		file_put_contents($cache, count($comments_by_type['comment']));
	  	return count($comments_by_type['comment']);
	}
}

function comments_evolved_get_trackback_count() {
  global $post, $comments, $wp_query, $comments_by_type;
  return count($wp_query->comments_by_type['pings']);
}

function comments_evolved_get_facebook_count($url = "") {
	global $id;
	$cache = get_template_directory().'/comments_cache/facebook_count'.$id.'.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 21600){
		// if a cache file newer than 1000 seconds exist, use it
		$facebook_count_data = file_get_contents($cache);
		return $facebook_count_data;
	} else {
		if(empty($url)){ $url = get_permalink(); }
	  	$link = 'https://graph.facebook.com/?ids=' . urlencode($url);
	  	$link_body = wp_remote_retrieve_body(wp_remote_get($link));
	  	$json = json_decode($link_body);
		file_put_contents($cache, $json->$url->comments);
	  	return $json->$url->comments;
	}
}

function comments_evolved_get_disqus_count($url = "") {
	global $id;
	$cache = get_template_directory().'/comments_cache/disqus_count'.$id.'.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 21600){
		// if a cache file newer than 1000 seconds exist, use it
		$disqus_count_data = file_get_contents($cache);
		return $disqus_count_data;
	} else {
		if(empty($url)){ $url = get_permalink(); }
	  	$options = get_option("comments-evolved");
	  	if(!empty($options["disqus_shortname"])){
			$link = 'http://disqus.com/api/3.0/threads/details.json?api_key=qaoZg7DHagkn8xUf9ZqYRacHZI3CuBmGpu5InMmtXgtRzCnq6iGwtn7Fbwq1uysH&forum=' . $options["disqus_shortname"] . '&thread:link=' . urlencode($url);
			$link_body = wp_remote_retrieve_body(wp_remote_get($link));
			$json = json_decode($link_body);
			if(!empty($json)){
				file_put_contents($cache, $json->response->posts);
		  		return $json->response->posts;
			}
	  	}
		file_put_contents($cache, 0);
	  	return 0;
	}
}

function comments_evolved_get_gplus_count($url = "") {
	global $id;
	$cache = get_template_directory().'/comments_cache/gplus_count'.$id.'.cache';
	if(file_exists($cache) && time() - filemtime($cache) < 21600){
		// if a cache file newer than 1000 seconds exist, use it
		$gplus_count_data = file_get_contents($cache);
		return $gplus_count_data;
	} else {
  		include_once COMMENTS_EVOLVED_LIB . '/simple_html_dom.php';
  		if(empty($url)){ $url = get_permalink(); }
  		$link = 'https://apis.google.com/_/widget/render/commentcount?bsv&href=' . urlencode($url);
  		$link_body = str_get_html(wp_remote_retrieve_body(wp_remote_get($link)));
  		$count_raw = $link_body->find('#widget_bounds > span', 0);
 		$count_arr = split(" ",$count_raw->plaintext);
		file_put_contents($cache, trim($count_arr[0]));
  		return trim($count_arr[0]);
	}
}

La caché de los comentarios se crean en la carpeta comments_cache de vuestro theme por lo que debéis crearla para que funcione.

Sólo hemos ahorrado 25 segundos de carga!!, casi na 🙂

Como hemos modificado el plugin, os voy a dejar el plugin modificado para que sólo tengáis que subirlo a vuestro server. Para ello debéis desactivar el otro plugin y activar este. Descargar

Espero que con estas dos pinceladas hayáis podido mejorar la velocidad de WordPress ya que hoy en día es fundamental tener una web optimizada y que cargue en pocos segundos para que tenga éxito.


Recordad hacer likes, +1, etc y compartirlo con vuestra gente ya que además de ayudarme también estáis haciendo llegar información útil a la gente. Nos vemos en el siguiente artículo.

Soy Ing. de Telecomunicaciones, diseñador/programador desde hace 8 años, los últimos 3 centrado en el desarrollo de Apps .

Además de muchomasquewebs.com mantengo bepremium.es. En lo personal un apasionado del Windsurf y surf , en general todo lo que tenga que ver con el mar, como afición friky que todo ingeniero debe tener, me encanta el aeromodelismo.

Si queréis contactar conmigo directamente podéis hacerlo a jose.revenga@muchomasquewebs.com

Summary
Mejoras de rendimiento en WordPress para algunos tutoriales
Article Name
Mejoras de rendimiento en WordPress para algunos tutoriales
Description
Si has utilizado alguno de los tutoriales para WordPress de mejores comentarios y redes sociales diferentes te damos unos consejos para mejorar su rendimiento.
Author




6 comentarios

  • Youser Arias | Responder

    Muy bueno

  • Almúsica - Sonido y Salud | Responder

    Hola interesante lo que dices del plugin, pero ya no sale el que has puesto para descargar. Sale una página de error. A parte de porque lo quería probar, por si acaso no lo sabias que no funcionaba.
    Un saludo y Gracias

  • Carlos | Responder

    Hola, gracias por el post pero una pregunta: Lo que indicas de los plugins sociales que hay que poner en el archivo functions.php, hay que poner todo el código que indicas si no existe en nuestro php? Al mismo tiempo, da igual el plugin que estemos utilizando?, me refiero, sobre que plugins de redes sociales funciona ese código?

    • Emilio De Agustín Cazorla | Responder

      Hola Carlos!

      Gracias por la visita y el comentario, para esta optimización hablamos de los botones sociales del artículo: http://www.muchomasquewebs.com/blog/botones-sociales-diferentes/. No te vale para cualquiera aunque lo del método de cacheo para el contador de los botones sociales lo puedes usar en cualquiera que ofrezca esa funcionalidad para optimizar las peticiones de tu web.

      Si no tienes muchos conocimientos de programación web te recomiendo el plugin Ultimate Social Deux que aunque es de pago es muy completo y funciona a la perfección.

      Un saludo!

Soy Ing. de Telecomunicaciones, diseñador/programador desde hace 8 años, los últimos 3 centrado en el desarrollo de Apps .Además de muchomasquewebs.com mantengo bepremium.es. En lo personal un apasionado del Windsurf y surf , en general todo lo que tenga que ver con el mar, como afición friky que todo ingeniero debe tener, me encanta el aeromodelismo.Si queréis contactar conmigo directamente podéis hacerlo a jose.revenga@muchomasquewebs.com