Joomla之门广告招商,PR=5,alexa 排名2万1
English French German Italian Portuguese Russian Spanish

捐款 -> 升级 -> 下载

淘宝捐款升级到高级会员

点击这里给我发消息

Donate to joomlagate.com to translate more Joomla! extensions and free Joomla! templates

下载最新版本 Joomla!

Joomla! CMS - free Joomla! templates
download Joomla! 1.5.15 Chinese version

文章分类阅读

会员登录

 
 
Joomla之门 Joomla教程 Joomla! SEO Joomla SEO:用 PageCache 缓存技巧加速你的网站
Joomla SEO:用 PageCache 缓存技巧加速你的网站 E-mail
作者:白建鹏   
2008-10-27

台湾人把 Cache 翻译为“快取”真是太传神了!完全符合“信、达、雅”的翻译标准。我们大陆用“缓存”来翻译,左看右看,怎么看都给人一种“慢”的感觉。我想大陆人也没有这么笨吧,于是我查了一下灵格斯翻译家里面的《英汉双解计算机词典》,原来“缓存”是“高速缓冲存储器”的简称,指“(计算机的)快速缓冲贮存区, 包含电脑很快会需要的资料的存储区”。呵呵,缓存不缓!

我的粗浅理解就是:缓存可以让电脑(服务器)更快地处理频繁使用的数据。对于 Joomla! 建站来说,你当然希望不断有人来访问你的网站,那么就等于某些相同的页面不断被浏览器向服务器发出请求来提取并展示。如果使用了缓存,服务器就可以更快速的提供这些页面,从而令前台的访客感到网站速度很快。顺便说一下,Google 这样的搜索引擎也喜欢速度快的网站。因此,想办法加快网页的打开速度对于网站 SEO 很有帮助。

本文将介绍用于 Joomla! 1.0.x 平台的一些缓存技巧。主要涉及两个组件:JRE CachePageCache

 

其实无论 Joomla! 1.0.x 还是 1.5.x 平台,核心都已经自带“缓存”选项。在“全局设置”中可以找到。这说明 Joomla! 官方对于 Cache 这个功能还是比较认可的。

 

为什么要用缓存功能?

在过去,全静态网站是不需要缓存的。因为静态网站不涉及数据库的存取,只是对文件系统的访问。

如今动态网站成为主流。动态网站的优点是容易做到内容与外观分离,容易实现网页内容的交互性(Interactivity)。当访客在浏览器地址栏输入一个网址来访问动态网站的某个网页时,在服务器端这个指令实际上是“兵分两路”:一边从文件系统中提取框架样式,另一边从数据库中提取内容数据,最后组合成完整的页面,返回给给浏览器,就是访客所看到的样子。由于每次访客的页面请求都要产生一次数据库查询,因此加重了服务器的负担。实际上很多动态网站的内容并不是每个页面都“动态”,很多页面内容也是在一段时间之内保持相对不变。

对于这些段时间内没有变化的内容,就可以将完整页面做一个“快照”,然后作为临时文件保存在某个目录中,在短时间内,如果有访客请求同样的页面,服务器就无需向数据库发起查询,而是直接将刚才保存的“快照”拿出来给他看 —— 将原来的“兵分两路”变成了“兵合一处”。这就是缓存。这样做的好处就是加快了前台页面打开的速度。

因此,服务器端实施缓存的一般方式是“文件系统”,将页面的“快照”版本保存在缓存目录中。

手动修改过 J1.0 的 /configuration.php 文件的用户一定记得,在该文件中,专门有一项设定“缓存路径”($mosConfig_cachepath),其默认值就是根目录下的 /cache 文件夹。这就是 Joomla! 1.0 用来保存页面缓存的目录。

 

缓存对 Joomla! 网站有什么意义?

Joomla! CMS 是一个动态内容管理系统。核心本身就带有多个组件,其中的 com_content 是管理文章的。而大多数网站都有或多或少的文章页面。不难想象,这些文章页面在发布之后,很多都不再修改。不信你回想一下你的 Joomla! 网站,那些文章页面多久更新一次?恐怕很多用 Joomla! 建的站在文章发布之后就永远不再修改了。

