最新消息:点击查看大S的省钱秘笈

解决Gravatar默认头像无法缓存问题(Vary: Accept-Encoding)

系统技巧 Slyar 13933浏览 2评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

website_speed_test

Gravatar(Globally Recognized Avatar),全球公认头像,是一项免费的服务,用邮箱注册以后,可以上传自己的头像,之后在任何支持Gravatar(比如WordPress)平台上使用邮箱评论时,都会自动调用你在Gravatar上设置的头像。如果需要修改头像,只需要再次登录Gravatar修改就好了,之前所有的评论头像都会跟着修改

如果你没有设置Gravatar,系统会根据系统设置自动放置一个默认头像,这个默认头像可以通过回调函数来实现,比如:

http://www.gravatar.com/avatar/91ec0272dd603a7749f0f6f56bf33862?s=36&d=http://www.slyar.com/blog/wp-content/themes/d8/img/default.png&r=g

这里会先尝试通过UID=91ec0272dd603a7749f0f6f56bf33862调取你的Gravatar头像,如果头像不存在,则使用默认头像这里比如http://www.slyar.com/blog/wp-content/themes/d8/img/default.png

详细参数查看 Codex: Using Gravatars

然而某些模板/主题的设计师并没有考虑性能问题,尽管很多人都没有设置Gravatar头像,尽管最后结果都是默认头像,但是由于回调函数的缘故,浏览器并不认为这些URL都是指向同一个默认头像的,在这些头像的request header中你能看到Vary: Accept-Encoding,所以对于所有的默认头像,浏览器都会当成是unique的请求,无法缓存,而且也增加了无谓的请求数目

下面开始hack,我只拿我现在用的模板举例,文件都在模板根目录下:

./function.php

增加一个函数validate_gravatar,根据邮箱判断头像是否存在,不存在返回404,存在返回200

修改原本的头像显示代码,头像存在调用头像,头像不存在直接返回默认头像URL,不使用回调函数

./widgets/wid-readers.php

侧边栏同理,因为validate_gravatar已经写在function.php里面了,这里不用重写

写完测试一下,所有的默认头像现在都是统一本地URL了,缓存工作良好

转载请注明:Slyar Home » 解决Gravatar默认头像无法缓存问题(Vary: Accept-Encoding)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 一直用多说的缓存来着,最近发现头像不能正常显示了
    无聊赚7年前(2016-12-18)回复