管理与程序设计指南

高速缓存 Web 页

利用使用 DTW_CACHE_PAGE 内部函数来高速缓存一个 Web 页。当 Net.Data 在 宏中发现 DTW_CACHE_PAGE 函数时,它与高速缓存管理器联系并开始在内存中保存宏的 HTML 输出。在 Net.Data 成功地处理了一个宏之后,HTML 输出就发送给浏览器,并且高速缓存管理器 如图 28中所示地在一个事物中将输出进行高速缓存。

图 28. DTW_CACHE_PAGE 函数初启高速缓存


Figure dtwa1109 not displayed.

高速缓存一个页面

使用 Net.Data DTW_CACHE_PAGE() 内部函数来指定要写至高速缓存的 Net.Data 生成的页面。

一旦确定在高速缓存中已经不存在页面或页面已经过期,DTW_CACHE_PAGE() 函数将高速缓存函 数语句之后的宏的所有输出。如果页面不存在于高速缓存中或超过指定的年龄,Net.Data 将把 输出页面发送回浏览器,从宏执行中生成新的输出页面,并将页面存储在高速缓存中。

如果高速缓存管理器找到高速缓存页面并且该页面仍然是当前的,则它显示高速缓存的内容,并 且 Net.Data 退出宏。此行为保证了在从高速缓存中检索了 Web 页面之后,不再作不需要的处理。

性能提示:把 DTW_CACHE_PAGE() 放在 最先,或作为宏中的第一条语句,以将执行宏的代价降到最低。

要高速缓存一个页面:

  1. 在宏的 HTML 块中,在 HTML 编码之前,插入以下函数语句:
    @DTW_CACHE_PAGE("cache_id", cached_page_id, "age", status)
    

    使用该函数来指出 Net.Data 将对跟 随此语句之后的宏中的所有 HTML 输出进行高速缓存。如果您希望高速缓存所有 HTML 输出, 则将该语句放在宏的最前面。

    参数:

    cache_id
    标志放置此页的高速缓存的字符串。您可以将高速缓存标识符与宏或宏组相关联。

    cached_page_id
    一个包含了一个标识符的字符串,该标识符用于标识后继 @DTW_CACHE_PAGE 高速缓 存请求中的高速缓存中的页,例如页面的 URL。

    age
    包含时间长度(以秒计)的字符串变量,是在认为页面过期时指定的。如果请求的 页在高速缓存中停留的时间长于值 age,Net.Data 将执行页面,并高速缓存所生成的页 面,代替过期页面。如果请求的 页在高速缓存中停留的时间等于或小于 age 的值,Net.Data 将在高速缓存中检索页面并将它发送 到浏览器。在此情况下,Net.Data 立即结束宏执行。

    status
    由 Net.Data 返回的一个字符串变量,它指出页面是否已经正确高速缓存。

示例:

%HTML(cache_example) {
 %IF (customer == "Joe Smith")
 @DTW_CACHE_PAGE("mymacro.d2w", "http://www.mypage.org", "-1", status)
%ENDIF
 ...
<html>
 
 <head>
 <:title>This is the page title</title>
 </head>
 
 <body>
 <center>
 <h3>This is the Main Heading</h3>
 <p>It is $(time). Have a nice day!
 </body>
 
</html>
 %}

高级高速缓存:动态确定是否高速缓存

DTW_CACHE_PAGE() 从宏中的位置初启高速缓存。您通常将函数放在宏的开头,以获取 最佳性能并确保所有 HTML 都已高速缓存。

对于高级的高速缓存应用程序,当您需要在处理期间决定在某个特定点作高速缓存时,可以把 DTW_CACHE_PAGE() 函数 放在 HTML 输出段,而不是在宏的开始。例如,您可能需要根据从查询或函数调用返回的行数来 作高速缓存决定。

示例:因为作高速缓存的决定依赖于 HTML 输出的期望大小, 所以把函数放在 HTML 块中

 % DEFINE { ...%}
 
...
 
%FUNCTION(DTW_SQL) count_rows(){
  select count(*) from customer
%REPORT{
%ROW{
  @DTW_ASSIGN(ALL_ROWS, V1)
%}
%}
%}
 
%FUNCTION(DTW_SQL) all_customers(){
  select * from customer
%}
 
%HTML(OUTPUT) {
<html>
 <head>
 <title>This is the customer list
 </head>
 <body>
 
@count_rows()
 
 %IF ($(ALL_ROWS) > "100")
 @DTW_CACHE_PAGE("mymacro.d2w", "http://www.mypage.org", "-1", status)
%ENDIF
 
@all_customers()
 
 </body>
</html>
%}

在此例中,此页根据 HTML 输出的期望大小作高速缓存或检索。只有当数据库表格包含多于 100 行时,才认为 HTML 输出页是值得作高速缓存的。Net.Data 总是在执行这个宏之后,把 OUTPUT 块中的 文本(This is the customer list)发送给浏览器;此文本永不作高速缓存。跟在函数调 用后的行 (@count_rows()) 在满足 IF 块的条件时作高速缓存或检索。两部分共同形 成一个完整的 Net.Data 输出页。


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]