还有“联系”页面,除非你的联系方式变了,否则在 Joomla! 建站后谁会经常去修改“联系”页面?

同样的,“友情链接”组件的内容估计也不是频繁更新;“产品介绍”栏目的内容也不是频繁更新;“专家介绍”栏目、“会员博客”栏目等等,这些内容有可能更新,但不会很频繁。例如,可能在 24 小时内没有变化,或者 1 小时之内没有变化。

也就是说,对于一个确定在 1 小时内不会变化的页面,我们完全可以将它“缓存”59分钟。而对于一个月都不会更新的“产品介绍”栏目,我们至少可以缓存 29天!这将给服务器减少多少负担,同时给网站的打开速度加强多少!

 

缓存方式简介

遗憾的是,Joomla! 1.0.x 默认的缓存时间是不区分范围的,只是笼统的问你“缓存多久?”。如果你网站上某些页面1小时更新一次,某些页面1天更新一次,某些页面1个月更新一次,那么你只能选择最短的缓存时间。如果你选择了比较长的缓存时间,例如缓存 5 小时,那么更新较快的页面在有了新内容之后,前台仍然不会体现出来。

如果你的网站上还有一个更新特别频繁的区域,例如:论坛。那么很可能每 2 分钟就有一个新的帖子出现。如果将缓存时间设置为 1 分钟甚至更短,那就失去了缓存的意义。而对于你网站上另一些更新并不频繁的页面来说,不能拥有较长的缓存时间也很遗憾。

还有一个更复杂的情形就是:在很多网站上,文章系统带有“访客评论”功能。文章本身可能很久都不再更新,但是评论内容可能每天都有新的内容产生。这两者同时显示在同一个页面上,又该如何选择缓存的模式?

曾经有会员专门在我们论坛推荐过 一款全静态插件 Content Static,但该插件也不能区分哪些页面需要转为静态,哪些必须时时刻刻提取最新版本。

因此,我们对于理想的缓存方式的期望是:能够区别对待网站上更新频率不同的区域。

另外,必须了解一点就是,除了文件系统这种缓存方式,还有数据库的缓存方式。后者就是将网页快照存放在数据库,当服务器端接收到浏览器的请求,就直接从数据库中取出快照传输过去,无需再到文件夹里面提取样式框架。这两者哪一种效果好?这取决于具体的服务器环境。如果服务器上数据库比较繁忙,那么用文件系统做缓存当然效果好;反之,就应该选择数据库作为缓存位置。

近年来,随着内存芯片价格不断下降,过去昂贵的带 ECC 校验的服务器内存也便宜了许多。因此很多服务器都开始拥有 4GB 甚至更大内存。基于内存的缓存方式也逐渐兴起。无论“文件系统”还是“数据库”,其实都是存放在硬盘上的;而内存就不同了,大家都知道,内存的读取速度与硬盘不可同日而语!因此,如果有条件选择基于内存的缓存方式,那当然最好!

可是,正如你所看到的,Joomla! 只提供了“文件夹缓存”这么一种途径,也不能区别对待不同的内容区域。因此,其缓存机制实在太有限了!

这就引出了我们今天要介绍的两个工具 ——

 

{mospagebreak_scroll title=JRE Cache 与 PageCache 的简单介绍&heading=Joomla! 缓存的方式及意义}

JRE Cache 与 PageCache 的简单介绍

 

JRE Cache 与 PageCache 是目前我能找到的两个专门针对“缓存”功能来增强 Joomla! 系统性能的组件。首先请看下表的简单比较:

 

 

  JRE Cache PageCache
最新版本
3.0
2.0.1
免费软件
No
Yes
支持 Joomla! 1.0.x
Yes
Yes
支持 Joomla! 1.5.x
Yes
No
支持文件系统缓存方式
是 Yes
Yes
支持数据库缓存方式
No
Yes
支持内存缓存方式
No
Yes
支持 gzip 压缩输出
Yes
No
支持 gzip 压缩缓存
Yes
No
可以排除特定组件
Yes
Yes
可以排除特定模块
No
Yes
可以排除特定插件
No
No
兼容 JSMF 桥接器
No
Yes
可以随时手动清除缓存
Yes
Yes
可以暂停缓存
Yes
Yes
有中文界面
No
Yes
带统计功能
No
Yes

 

