利用使用 DTW_CACHE_PAGE 内部函数来高速缓存一个 Web 页。当 Net.Data 在 宏中发现 DTW_CACHE_PAGE 函数时,它与高速缓存管理器联系并开始在内存中保存宏的 HTML 输出。在 Net.Data 成功地处理了一个宏之后,HTML 输出就发送给浏览器,并且高速缓存管理器 如图 28中所示地在一个事物中将输出进行高速缓存。
![]() |
使用 Net.Data DTW_CACHE_PAGE() 内部函数来指定要写至高速缓存的 Net.Data 生成的页面。
一旦确定在高速缓存中已经不存在页面或页面已经过期,DTW_CACHE_PAGE() 函数将高速缓存函 数语句之后的宏的所有输出。如果页面不存在于高速缓存中或超过指定的年龄,Net.Data 将把 输出页面发送回浏览器,从宏执行中生成新的输出页面,并将页面存储在高速缓存中。
如果高速缓存管理器找到高速缓存页面并且该页面仍然是当前的,则它显示高速缓存的内容,并 且 Net.Data 退出宏。此行为保证了在从高速缓存中检索了 Web 页面之后,不再作不需要的处理。
性能提示:把 DTW_CACHE_PAGE() 放在 最先,或作为宏中的第一条语句,以将执行宏的代价降到最低。
要高速缓存一个页面:
@DTW_CACHE_PAGE("cache_id", cached_page_id, "age", status)
使用该函数来指出 Net.Data 将对跟 随此语句之后的宏中的所有 HTML 输出进行高速缓存。如果您希望高速缓存所有 HTML 输出, 则将该语句放在宏的最前面。
参数:
示例:
%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 输出页。