何东也安装了一个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个小时后才过期,一个小时内不要再向服务器发送请求,这样如果一个用户在一个小时内多次访问的话,也不会向服务器发送多个请求了(直接利用浏览器本地的缓存)。关于客户端缓存和服务器端缓存机制,可以进一步参考一下缓存设计一文。
主动缓存和被动缓存:
你使用Planet也会发现,Planet是采用的主动缓存触发的机制:一个后台的程序每隔几分钟(由你自己设置crontab)主动去同步RSS并导出成静态页面。
其实Lilina把RSS输入/输出的逻辑已经做的很好了,如何加速这个程序:完全是你自己的缓存设计的问题。
如何对比Lilina和其他客户端工具呢:
其实我使用lilina就是为了帮助我关心的内容能被更多人看到,所以Lilina是一个发布共享工具。如果你不需要共享的话,当然完全可以使用自己的客户端工具。
你完全可以将LILINA订阅的RSS再烧制成另外一个聚合后的RSS: 这不就是你自己的个人FeedBurner吗?
2005-05-08
终于无法忍受首页的速度:完全无法达到8秒定律的要求,于是将lilina.php用wget在crontab中定期成生成了一个静态页面:
# hourly lilina dump
1 * * * * (/usr/bin/wget -O /home/apache/chedong.com/www/lilina.html http://www.chedong.com/lilina.php)
哈,符合2秒定律了。
2005-05-09
网站一周记:我也有自己的网摘了,RSS每天自动DUMP生成的。
以前的RSS订阅一直是流水帐:只在首页显示最新一周的内容。忽然觉得这些内容还是很有价值的,于是做了了一个归档工具,每天用WGET将RSS内容归档到 Yesterday Digest@CheDong.com目录下,每天一个。
2005-11-10
修正了MAGPIE_CACHE_AGE和MAGPIE_FETCH_TIME_OUT的理解错误
// remote fetch time out after 10 seconds
define('MAGPIE_FETCH_TIME_OUT', 10);
// cache expire in 3 hours
define('MAGPIE_CACHE_AGE', 60 * 60 * 3);
版权声明:可以转载,转载时请务必以超链接形式标明文章 Lilina的简单预缓存加速 的原始出处和作者信息及本版权声明。
http://www.chedong.com/blog/archives/000742.html
Comments
谢谢车兄,让我重新有了使用这个软件的勇气。刚刚安装上新版,但有个小问题,我在调用edit.php时,出现的错误提示是:Fatal error: session_start(): Failed to initialize storage module: user (path: /usr/local/ses) in /usr/local/www/blog/muchmusic/mp3/inc/sessionauth.php on line 9
服务器不是我的,我对这些都是新手,车兄能帮我判断一下问题出在什么地方吗?该怎么解决?
由: wewe 发表于 2005年04月15日 夜间01时17分
谢谢车兄提供的好问,思路清晰了很多。开始直接把php放在crontab执行,就遇到权限问题。用了wget就没有问题了。
由: tristones 发表于 2005年04月15日 下午12时02分
呵呵,我是直接把php放在crontab执行,15分钟一次,然后把index.php的加'MAGPIE_FETCH_TIME_OUT'设成一个月过期,浏览速度还好。
由: kiral 发表于 2005年04月20日 傍晚08时30分
今天刚设计了另一个cache的方法:生成静态页面,可以避免使用header强迫浏览器cache页面,或虚拟主机用户没权限使用cron的问题。
文章地址:
http://www.hzqbbc.com/blog/arch/2005/05/aersselilinaceh.html
但是需要改动lilina的程序。跑了几个小时,感觉还行。
由: hzqbbc 发表于 2005年05月11日 下午01时39分
hehe 我的lilina也是用crontab定时wget的 一直是访问html文件 非常快的说
由: BunnyQ 发表于 2005年05月26日 下午02时07分
> 2 将缓存时间设置为4个小时过期(缺省为1个小时):这样每次访问的时候同时又多个RSS同时过期的几率就会小很多。
> 具体做法是在Lilina的输出脚本中增加'MAGPIE_FETCH_TIME_OUT'全局变量:单位是秒
> define('MAGPIE_FETCH_TIME_OUT', 60 * 60 * 4);
这个做法是错的,应该在conf.php中修改MAGPIE_CACHE_AGE常量。
由: 幽灵多啦 发表于 2005年08月20日 下午04时22分