这两个软件我都简单测试过,上表中之所以有 JSMF 一项,是因为我当时是为了给我的网站挑选“加速器”,而本站正是采 用 JSMF 整合了 SMF 论坛。但是在 JRE Cache 官方网站看到,有很多人跟我一样安装了 JSMF,然后再安装 JRE Cache 就会导致 JSMF 桥接器无法工作。该组件作者在论坛都是针对每一个用户来手动帮助修改代码,实现对 JSMF 的兼容。而 PageCache 就没有这个问题,原生支持。

JRE Cache 似乎还有一个问题,就是很多人报告它与 VirtueMart 网上商店组件也有冲突。本站会员就曾经在 Joomla! 中文论坛报告过同样的问题

PageCache 的中文界面是我汉化的。本来也想汉化 JRE Cache,可惜该作者没有提供语言文件,只好作罢。

看完上面这个表,我想我认为 PageCache 应该更胜一筹。尤其是它支持基于内存的缓存方式,这一点很前卫!

尽管 JRE Cache 也有针对 Joomla! 1.5.x 的版本,但是我认为意义可能不大了。因为据 PageCache 在回答“PageCache 什么时候支持 J1.5 ”这样的问题时说,他已经在 Joomla! 1.6 核心中大幅改进了缓存机制(貌似作者 Ircmaxell 是 Joomla! 官方开发团队成员啊),因此不需要专门开发第三方组件了。

既然 Joomla! 1.6 快来了,J1.0 又快过时了,我写这个文章还有什么意义呢?

我认为可能还存在少数 Joomla! 1.0.x 用户,并且他们没有升级的愿望。那么,对这部分用户来说,就可以采用缓存技术加速网站。另外,我想我们可以在欣赏这些优秀软件同时,获取一些灵感,对于以后开发类似的 web 程序可以积累一些经验。

由于这些缓存增强组件需要凌驾(override)Joomla! 自带的缓存机制,因此它们的安装过程都会自动修改核心文件代码,如果你将来不需要它们了,在卸载时又会自动还原核心文件。而且这两个组件都在后台参数中有“还原文件”的按钮,方便随时取消功能。这就是上表中所说的“暂停缓存”。

既然 JRE Cache 又收费又不好用,我们下面简单说说 PageCache 的使用。

 

 下载 Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版
文件标题:Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版 (Details)
文件类型:zip
版本:1.2
文件大小:6 Kb
下载次数:39

 

{mospagebreak_scroll title=PageCache 缓存组件的启用}

 

PageCache 缓存组件的启用

 

PageCache 的安装过程跟安装其它组件一样,安装结束后并未生效,需要到其后台的“设置”页面启用。后台控制面板如下图所示:

 

PageCache Control Panel

 

点击“设置”就能看到如下画面:

 

PageCache Config

 

第一项参数就是是否启用。如果你想享用 PageCache 的加速功能,当然需要勾选启用。第二项参数是缓存时间,单位是秒。你必须根据网站上更新较频繁的区域来设定这个数值,例如:留言本可能每天四、五次,文章系统好几天才更新,那么就可以设置缓存时间为 2小时 —— 7200 秒,填写 7200 即可;最频繁的就不必考虑了,例如论坛,我们后面要解释如何排除对论坛的缓存。像某些小企业网站,所有页面都不需要经常更新的,完全可以将缓存时间设置为  24 小时,即 86400 秒。

请注意上图中“缓存方式”部分,Database 、Eaccelerator 和 File 三项是正常文字样式,表示当前可用,而 APC、MemCache 和那个没有需要向下滚动才能看到的 Xcache 以斜体字出现,表示当前不可用。这是因为我是 用 XAMPP 搭建了本地 Joomla! 测试服务器,没有这三项功能,因此不可用。

设定好参数后,点击右上角的“保存”按钮即可生效。

 

 下载 Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版
