wangsisi 发表于 2011-5-31 17:56:04

MediaWiki中的各种缓存(Cache)设置

MediaWiki是纯动态网站,每个页面都需要调用数据库数据来生成,这必定会使访问变慢,但该软件设计时可以使用多个层次、多方面的缓存机制,包括页面缓存、应用缓存、PHP缓存:
页面缓存
  让前端截留大部分重复的访问,可以用通用的Squid反向代理(还有一种叫Varnish的软件,功能好像类似),将匿名用户访问过的常见内容缓存起来提供给后来的访问者以便加速访问,还有MediaWiki本身自带的file caching,这种文件缓存方式类似国内的一些论坛软件生成.html的静态HTML文件,Apache处理起来很快,也不需要读取数据库内容。
  一般是推荐大型网站采用专门Squid服务器,Wikipedia甚至使用数百台的大规模Squid阵列。小型网站采用File Cache简单一些。有些网站是干脆采用了两级页面缓存,Squid和File Cache都用。不过需要注意更新机制以及File Cache中保存的报错页面的处理。
应用缓存
  页面缓存主要是针对匿名访问用户,但对于注册登录用户(或者匿名用户第一次访问以及每次缓存更新后的第一次访问)来说,还可以使用更多的缓存机制,可以利用通用的eAccelerator或者Memcached的办法,也可以缓存到数据库中。
  可以缓存下面几类信息:
$wgMainCacheType 对于通用对象
$wgParserCacheType 对于解析对象
$wgMessageCacheType 对于界面信息对象
  一些网站的eAccelerator会用到,但调试其它功能时取消了没有恢复。Memcache还没有用过。目前主要是通过数据库方式来做缓存的,因为还是要存取MySQL所以效果可能比前两种要差一些。
PHP缓存
  PHP代码的预编译,据说可以稍微减少PHP代码的执行时间,维基百科系列网站是使用的APC技术。
其它缓存
  Manual:Configuration_settings#Cache这里汇总了MediaWiki的各种缓存设置,包括一些Sidebar缓存、Interwiki缓存等细节。
  除了标准的MediaWiki程序以外,在扩展程序方面,动态页面列表(Dynamic Page List)无疑是一个非常消耗数据库资源的功能,但如果不用的话,很多功能无法实现,我们只有在注意保持网站基本功能的前提下精简一些DPL扩展的使用,另外,最近还查到DPL本身也可以利用缓存机制,详细情况:allowcachedresults、dplcache,我们找到这个缓存功能后已经运用到网站中,前段时间MediaWiki 1.15中包含DPL的页面都不产生静态文件缓存页面的,在Local设置“ExtDynamicPageList::$respectParserCache = true;”后现在也生成了HTML文件,而在MediaWiki 1.10中没有找到整体设置的办法,就暂时修改各个调用DPL的页面及模板。
相关问题
  另外,还看到一些资料中说有几种Expensive功能,对数据库资源消耗大,它们是:
{{#ifexist:}} (来自ParserFunctions扩展)
{{PAGESINCATEGORY}}/{{PAGESINCAT}} (魔术字)
{{PAGESIZE}} (魔术字)
  后两者是MediaWiki 1.10以后才推出的

页: [1]
查看完整版本: MediaWiki中的各种缓存(Cache)设置

美国主机评测网站