何东也安装了一个Lilina:Info-Aggr for Hedong,他觉得太慢。
如何加速呢:Lilina的RSS更新是一种动态触发的缓存更新机制,当每次有用户访问请求的时候,lilina检查cache目录中相应RSS的缓存,如果没有缓存或者缓存过期了,就立刻去服务器上取。而慢一般就慢在这个RSS的同步上了,比如:每天早上第一次访问,所有的RSS都需要更新,而订阅的RSS又非常多的情况下速度就非常慢了。 减少每次访问时触发RSS更新的几率是提高速度的关键。
我的方法:
1 使用wget导出成静态页面或者按照一定时间强制RSS更新
我在crontab中增加了:
# chedong's homepage
*/10 * * * * (/usr/bin/wget -O - http://www.chedong.com/)
这样后台就能每10分钟去取一次RSS结果页,这样:一般用户看到的时候可以大大降低没有命中缓存的情况。"wget -O -"表示输出到标准输出,完全可以改成 wget -O /home/path/to/lilina/index.html 这样用户就直接访问导出的index.html了,和PlanetPlanet效果一样。
2 将缓存时间设置为4个小时过期(缺省为1个小时):这样每次访问的时候同时又多个RSS同时过期的几率就会小很多。
具体做法是在Lilina的输出脚本中增加'MAGPIE_CACHE_AGE'全局变量:
单位是秒 缺省是3600秒 比如要改成4小时
define('MAGPIE_CACHE_AGE', 60 * 60 * 4);
其实大部分BLOG每周只有少量更新,达到4个小时的同步延迟速度已经足够了(Google的新闻的更新周期才3个小时)。
3 控制你的RSS数据源个数:
如果RSS有上百个,Lilina每次都要检查上百个的缓存文件,所以即使缓存文件都是最新的,检查过程也会非常漫长。我个人觉得控制在RSS在20个以下比较好,建议经常删除一些你不关心的或者更新很慢的BLOG。
4 客户端浏览器本地缓存:
在lilina输出程序的开头增加以下Header:
// always modified now
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// Expires one hour later
header("Expires: " .gmdate ("D, d M Y H:i:s", time() + 3600). " GMT");
告诉浏览器:这个网页1个小时后才过期,一个小时内不要再向服务器发送请求,这样如果一个用户在一个小时内多次访问的话,也不会向服务器发送多个请求了(直接利用浏览器本地的缓存)。关于客户端缓存和服务器端缓存机制,可以进一步参考一下缓存设计一文。