文件标题:Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版 (Details)
文件类型:zip
版本:1.2
文件大小:6 Kb
下载次数:39

 

 {mospagebreak_scroll title=在 PageCache 中除外对指定组件的缓存}

 

在 PageCache 中除外对指定组件的缓存

 

我想你现在已经明白了,网站上哪些页面需要缓存,哪些不需要缓存。简单说,就是更新频繁的不要缓存,长期不更新的就缓存。

PageCache 有一个很好的功能就是允许除外对指定组件的缓存。例如,它已经内置了一个参数,指定不要缓存 FireBoard 论坛组件,这样的话,所有论坛的内容都不会缓存,访客就能及时看到当前最新的帖子。

如果你的论坛不是 FireBoard 呢?那么,我们就必须手动添加这个除外规则了。

从 PageCache 的控制面板上点击“模块”(此处模块的概念与 Joomla! 的模块概念不同),可以看到其中有 no cache 模块,就是设定“不要缓存”的内容的。

 

PageCache Modules

这里有两种“不缓存”设定方式,一个是 no_cache_database,一个是 no_cache_file,你随便选择一个都可以,只要记着设置完后要发布你所选择的模块。例如上图中,前者是发布状态,而后者是未发布状态。

我当时选择了 no_cache_file,点击进入后,可以看到作者已经预设了对几个常见组件的“缓存除外”机制:

 

No Cache Exclusion list

 

从上图可以看出,com_fireboard 和 com_joomlaboard 都是论坛,因此不能缓存;com_jomcomment 指 JomComment 文章评论组件,也不能缓存,因为随时都有可能收到新的评论;com_registration 是注册组件,因为随时都可能有人来注册,因此不能缓存;registers 是 Community Builder 的注册程序;rss 是新闻供稿,也不需缓存。

假设我们所用的论坛是 SMF,桥接器是 JSMF,那么实际上访问论坛的网址中,组件部分是 com_smf(你可以从论坛的 URL 中看出)。因此,我们现在照猫画虎,来手动添加对 JSMF 所整合的论坛的“缓存除外”:

点击右上角的“新建”,就看到如下的界面:

 

add new component to nocache list

 

 

上图是我填写的示范。com_smf 这里一定不能弄错,这是关键!假如你的论坛是 Agora 组件,那么就填写 com_agora —— 注意,连大小写都不能错。如果你不清楚某个组件的正式名称,有两个方法查到:一个是看 URL,一个是到安装目录的 /components 文件夹里面,找到那个组件对应的子目录,其目录名称就是有填写的内容。

填写完成后,点击右上角“保存”按钮,就回到了模块列表画面。确认刚才编辑的模块已被发布。那么从现在起,你所指定的那个组件将不再被缓存。

之所以花这多长篇幅介绍这个办法,是因为我测试时发现,如果你将某个频繁更新的区域纳入了缓存范围,则前台偶尔出现页面布局被搞乱的局面。因此,一定要好好考虑,把所有频繁更新内容的组件都添加到 nocache 列表中去。

一般来说,文章页面很少更新。但是阅读全文的时候,页面两侧可能有“论坛新帖”或“最新评论”这样的模块。这些模块不属于任何组件管理,无法用上述方法除外。但是它们的内容也是随时更新的。如何将模块排除在 PageCache 的缓存范围之外?请看下节 ——

 

 下载 Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版
文件标题:Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版 (Details)
文件类型:zip
版本:1.2
文件大小:6 Kb
下载次数:39

 

 {mospagebreak_scroll title=PageCache 官方 FAQ 摘录}

PageCache 官方 FAQ 摘录

 

PageCache 的官方 FAQ 栏目解答了很多很有价值的问题。我将其中大部分翻译并摘录于此。通过学习这些 FAQ,我们可以领略一些软件设计方面的思路。

1、如何移除页面底部的“Powered by...”

PageCache 作者说,这是一个开源软件,作者可以允许用户删除在前台显示的“Powered by...”字样,有两种途径:一种是向作者捐款20美元,同时提供你安装 PageCache 网站的 URL,然后作者送你一个授权码(license code),你从 PageCach 后台输入就能自动取消显示这个版权标记;另一种就是自己动手,从源代码中删除。

