Adobe ColdFusion 8

cfcache

描述

为了提高WEB站点的性能,在服务器端或客户端,或者同时在服务器端和客户端存储一个页面的副本。此标签奖ColdFusion页面返回的静态HTML代码存储为临时文件。当页面不是必须在用户每次访问时都要获取动态内容时,使用此标签。你可以将这个标签用于简单的URL,也可以存储带变量的URL内容。[译者注:即get型变量]

历史

ColdFusion MX:

  • 不建议使用cachedirectory和timeout属性。在后续的版本中,这两个属性可能无效,甚至导致错误。
  • 添加了timespan属性
  • 改变了页面的缓存方式:当action属性取默认值(即cache)时,将页面同时缓存在在服务器端和客户端。(在以前的版本中,只在服务器端缓存页面)。
  • 将protocol属性和port属性的默认值的来源更改为当前页面的URL。(早期的版本,其默认值分为为http和80)
  • 改变了当缓存页面的时候对线程状态的控制方式:此标签能够存储具有线程状态的页面,包括用ColdFusion login做过安全处理的页面。(在早期的版本,当缓存页面的时候,线程状态信息被清除了,导致验证信息全部丢失。)
  • 改变了存储缓存文件的方式:文件名变为此页面的URL的哈希值。(在早期的版本,ColdFusion使用cfcache.map文件)

类别

页面处理 标签

语法

<cfcache 
    action = "cache|flush|clientcache|servercache|optimal"
    directory = "directory name"
    expireURL = "wildcarded URL reference"
    password = "password"
    port = "port number"
    protocol = "http://|https://"
    timespan = "value">
    username = "username">

注: 你可以在attributeCollection 中指定这个标签的属性,作为一个结构的value,在attributeCollection 中指定结构的名称,并使用这个标签的属性名称作为这个结构的Keys.

 

属性

属性

必须/可选

默认

Description

action

可选

cache

  • cache: 服务器端和客户端同时存储server-side and client-side caching。
  • flush: 刷新缓存过的页面。
  • clientcache: 只在浏览器端存储。用此选项来存储只和用户个人有关的页面。
  • servercache: 只存储在服务期端。不建议使用。
  • optimal: 与cache相同

directory

可选

cf_root/cache

缓存存储的绝对路径

expireURL

可选

指定要刷新所有的缓存页面

当action="flush"时使用。一个URL列表。ColdFusion在指定的缓存文件夹内,从这个列表中获取需要刷新的文件。可以使用通配符,如*/view.cfm?id=*

password

可选

 

密码,如果页面有服务器级别的认证,需要用这个参数来提供密码。

port

可选

当前页的端口号

端口号。cfchche标签用cfhttp来调用存储在服务器端的缓存页面缓存页面,这个属性用来指定端口号

protocol

可选

当前页面的协议

从缓存中建立URL使用的协议

  • http://
  • https://

timespan

可选

只有cfcache=flush指定时页面才刷新

缓存页面刷新的时间间隔。

  • 用小数表示的天数。例如".25"表示1/4天。1表示1天,1.5表示一天半。
  • CreateTimeSpan函数的返回值。例如, "#CreateTimeSpan(0, 6, 0, 0)#"。

username

可选

 

用户名。如果页面有服务器级别的认证,需要用这个参数来提供用户名。

用途

这个标签使用在内容不经常更新的页面。使用这个标签可以显著的提高应用程序的性能。

输出的缓存文件存储在服务器端或者客户端,或者两端都存储。每次需要读取这些内容时,ColdFusion不会重新生成并让客户端下在这些内容,而是使用缓存过的输出。当缓存被刷新后,ColdFusion会重新生成并让客户端下载新的内容。你可以通过指定timespan属性或者使用cfcache标签并指定action=flush来刷新缓存。

这个标签最简单的使用方法是:在页面顶端使用cfcache标签,并指定timespan属性。每当一个指定的周期过去,ColdFusion会刷新这些缓存。

你可以用action属性指定ColdFusion是在客户端存储缓存还是同时在服务器端和客户端存储缓存(默认)。只在客户端储存的优势是不需要任何ColdFusion服务器的资源,浏览器会将文件存储到客户端的缓存区,有性能上的优势。同时在客户端和服务器端存储的优势是优化了服务器端的性能,如果一个在客户端没有缓存的浏览器访问了这个页面,ColdFusion可以从服务器端读取缓存。(Adobe建议你将缓存同时存储在客户端和服务器端,不建议你只将缓存存储在服务器端)

如果一个页面包含只与访问者本人有关的信息,应使用action="clientcache"来防止其他人看到这些信息。

Debug设置对cfcache没有用,除非在程序中开启debugging。当生成一个缓存时,cfcache会使showDebugOut=no。

cfcache标签将不同的URL(包括参数)都当作独立的页面。例如http://server/view.cfm?id=1 和 http://server/view.cfm?id=2 这两个页面的缓存是分开存储的。

cfcache使用cfhttp来获取缓存页面的内容。如果在用cfhttp缓存页面时产生了一个http错误,那么这个错误将不会被保存下来。如果产生了一个ColdFusion错误,那么这个错误的输出将被缓存下来。

了解更多的信息, 请参考ColdFusion开发者指南的 "Caching ColdFusion pages that change infrequently"

范例

<!--- 这个范例对一个URL的所有可能的参数都分别建立了缓存。你可以看到缓存建立之后,访问这个页面时看到的时间是建立缓存时的This example produces as many cached files as there are URL parameter permutations.
--->

<cfcache
    timespan="#createTimeSpan(0,0,10,0)#">
<body>

<h3>This is a test of some simple output</h3>

<cfoutput>
    This page was generated at #now()#<br>
</cfoutput>

<cfparam name = "URL.x" default = "no URL parm passed">
<cfoutput>The value of URL.x = # URL.x #</cfoutput>