如何缓存 Gravatar 至本地服务器

早些时候, Wordpress 还没有将 Gravatar 做成原生功能。当时存在一批 Gravatar 增强插件,其中 Gravatar2 有个不错的选项可以将评论者的头像缓存至本地。

Wordpress 缓存 Gravatar 的好处显而易见,它可以减少 Blog 站外文件的请求数量,加速页面的载入。要知道 Gravatar 服务被全球不计其数的站点使用, 其服务器压力可想而知。遇上高峰时段,Gravatar 铁定会成为影响我们 Blog 加载速度的瓶颈。尤其使用国内空间的同学,感觉应该更为明显。

现在人人都用上了 Wordpress 内置的 Gravatar,倒也没有必要返回去找 Gravatar2。原本我是想这么做的,可是看过它的功能列表之后还是算了。太强大,太小题大做。

后来我转而找到一位美籍华人写的小组件 - Generic Gravatar Cache,该组件主要提供非 Wordpress 的 CMS 缓存 Gravatar 的需求,我们可以拿这个小东西套回 Wordpress。

需要说明的是,它不是 Wordpress 的插件,并非上传激活就可以用的东西。嫌麻烦的同学可以不看了。

接下来,使用方法中文化文档开始。

1. 去作者主页下载该组件,解包,上传。路径随意,我放在 /gravatar 目录下。

2. gravatar 目录内应该有两个文件夹: cache 和 profile;三个文件: index.php, .htaccess, mysql.sql

3. 赋予 cache 文件夹 755 权限: chmod a+w 。

4. 本地新建一个 php 文件,写入以下内容,文件名 avatar.php,上传至 profile 文件夹内。请自行更改相应内容符合自己的需求。切记要放置默认头像。

<?php
$config['default'] = 'http://domain.com/default-gravatar.png';//无头像时返回的默认头像路径
$config['rating'] = 'PG';//gravatar的内容级别
$config['size'] = 64;//头像尺寸
?>

5. 编辑 .htaccess 文件,默认 RewriteRule . index.php [L] ,请依照你的实际放置目录修改,比如我的是 RewriteRule . /gravatar/index.php [L]

6. 打开 wordpress 模板的 comments.php 文件,查找

<?php echo get_avatar( $comment, 32 ); ?>

替换为

<img src="http://yourdomain/gravatar/cache/avatar/<?php echo md5(strtolower($comment->comment_author_email)); ?>" alt="" />

细心的同学应该会发现,路径中的 avatar 其实就是第四步创建的那个 php 文件的名字。你还可以创建不同的 Profile 应用在各个地方。

到此,Wordpress 缓存 Gravatar 至本地的操作便完成了,首次缓存的头像日后会被直接调用而无需再跑到 gravatar 查询。快就快在这里,省略查询的时间,静态化 Gravatar。

Note:使用 Nginx 的服务器可能暂时不支持 Generic Gravatar Cache。我不熟悉 Nginx,帮不上忙。

P.S 担心缓存占用空间的同学,可以定期清理缓存。