考虑到大部分中文 Joomla! 用户还不熟悉从源代码中寻找版权标记的方法,因此我介绍一下手动删除的方法:

打开 /components/com_pagecache/pagecache.class.php 文件,在大约第 116 行,找到如下代码:

$replace = "<div class='bottom_page' style='text-align:center;'>&#80;&#111;&#119;&#101;&#114;&#101;&#100;&#32;&#66;&#121;&#32;<a href='http://www.joomlaperformance.com' title='Powered by PageCache'>&#80;&#97;&#103;&#101;&#67;&#97;&#99;&#104;&#101;</a></div></body>";

 

然后在该行之前,就是 $replace 前面加上双斜线(//),变成 //$replace ,就表示注释掉(comment out)该行代码,不再生效。

当然,如果你的网站是盈利性质的,我建议你在方便的时候还是给作者一些捐款,人家开发这个软件花费了多少心血啊!


2、在缓存的页面上如何除外模块?

例如本站首页,既展示了文章,又有一个“论坛新帖”模块来提取论坛最新的变化。如果启用缓存,那么首页上的这个模块就被纳入缓存范围,导致访客产生“论坛怎么一直没有新帖?”的误会。

怎么办?PageCache 作者提供了一个办法:

打开你的 Joomla! 1.0.x 网站的当前模板的 index.php 文件,找到你想要不被缓存的那个模块所在的模块位置的定义代码。例如,你的“论坛新帖”模块发布在 right 位置,那么就找出定义 right 模块位置的那段代码。

假设那个代码是:<?php mosLoadModules('right', -3); ?>

现在,给这行代码的前面和后面分别添加一行代码,变成:

<!--CacheLoadModule-right:-3:-->
<?php mosLoadModules('right', -3); ?>
<!--EndLoadModule-->

注意:所添加的第一行代码中,right 对应模块位置“right”,-3 对应模块样式“-3”,这两处需要根据你的实际情况来修改。其它代码一个字符都不要改动!

这样就等于告诉 PageCache,这个模块位置无需缓存,每次载入页面时都从服务器端提取最新内容。

 

3、如何不显示“Generated In...”

PageCache 会在自己处理过的页面底部显示一个类似“Generated In 0.0147 seconds”的标记,说明该页面的生成时间。但是有些用户可能不喜欢。那么很简单,这个功能是 PageCache 的一个模块实现的。在后台关闭它就行了。

方法:进入 PageCache 后台,点击“模块”,找到 Display Stats 这个模块,点击表格中右侧与此项对应的绿色“已发布”图标,即可切换成红色的“取消发布”状态。

 

4、如何升级本组件?

如果某些用户还在使用旧版的 PageCache v1.x(以前名称叫:Ircmaxell's Page Cache component),想要升级到 2.0 版本,那么很简单:卸载旧版,重新安装新版,搞定!

如果是从 2.x 的低版本要升级到 2.x 的新版本,更简单:在 PageCache 后台的主面板上,点击“升级”按钮,然后定位最新版本的安装包,点击“上传”按钮即可自动完成升级。

当然了,考虑到每个用户的 Joomla! 安装环境及设置参数都有差异,老白建议您在升级之前用 JoomlaPack 做好全站备份。

 

5、安装时修改了什么文件?

PageCache 安装时会自动修改 Joomla! 1.0.x 的核心文件,一共修改三个文件:/index.php ,/administrator/index2.php ,/administrator/index3.php 。如果你是开发人员,想知道具体都修改了哪些代码,请参看:
http://www.joomlaperformance.com/component/option,com_easyfaq/task,view/id,10/Itemid,34/


6、我想自己开发 PageCache 的模块

这个话题对于普通用户来说有点“超纲”,我不准备在此介绍,说实话我看到一堆一堆代码就头大。如果开发人员有兴趣设计针对 PageCache 的功能模块,请看:http://www.joomlaperformance.com/component/option,com_easyfaq/task,view/id,3/Itemid,34/

 

7、PageCache 2.0 支持 Cron 了

说到 Cron,很多 Joomla! 用户都很陌生。我也不是服务器专家,简单理解就是:Cron 是 Linux 平台的“定时进程”,相当于 Windows 平台的“计划任务”。PageCache 2.0 可以通过设置服务器端的 Cron 计划来自动执行页面刷新任务。不过,我看了一下官方介绍的方法,太复杂了!根本不是普通用户能操作的。

另外一个不能忽视的障碍是:服务器端的 Cron 任务不是你想添加就能添加的。有些虚拟主机商根本不提供这个权限,即使给你权限了,Cron 的脚本语法估计也把你绕在里面出不来。(参看:计划任务工具 cron 的配置和说明

我的建议是:作者完全可以把这个 Cron 机制做得更人性化一些,在后台直接提供一句代码,然后我们通过安装 JCron Scheduler 计划任务组件,只需将该代码填写到 JCron 的“新建 Cron任务”里面即可生效。

8、是否需要禁用 Joomla 自带的缓存功能?

不需要关闭 Joomla! 自带的缓存功能(全局设置中)。因为 PageCache 只对未登录的游客生效,一旦注册用户登录后,PageCache 就失效了,而这时能够起缓存作用的就是 Joomla! 内置的缓存功能。

9、选择哪种缓存方式好?

在大多数分享式的虚拟主机上,空间商一般只允许使用“文件系统”或“数据库”作为缓存方式。不提供其它方式。如果你的服务器是 VPS 或者整个服务器都归你所有,那么建议首选基于内存的缓存方式。

目前 PageCache 支持的缓存方式有:

database

File

APC

memcache

Xcache

Eaccelerator

最好选择基于内存的缓存机制,如:memcached, APC(Alternative PHP Cache),或者 Xcache 。至于在数据库与文件之间哪个好,那要看服务器的设置了。最好各自分别测试几天。

 

10、PageCache 的统计信息都有什么含义?

从 PageCache 的控制面板上点击“已缓存页面”按钮,就能看到很多统计信息。大致解释如下:“已缓存页的点击”是指该网址被缓存的页面在前台被访问的总次数;“未缓存页的点击”是指已缓存的页面在超过缓存时间后,重新生成新缓存的次数;“禁用页的点击”是指当用户登录网站后,或者该网址所属组件被排除在缓存范围之外时,该页面被前台访问的次数;后面三项时间分别对应前面三项次数,记录的都是平均时间,单位:秒。

 

11、什么是缓存时间(Time To Live)?

当 PageCache 将某个页面缓存之后,它需要知道多长时间之后必须刷新一下,提取最新版本。这个时间就是缓存时间(TTL)。默认设置是 600,表示 600秒,意思是指,在没有人为干扰时,该页面将被缓存 10 分钟,然后被删除,等候下一个对该页面的浏览请求传输到服务器端后,再次缓存你该页面。如果时间太短,则这个组件的缓存功能就没有意义了。到底缓存多久才算合适,取决于你网站的内容。如果网站内容极少更新,可以将时间设置长一些。如果你的网站内容从来都不更新,希望永久缓存,那么设置为“-1”(负一),就表示永久缓存。这样,你的网站相当于“全静态”了。那速度应该是罡罡滴!

 

12、安装 PageCache 的系统要求:

在安装 PageCache 之前,请先确认 Joomla! 1.0.x 的根目录可写(writable),还有 /administrator 目录也必须可写。此组件会同时安装一个模块和一个插件,因此请确保 /modules 和 /mambots/system  这两个目录也是可写的。同时,那三个需要修改的文件, /index.php, /administrator/index2.php,  及 /administrator/index3.php 也得是可写的。然后就可以开始安装了。

PageCache 在安装时会尝试自动修改上述  3 个核心文件,如果自动修改失败,你就必须手动修改。或者在安装完成后,点击本组件控制面板上的“修改文件”按钮来修复这个问题。

服务器端的要求是:

    1. 可以使用 $_SERVER 变量
    2. 如果在使用 php4, 必须有 fsockopen 访问权限
    3. php 4.3.3 或更高版本


    13、缓存目录放在哪里比较好?

    恩,由于缓存目录必须是可写的,那么最好放在 Joomla! 安装目录之外的地方。假设你的 Joomla! 安装在 /home/something/public_html/ 这个目录,那么你可以将缓存目录设置为 /home/something/page_cache/ 。当然也要确保此目录是可写的,否则基于文件系统的缓存方式就无法工作。PageCache 2.0 以上版本默认自动设置一个缓存目录,不过我们推荐你更改到更安全的位置。

    注意: 在参数中必须填写绝对路径,而且目录可写,并以 / 斜线符号作为结尾。

    14、有没有后台“清除缓存”的快捷方式?

    有啊!在安装组件时,会自动安装一个后台模块,该模块会显示一个“清除缓存”的链接,位置在后台右上角的“注销”链接左侧。这个模块的访问权限没有特殊限制,因此任何一个能够登录后台的用户都能点击它,实现立即清除缓存的功能。

    clear cache Admin module

     

     下载 Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版
    文件标题:Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版 (Details)
    文件类型:zip
    版本:1.2
    文件大小:6 Kb
    下载次数:39

     

     {mospagebreak_scroll title=白建鹏对 Joomla! 缓存机制的几点看法}

     

    白建鹏对 Joomla! 缓存机制的几点看法

     

    有些人说,现在服务器性能好多了,没有必要用缓存。我不这么想。当年我们用 56K Modem 上网的时候,163 邮局也是可以打开的。现在你试试看,还能那么顺畅吗?这是因为在服务器升级的同时,网站建设技术也在不断升级,网页内容也在不断丰富。以前网上传输音频是不可想像的,现在视频都有了,而且在向“高清”迈进。因此,仍然有必要采取“缓存”机制来加速网站的速度,尤其对于内容不怎么更新的网站。别忘了,在文章开头我就说过,网站速度快了,对于 SEO 也是有帮助的。

    对于 Joomla! 这个具体的 CMS 系统来说,我认为缓存的实施比其它建站技术更方便。这得感谢 Joomla! 的“模块化”设计思路。在 PageCache 中我们已经看到,可以针对特定的组件来决定是否对其内容进行缓存。

    鉴于 Joomla! 建站后网站内容基本上由组件、模块、插件和桥接器组成,我就从这几个方面谈谈我对 Joomla! 网站实施缓存的看法。

    基本观点:缓存必须区别对待更新周期不同的内容;操作方法必须容易理解(用时髦的话讲,就是学习曲线不要那么困难)。

     

    对于 Joomla! 组件缓存的想法

    PageCache 已经能允许除外任何一个组件,这是一种非常好的思路。我唯一想补充的是,操作方法不方便。手动添加诸如 com_weblinks 这样的代码到 no_cache_file 列表很容易出错。

    因此,我的建议是,将这个功能再改进一下,更人性化一些。做成“点击选择”模式,如下图所示:

     

     

    已安装组件

     

     

    添加 ==>>

     

     

    <<== 移除

     

    不需要缓存的组件

    com_content

    com_chronocomments

    com_fireboard

    com_remository

    com_contact

    com_rsgallery2

    com_weblinks

     

     

    这样做的好处是:用户不需要手动输入什么,只需要选择即可。这样就避免了用户手动输入而出错的机会。

    顺便说一下:白某对于软件设计者一个基本的忠告就是“请把软件做得更容易一些”,我经常在批评某些 Joomla! 扩展开发者的思路时说:“Please make life easier!”。不管你这个软件将来免费还是收费,作为一个敬业的程序员,努力让用户更容易学会操作,努力降低用户出错的机会,这是你的职责!

     

    对于 Joomla! 模块缓存的想法

    某些 Joomla! 模块已经自带缓存功能,例如在 Joomla! 1.0.x 平台上,你看看“主菜单”这个模块的参数,里面就有“缓存”的选项。因为菜单对于一个网站来说,恐怕几年都不会变。因此,将菜单模块缓存30天甚至30年都可以。

    但是,还有很多模块作者没有考虑到这一点。因此需要开发类似 PageCache 高级缓存管理组件的作者把这个功能做好。

    前面提到,PageCache 作者要求用户修改模板文件来实现对模块的“缓存除外”。我看了这个方法之后,感觉作者犯了一个错。且不说手动修改模板文件对于很多人来说很不方便,单单是针对模块位置的处置规则就有错。因为在 right 这个模块位置上,用户可能发布了多个模块,例如“文章类别列表”,不见得发布到这个位置的所有模块都不需要缓存。假如该位置有8个模块,用户只需要“论坛新帖”被排除,那么这个方法明显杀伤面积太大了。

    我在 PageCache 的官方论坛提出一个建议:作者完全可以在 PageCache 的后台参数中增加一项“除外下列模块”,然后用户可以输入不需要缓存的模块的 ID 来实现每次都提取该模块的新内容。由于 Joomla! 中的每一个模块其 ID 都是唯一的,因此这个方法不会妨碍其他需要缓存的模块。同时,如果用户有多个模块需要排除,例如:还有“最新评论”也是动态的,“最新留言”也是动态的,那么,可以通过“逗号分隔”的方式输入多个 ID。

     

    对于 Joomla! 插件缓存的想法

    有一些插件的内容是可以缓存的,例如在文章中用 Allvideos Plugin 插件插入的视频,该内容不是天天变,因此可以缓存;有一些插件的内容不能缓存,例如 AJAX Vote 文章评分插件,任何只要在任何时候点击一下评分的红星,该插件要表达的“值”就变了,因此不能缓存。

    但是,在 PageCache 中还没有考虑到对插件的处理。我考虑了一下,对插件的缓存处理确实比较困难。但我相信,对于专业的 php 编程人员来说,这或许也是一个困难,但不是无法解决的困难,只是时间问题而已。

     

    对于 Joomla! 整合外部内容缓存的想法

    Joomla! 的功能还没有强大到不需要任何外部程序来补充的地步。例如论坛功能,目前任何一个 Joomla! 的论坛组件都无法与 phpBB3 或者 SMF2 来媲美。因此,当我们整合了这些外部程序以后,Joomla! 该如何处理这些内容的缓存方式?

    我的看法是,如果要整合,一定要将桥接器做成组件形式,一定要让该外部程序的所有数据流都通过桥接器与 Joomla! 沟通。这样,Joomla! 就可以通过对桥接器组件的控制实现对所整合的外部程序的控制。

    当然了,创建指向外部程序的菜单时,也最好是用桥接器组件来创建菜单,通过桥接器组件将外部程序嵌入整合(wrapped in)在 Joomla! 的框架之内,这样既美观,又方便 Joomla! 对外部程序的控制。

    顺便说一下:当初 JFusion 多功能桥接器的作者死活不同意我的这个看法,他顽固地认为,外部论坛不需要用“嵌入整合”模式,因为那样降低了速度。当时我们争论很激烈,差点就要骂起来了。但是,最近发布的 JFusion 1.0.8 版本中,作者主动增加了对 SMF 论坛和 phpBB 论坛的“无缝整合”(Frameless)模式,实际上跟我去年给他的建议是一样的。这说明什么?说明用户需要这种整合模式,你不做这个功能,我就不用你这个软件!

     

    最后总结一下,虽然说 PageCache 不能在 Joomla! 1.5.x 上面安装,但是我觉得仍然有必要探讨这个话题。因为我们从中可以学习一些思路。

    我想再次提醒某些程序员:你的 php 编程技术或许一级棒,但是如果没有正确思想的指引,你只能开发结构优秀、没有 bug 的垃圾,而绝不是实用的软件。JFusion 的作者为什么增加“嵌入整合”模式?因为他终于认识到去年他的观点是错误的!

    我相信国内这样的自以为是的程序员不在少数。如果你能认真听取一下用户的意见,首先解决好“软件设计思路”的问题,然后再开始写代码,我相信你一定会成为受欢迎的软件作者。

    希望我们中国的 php 程序员能设计出更好的 Joomla! 扩展来。谢谢!

     

     下载 Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版
    文件标题:Auto Purge Cache Plugin for J1.5 自动清理缓存插件 v1.2 多国语言版 (Details)
    文件类型:zip
    版本:1.2
    文件大小:6 Kb
    下载次数:39