Lilina的简单预缓存加速


何东也安装了一个LilinaInfo-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);

作者:车东 发表于:2005-04-13 19:04 最后更新于:2007-04-22 21:04
版权声明:可以转载,转载时请务必以超链接形式标明文章 的原始出处和作者信息及本版权声明

引用通告

以下是前来引用的链接: Lilina的简单预缓存加速:

» lilina缓存加速:加入MAGPIE_LOAD_CACHE_ONLY模式 来自 车东[Blog^2]
订阅的Feed越来越多,即使基于简单的配置缓存速度有时候也经常跟不上:网站经常出现只剩下右边半边的情况,就是由于缓存期间抓取远程的网页超时导致的。其实Planet和Gregarius一样,都是... [阅读更多细节]

» lilina缓存加速II:加入MAGPIE_LOAD_CACHE_ONLY模式 来自 车东[Blog^2]
订阅的Feed越来越多,即使基于简单的配置缓存有时候也经常速度跟不上:网站经常出现只剩下右边半边的情况,就是由于缓存期间抓取远程的网页超时导致的。其实Planet和Gregarius一样,都是... [阅读更多细节]

» lilina静态化 来自 TONYHEAD V.0709
大懒唐首页系一个lilina新闻聚合器,它会把特定的RSS FEED聚合在这里,就像其他阅读器,有一个更新时间和频率的问题。现在只有5个源,所以每次更新(默认是4小时)在服务器端并不花太多时间,我考虑的是在客户端的浏览速度,每个客户端第一次浏览服务器端都要根据时间过滤(默认48小时的POST),所以造成每一个访问都要lilina过滤内容。有的做法是include一个由事件驱动静态化过的lilina.html,调节cache生存或者客户端timeout时间。但这个空间有shell :P,以下做法可以忽... [阅读更多细节]

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
服务器不是我的,我对这些都是新手,车兄能帮我判断一下问题出在什么地方吗?该怎么解决?


谢谢车兄提供的好问,思路清晰了很多。开始直接把php放在crontab执行,就遇到权限问题。用了wget就没有问题了。

呵呵,我是直接把php放在crontab执行,15分钟一次,然后把index.php的加'MAGPIE_FETCH_TIME_OUT'设成一个月过期,浏览速度还好。

今天刚设计了另一个cache的方法:生成静态页面,可以避免使用header强迫浏览器cache页面,或虚拟主机用户没权限使用cron的问题。

文章地址:
http://www.hzqbbc.com/blog/arch/2005/05/aersselilinaceh.html

但是需要改动lilina的程序。跑了几个小时,感觉还行。

hehe 我的lilina也是用crontab定时wget的 一直是访问html文件 非常快的说

> 2 将缓存时间设置为4个小时过期(缺省为1个小时):这样每次访问的时候同时又多个RSS同时过期的几率就会小很多。

> 具体做法是在Lilina的输出脚本中增加'MAGPIE_FETCH_TIME_OUT'全局变量:单位是秒
> define('MAGPIE_FETCH_TIME_OUT', 60 * 60 * 4);

这个做法是错的,应该在conf.php中修改MAGPIE_CACHE_AGE常量。

发表一个评论

(如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。)

相关文章

关于

此页面包含了发表于2005年04月13日 傍晚07时26分的 Blog 上的单篇日记。

此 Blog 的前一篇日记是 免费杀毒软件下载:AVG Avira Avast

此 Blog 的后一篇日记是 周日:潭杯山-潭柘寺拉练

更多信息可在 主索引 页和 归档 页看到。

Creative Commons License
此 Blog 中的日记遵循以下授权 Creative Commons(创作共用)授权.
Powered by
Movable Type 3.36