Tag(s): ,
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
Shawn Published@15:20 / 2008-10-15 / Trackback / Skip
34 Comments Contributed by Visitors
  1. rebuttoncosbeta / 16:02@2008-10-15 1
    cosbeta

    吧头像作为背景传输就没有这个问题了,哈哈

  2. rebuttonShawn / 16:05@2008-10-15 2
    Shawn

    但会更麻烦的。

  3. rebuttonNetPuter / 17:20@2008-10-15 3
    NetPuter

    缓存?感觉不太需要吧..
    没有缓存的话是不是就是会拖慢网页速度?

  4. rebuttonShawn / 17:25@2008-10-15 4
    Shawn

    @NetPuter: 评论多了你就会看出区别了,毕竟从 Gravatar 的服务器请求图片速度肯定不如直接从你自己的服务器上请求的速度快。

  5. rebuttonNickyYe / 17:35@2008-10-15 5
    NickyYe

    两者之间肯定要做权衡的,缓存的话也要存好多文件,况且我的本地速度感觉还不比gravatar的快......

  6. rebuttonShawn / 17:54@2008-10-15 6
    Shawn

    @NickyYe: 我用的 cron job,一个礼拜清理一回。其实一个礼拜下来也没多少图片,有请求才会缓存。Gravatar 还算快吧,但是慢的时候也挺吓人的。

  7. rebuttonShawn / 17:56@2008-10-15 7
    Shawn

    @NickyYe: 话说我现在打开你的 blog,最慢最后载入的就是 Gravatar。

  8. rebuttonasiapan / 18:12@2008-10-15 8
    asiapan

    How to写得很好很详尽, :grin: 大侠就应该多分享点东西出来嘛

  9. rebuttonShawn / 18:14@2008-10-15 9
    Shawn

    @asiapan: 我很懒,但是这两天没写什么,也不知道要写什么,就想起写这个了。。。

  10. rebuttonxiaorsz / 18:54@2008-10-15 10
    xiaorsz

    :smile: 学习了!!对速度的追求无止境啊!!

  11. rebuttonShawn / 19:14@2008-10-15 11
    Shawn

    @xiaorsz: 要是放在国内空间就不用这么追求了,不过国内的空间不是太让人满意。

  12. rebuttonNickyYe / 19:41@2008-10-15 12
    NickyYe

    还行吧,ff本来缓存做的就很充分

  13. rebuttoniColor / 20:23@2008-10-15 13
    iColor

    我是来玩左侧箭头的,,
    有没有考虑过设置为鼠标over时自动滚屏??对留言多的页面很有用.
    要不只是点一下就到头/尾,感觉实用性少了点 :cool:

  14. rebuttonShawn / 21:47@2008-10-15 14
    Shawn

    @iColor: 主要是实现不能实现的功能,就是直上直下。一般人看网页都习惯用鼠标滚动吧。而且我处理不好浏览器卡的问题,所以连直上直下都只能让它快点,滚慢了都有卡的感觉。

  15. rebuttonleehow / 22:20@2008-10-15 15
    leehow

    不管如何,我装了。左边的箭头很好看。

  16. rebuttonShawn / 22:24@2008-10-15 16
    Shawn

    @leehow: 当然了,又不用你自己装。。。

  17. rebuttonYacca / 22:24@2008-10-15 17
    Yacca

    我的评论多...的确有这个问题...但整个页面做完优化后的加载速度还可以,所以暂时不动它.

  18. rebuttonShawn / 22:33@2008-10-15 18
    Shawn

    @Yacca: 你评论多,用这个本地缓存的效果十分明显,图片应该会先于网页加载完成。

  19. rebutton老所 / 1:11@2008-10-16 19
    老所

    嘿嘿

    我没这个问题

    因为我的评论太少了:(

  20. rebuttonShawn / 1:28@2008-10-16 20
    Shawn

    @老所: 可能我是真的有点过于追求速度了。。

  21. rebutton老所 / 1:59@2008-10-16 21
    老所

    Shawn:

    你评论回复了会发邮件这个功能真不错,请问这个是用什么插件实现的?

    而且,觉得你真细心啊,邮件还是中英双语的,呵呵。建议再加些语言,:)

  22. rebuttonShawn / 2:07@2008-10-16 22
    Shawn

    @老所: 可以在这里下载。不是我细心,是人家后台原本就有两种语言,我只是改写了一下内容和样式。

  23. rebuttonShawn / 2:15@2008-10-16 23
    Shawn

    @老所: 对了,需要使用一定的格式才能触发邮件功能,就像你看到的。

  24. rebuttonan9 / 9:22@2008-10-16 24
    an9

    路过。

  25. rebuttoniColor / 9:39@2008-10-16 25
    iColor

    @老所:
    Wordpress Thread Comment也不错,我blog用的是,,

  26. rebuttonYacca / 9:59@2008-10-16 26
    Yacca

    突然想到了一个问题,头像缓存在本地...也是一堆不小的文件啊...-.-我的留言本什么的要是被打开一次,几百个图片文件就要被加载一回-.- 恐怖的流量

  27. rebuttonShawn / 12:57@2008-10-16 27
    Shawn

    @Yacca: 比如你在我这里,随便留过多少次言,在多少篇文章里留过言,实际只占用空间里的一张图片缓存,因为你邮件地址没有变过嘛。每张图片不到 2kb。。。

  28. rebuttonYacca / 13:05@2008-10-16 28
    Yacca

    @Shawn: 这2kb*n也是很恐怖的...发现你还有加载ico...

  29. rebuttonShawn / 13:08@2008-10-16 29
    Shawn

    @Yacca: ico 是直接从 google 调用的,那个不费流量。

  30. rebuttonShawn / 13:11@2008-10-16 30
    Shawn

    @Yacca: 你那里每个月有多少流量限制?如果流量紧张就还是算了,我这里每个月有一大把剩余。。。

  31. rebuttonYacca / 13:47@2008-10-16 31
    Yacca

    我流量15G 每个月大概耗费10+吧,略剩一点-.-
    ico从google调用,这个办法似乎看到过,不过无意间又增加了页面内的元素了 累...
    建议你多搞几个不同颜色的css...嘿嘿 这个灰色的我看了有段时间了,亮丽型的来一个

  32. rebuttonShawn / 14:15@2008-10-16 32
    Shawn

    @Yacca: 有空我还是重新做一个吧,这个我实在不想再改了,都无聊了。。。

  33. rebuttonStuart / 14:27@2008-10-16 33
    Stuart

    好玩!

  34. rebuttonxiaorsz / 14:35@2008-10-16 34
    xiaorsz

    速度果然很快!!

  35. rebuttonShawn / 14:41@2008-10-16 35
    Shawn

    @xiaorsz: 我觉得还是不够快。。。

  36. rebutton老所 / 14:56@2008-10-16 36
    老所

    @iColor:

    我装了Shawn提到的这个email回复的插件,挺不错的,至于Thread Comment,我听说Wordpress将集成,所以还是等以后得官方集成吧,尽量少装插件。

  37. rebuttondisinfeqt / 13:21@2008-10-17 37
    disinfeqt

    其实还好 毕竟WP的博客留言又不是成千上万的 几十条的话还在承受范围内
    实在不行可以像YACCA那样把留言做个分页... :grin:

  38. rebuttonShawn / 13:59@2008-10-17 38
    Shawn

    @disinfeqt: 做分页可能有时候让访者觉得麻烦,遇上网速不行的时候放在国外也痛苦。我测试了一下,缓存 Gravatar 对有10条以上留言的页面都有更快的打开速度。当然,也可能是我太在意那么一点点速度了。。。

  39. rebutton痞子C / 0:19@2008-10-18 39
    痞子C

    那个上下感觉现在一碰就有~~
    哈哈,还是觉得点的合适一点点

  40. rebuttonShawn / 0:20@2008-10-18 40
    Shawn

    @痞子C: 谢谢提醒,我昨天试试玩儿忘了弄回来。。。

  41. rebuttonJor / 12:26@2008-10-25 41
    Jor

    这个好,我去试试。 :grin:

  42. rebuttonBetty / 15:15@2008-11-24 42
    Betty

    gravatar太慢了,自己博客的服务器也不快……愁人啊

  43. rebuttonShawn / 0:19@2008-11-25 43
    Shawn

    @Betty: 博客服务器理论上会比 Gravatar 的服务器快一些,因为都是同一个地方请求。

  44. rebuttonAlan / 22:55@2008-11-25 44
    Alan

    能问一下你用的是什么代码加亮插件啊?

  45. rebuttonShawn / 22:57@2008-11-25 45
    Shawn

    @Alan: 哈哈,真的唬住人了,我没用代码高亮,你搜索一下发芽网,是代码转换的一个在线工具。

  46. rebuttonAlan / 22:59@2008-11-25 46
    Alan

    @Shawn:  :???: 不过这个样式很漂亮

  47. rebutton支持 / 8:54@2008-12-08 47
    支持

    :sad: :wink:

  48. rebuttonskyblue / 13:17@2008-12-18 48
    skyblue

    其实未必会快多少.浏览器都有并发连接数的限制的.

  49. rebuttonShawn / 13:25@2008-12-18 49
    Shawn

    @skyblue: 呵呵,这个吗,你亲自试过就知道了。小众软件刚刚用上,页面载入速度提升了很多。并发数确实是个问题,但是没有触及根本,这种方式省略了一次查询,类比就是 php 和纯 html 下载。

  50. rebuttonneekey / 18:53@2008-12-18 50
    neekey

    很有用~谢谢了。我就直接调用你站里的Gravatar系统好了 :)

  51. rebuttonShawn / 18:57@2008-12-18 51
    Shawn

    @neekey: 哈哈,我这里没有你要的分辨率。

  52. rebuttonAlex / 12:52@2009-02-27 52
    Alex

    我用这个的方法缓存差不多一个月了,但发现一个问题,默认的头像无法调用,是不是一定要放在根目录才可以的??

  53. rebuttonLeeiio / 1:15@2009-02-28 53
    Leeiio

    如果能修改成默認的話按照wp的後台的默認頭像設置就好了,畢竟裡面有套裝的默認頭像,不至於出現相同的默認頭像而導致過於單調~

  54. rebuttonchancat / 14:30@2009-05-16 54
    chancat

    avatar 不是上传到profile文件夹里么。怎么替换的时候又跑到
    gravatar/cache/avatar cache里面了啊

  55. rebuttonchancat / 1:29@2009-05-17 55
    chancat

    唉 试了好多次了 头像总是XX。。。会不会是使用了 缓存插件的原因饿、。

  56. rebutton万戈 / 14:38@2009-07-05 56
    万戈

    请教一下,为什么我启用缓存gravatar之后,只有第一条评论头像被缓存,而该条评论后的回复头像都没有缓存。。。?

  57. rebuttonxiao3 / 23:18@2010-04-30 57
    xiao3

    似乎还有一种更简单的方法!

