当前位置: 首页 > 工具软件 > Lilina > 使用案例 >

Lilina的简单预缓存加速---缓存应用案例,可以做bbs缓存参考

翟展
2023-12-01

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);

 
 类似资料: