WordPress速度优化之缓存Gravatar头像(SAE版1.2)

蓝飞 蓝飞 | 时间:2012-04-07, Sat | 37,012 views
后台技术 

什么是Gravatar?

Gravatar Logo

Gravatar是Globally Recognized Avatar的缩写,是gravatar推出的一项服务,意为“全球通用头像”。如果在Gravatar的服务器上放置了你自己的头像,那么在任何支持Gravatar的blog或者留言本上留言时,只要提供你与这个头像关联的email地址,就能够显示出你的Gravatar头像来。

如何申请Gravatar?

  • 登陆http://cn.gravatar.com/site/signup,填写注册邮箱之后,点击”Signup”按钮;
  • 到注册的邮箱中查收邮件并点击其中的链接确认;
  • 在弹出页面中填写相关内容;
  • 点击页面中部框框下的链接”Add one by clicking here!”;
  • 如果要从自己的本地硬盘上传一张头像,那就点击第一个链接”My computer’s hard drive”上传头像;
  • 进入Crop页面,滑动滑块选择你需要的照片区域后点击页面下部的”CROP”按钮;
  • 给自己的头像评定级别。G 普通级、PG 辅导级、R 和 X 为限制级,一般不黄不暴力的选G就行了;
  • 点击页面中的头像照片,在弹出的小页面里点击”Confirm”钮确认;
  • 到支持Gravatar头像功能的网站,输入申请头像时的邮箱发表评论试试吧。
  • 想更改头像的话只需要到http://cn.gravatar.com/网站,登陆后修改即可。

为什么要缓存Gravatar头像?

因为Gravatar的服务器在国外,又因为伟大的Wall,在国内访问使用该功能的网站或博客,可能因为载入速度过慢而导致页面一直在载入中甚至头像无法显示,这是一个非常糟糕的用户体验。将头像缓存下来,定时更新,而头像图片的文件一般不会很大,不需要暂用很大的服务器空间,因此缓存Gravatar头像是一个加快网站访问速度的高性价比选择。

如何在WordPress for SAE中缓存Gravatar头像?

很简单,在所使用的主题的function.php文件中加入以下代码,不破坏原文件结构即可:

/*
 * Save avatar image to SAE Storage
 * @Version: 1.2
 * @author Chang
 * @blog http://lanfei.sinaapp.com/
 */
function get_avatar_cache($avatar){
	if($_SERVER['PHP_SELF'] == '/wp-admin/options-discussion.php')
		return $avatar;
	$s = new SaeStorage();
	$tmp = strpos($avatar, 'avatar/') + 7;
	$avatar_id = substr($avatar, $tmp, strpos($avatar, '?') - $tmp);
	$tmp = strpos($avatar, 'avatar/') + 7;
	$pattern = "/(<img.* src=\')([^\']*)(\'.*)/";
	$avatar_url = preg_replace($pattern, "$2", $avatar);
	$avatar_url = str_replace("&amp;", "&", $avatar_url);
	$avatar_file = 'avatars/' . $avatar_id . '.png';
	//echo '<!--' . $avatar_url . '-->
	//		<!--' . $s->getUrl('wordpress', $avatar_file) . '-->';
	if(!$s->fileExists('wordpress', $avatar_file)){
		$content = @file_get_contents($avatar_url);
		if(!$content)
			return $avatar;
		$attr = array('expires' => 'now plus 14 day');
		$result = $s->write('wordpress', $avatar_file, $content, -1, $attr);
		if ($result != true)
			var_dump($s->errno(), $s->errmsg());
	}
	$avatar = preg_replace($pattern, "$1" . $s->getUrl('wordpress', $avatar_file) . "$3", $avatar);
	return $avatar;
}

add_filter('get_avatar', 'get_avatar_cache');

What's New?

  1. 修正了后台讨论页面头像无法显示的错误;
  2. 防止获取Gravatar头像失败时出现Warning,影响界面美观。
如需转载请注明出处:蓝飞技术部落格

5 条评论 »

  1. 您好,问一下,文中的那个代码框是怎么弄出来的?我昨晚开通个SAE,可在编辑器里没有找到CODE按钮,请问是用的哪个插件?

    1. 是我经过修改汉化后的CodeColor插件:
      http://lanfei.sinaapp.com/2012/04/592.html

  2. 有BAE版么...

  3. 这个貌似失效了,缓存不到头像,希望可以解决!