Leave Comments Here...

必填

必填&保密

随您

支持Ctrl+Enter快捷提交

  • 已部署"白忙活" Anti-Spam 系统,猪肉 Spammer 请注意查看源代码链接处。
  • 本站不会泄露您的邮件地址,敬请放心。
  • 支持常用 HTML 代码调用,插入 PHP 代码需注意:< = &lt;> = &gt;
  • 仅当某人针对您的评论做出回应时,您才会收到由本站发出的通知信件。
  • 如您希望以相同方式通知某位网友,请点击 Reply 按钮,或自行输入 @对方名字:
  • 鼠标移至评论列表中的 @someone: 区域即可自动显示 someone 的评论内容。
6 Trackbacks/Pingbacks
  • 加速 WordPress | Lorz™ (Pingback, 2008-12-09)
    [...] (以上方法来自 aw)大概就这么多了,如果你还不满足,可以看看 shawn 的 《如何缓存Gravatar 至本地服务器》,我嫌麻烦就没弄,呵呵,我对现在的速度很满足了。如果你还有别的高招,不妨留言哈~ 2008年12月9日00:01 分类: WordPress   标签: CSS, WordPress, 技巧 订阅评论 发表评论 | Trackback [...]
  • WordPress中YSlow测试的A级攻略 | SMARTR.CN (Pingback, 2008-12-22)
    [...] 还有是减少外链请求,比如最常见的FeedSky订阅数链接就给我取消了(那个东西经常链接超时,气人),换成本地的图片。不得不提的是,WordPress中评论部份的访客头像的请求问题。如果留言人数多了,一大堆的外引Http头像请求,基本上你的评分会被降低至少一个级别。还好Shawn同学提供了一个缓存 Gravatar 至本地服务器的办法,很好地解决了头像对网速还有评分的影响,建议大家也这样操作,效果明显。 [...]
  • WordPress中YSlow测试的A级攻略 | 上善若水 Feed博客聚合 (Pingback, 2009-02-08)
    [...] 还有是减少外链请求,比如最常见的FeedSky订阅数链接就给我取消了(那个东西经常链接超时,气人),换成本地的图片。不得不提的是,WordPress中评论部份的访客头像的请求问题。如果留言人数多了,一大堆的外引Http头像请求,基本上你的评分会被降低至少一个级别。还好Shawn同学提供了一个缓存 Gravatar 至本地服务器的办法,很好地解决了头像对网速还有评分的影响,建议大家也这样操作,效果明显。 [...]
  • 小站也玩图片独立 (Pingback, 2009-06-06)
    [...] 方案:图片上传到应用服务器后,直接在文章中使用图片服务器的地址。图片服务器通过URL Rewrite把所有图片访问Rewrite到一个PHP文件,PHP文件在第一次访问的时候从应用服务器把图片Download到本地并显示给用户,以后直接读取本地。受Shawn的如何缓存Gravatar 至本地服务器所启发。 [...]
  • 更换空间 + 再次提速之 Gravatar 头像缓存 « 杂 (Pingback, 2009-10-05)
    [...] (方法来自 iShawn 的博客 : 如何缓存 Gravatar 至本地服务器) [...]
  • 还在折腾:十行代码搞定Gravatar缓存 | 我是清都山水郎 (Pingback, 2009-10-22)
    [...] Shawn的《如何缓存 Gravatar 至本地服务器》 [...]

Shawn Blog

Shawn的个人博客(Blog),分享Wordpress技巧和Firefox浏览器心得,关注Web 2.0应用发展,记录对虚拟主机的使用评价。