首页 理论教育PHPMVC开发实战:静态缓存规则

PHPMVC开发实战:静态缓存规则

【摘要】:静态缓存规则是静态缓存生成中最关键的配置。静态缓存规则与URL路由规则有些类似,这两者的核心都是基于正则匹配的。其中index即为控制器动作,表示在URL请求到index动作时,系统将生成index.html静态缓存文件。文件缓存规则共由缓存规则、缓存有效期及附加规则构成。同样,在缓存规则中也是允许这样使用的。

静态缓存规则是静态缓存生成中最关键的配置。静态缓存规则与URL路由规则有些类似,这两者的核心都是基于正则匹配的。静态缓存规则格式如下。

'路径匹配规则'=>array('文件缓存规则','静态缓存有效期','附加规则')

静态缓存规则共由两部分组成:路径匹配规则及文件缓存规则。文件缓存规则又分为常规配置及附加配置,下面分别介绍。

1.路径匹配规则

路径匹配规则决定了缓存的区域,系统共提供了4种路径匹配规则(全部小写),分别为全局动作缓存规则、控制器缓存规则、控制器动作缓存规则以及全站缓存规则,下面分别介绍。

(1)全局动作缓存规则

全局动作缓存规则是根据URL请求,匹配项目下的所有动作并生成相应的静态文件。全局动作缓存规则是最常用、最方便的一种静态缓存规则,规则格式如以下。

'index'=>array('index','60')

标粗的即为全局动作缓存规则。其中index即为控制器动作,表示在URL请求到index动作时,系统将生成index.html静态缓存文件。这里使用的是全局配置,意味着只要用户访问项目下的index动作名称,不管来自哪个控制器,都会生成静态缓存。

(2)控制器缓存规则

控制器缓存规则能够智能地根据控制器生成缓存分类,并且将分类(栏目)下的所有动作都生成静态缓存,这个过程是无需开发人员干预的,系统会自动根据URL请求完成缓存生成与读取。控制器缓存规则格式如下。

'index:'=>array('index/{:action}_{id}','600')

标粗的即为控制器缓存规则。其中index表示控制器名称,“:”分隔符是全局动作缓存规则与控制器缓存规则的区别所在(注意为英文冒号)。表示当URL请求到index控制器下的任意一个动作(页面),系统将自动创建或读取静态缓存文件。

(3)控制器动作缓存规则

控制器动作缓存规则是全局动作缓存规则的子规则,能够将缓存规则区域进一步缩小。控制器动作缓存规则根据URL请求中的控制器及动作名称,匹配缓存规则中的范围。如果匹配结果成立,则生成或读取缓存,否则放弃缓存操作。控制器动作缓存规则格式如下。

'index:user'=>array('{id}',0)

标粗的即为控制器动作缓存规则。其中index表示控制器名称,user表示index控制器下的user动作。需要注意的是,通常情况下只需要对有意义的控制器动作做静态化处理即可,所以上述格式只适合于常见的控制器动作静态缓存规则,并不适合空控制器及空动作。

(4)全站缓存规则

全站缓存规则使用的是泛匹配模式,如果将该规则配置到项目配置文件,则将项目下的所有控制器动作都做静态化处理;如果将全站缓存规则配置到全站公共配置文件(config.inc.php),则无论访问网站哪个页面,都将做静态化处理。全站缓存规则格式如下。

'*'=>array('{$_SERVER.REQUEST_URI|md5}')

上述缓存规则表示根据当前页面生成或读取静态文件,并使用md5函数序列化文件名称。全站缓存规则是一种贪婪的匹配模式,过多的使用会极大地消耗服务器资源,从而让缓存效果得不偿失,如果在数据更新频繁的网站上使用,有可能造成不可预料的运行错误。

2.文件缓存规则

文件缓存规则是系统在处理缓存时的一种文件命名规则,它直接影响到缓存的保存名称、有效期等。文件缓存规则共由缓存规则、缓存有效期及附加规则构成。通常情况下,只需要配置缓存规则即可,系统共支持5种缓存规则,下面分别介绍。

(1)使用PHP全局变量(www.chuimin.cn)

PHP内置了许多全局变量,例如$_SERVER、$_SESSION、$_COOKIE等。文件缓存规则允许开发人员直接在缓存规则内调用PHP内置的全局变量,最终生成的缓存文件将以全局变量的值作为缓存文件名,如以下代码所示。

在配置文件缓存规则时,直接使用$_COOKIE全局变量获取cache值即可,如以下代码所示。

如上述代码所示,在缓存规则中使用变量,需要使用定界符“{}”。如果变量为数组,使用“.”连接符匹配数组下标键。与视图标签一样,文件缓存规则允许使用函数对变量值做一步处理,变量值与函数之间使用“|”分隔符,如以下代码所示。

上述代码表示使用md5函数加密$_COOKIE[‘cahce’]。

(2)使用框架变量

为了方便开发人员得到当前环境信息,ThinkPHP框架本身就内置了许多对外公开的变量或常量,开发人员可以直接将这些变量嵌入到文件缓存规则里,常见的框架变量如下。

➢{:app}:获得当前应用名称,即入口文件定义的APP_NAME常量值。

➢{:group}获取当前应用分组名称,没有分组时将显示为空。

➢{:module}获取当前控制器名称。

➢{:action}获取当前动作名称。

框架变量之间可以组合使用,也可以单独使用。如果多个变量之间使用“/”分隔符,系统将根据变量前后顺序生成相应的目录结构,最后的变量值为缓存文件名。如以下代码所示。

上述配置规则将以控制器名称及动作名称生成缓存文件存放路径,并以md($_COOKIE[‘cahce’])作为缓存文件名。

(3)使用$_GET参数值

缓存规则是以URL请求为基础的,所以可以直接使用$_GET[‘变量名’]的方式取得参数值。在默认的视图模板引擎中,要获取URL参数值,只需要使用{$参数名}方式获取即可。同样,在缓存规则中也是允许这样使用的。如以下代码所示。

如上述代码所示,{$p}变量与$_GET[‘p’]是相等的。参数p是框架内置的一个分页变量,该值保存着当前分页页码。

(4)使用函数

使用函数是一种比较灵活及强大的文件缓存规则,这里的函数不仅支持PHP内置的函数,还支持框架或项目中的函数(包括自定义函数、扩展函数等)。使用函数时不再使用“$”变量声明符号,而是使用“|”分隔符作为标识,如以下代码所示。

(5)混合使用

混合使用是在前面介绍的4种缓存规则的基础上,实现在一条缓存规则内同时运用多条文件缓存规则,如以下代码所示。

3.文件缓存附加规则

文件缓存附加规则是文件缓存规则中一种扩展机制,通常使用自定义函数实现文件缓存规则。事实上,附加规则不是必需的,因为在前面介绍的5种文件缓存规则中第4种就可以使用自定义函数。所以文件缓存附加规则通常用于后期维护。如以下代码所示。

附加规则中指定的temp函数,只需要在common.php公共函数库中实现即可,代码如下所示。

最终缓存的文件名称将在原来的文件名基础上追加“~”标识,例如“~article.html”。在实际应用开发中,可以使用自定义函数,实现功能强大的附加规则。