Wap网络学院 网站首页 手机软件 手机游戏 手机主题 手机论坛 手机铃声 美女写真 经典笑话 Flash小游戏 
Wap网络学院为广大建站爱好者提供一个详尽的Wap建站的技术支持和丰富的Wap源代码以及教程等资源支持。
在线教程: WAP服务器 | WAP网页编程 | WAP网页设计 | WAP数据库 | WAP网络安全 | WAP多媒体 | WAP生活应用 | WAP相关知识 | 业界新闻
资源下载: PHP源码 | ASP源码 | ASP.NET源码 | JSP源码 | 其它源码 | WAP教程下载 | WAP网站开发工具 | WAP模拟器
 本栏目最新文章
· WAP中级教程 关于缓存(cache)
· WAP(wml)开发问答 - Wap开发前必看
· WAP初级教程
· WML语法大全
· WML教程
· 如何加入WAP书签
· WML字符使用基本规则
· WML编程--详细教程
· WAP技术课程
· WAP技术入门
 
 您现在的位置: WAP网络学院 >> WAP教程网 >> WAP网页编程 >> WML >> 文章正文
 
WAP中级教程 关于缓存(cache)

二、缓存(Caching)

根据[RFC2616]的定义,缓存是:"程序中响应消息的本地储存区以及控制这些消息储存、重新获取和删除的子系统。缓存保存可以缓存的响应消息以便降低将来的响应时间和网络带宽消耗,同样也适用于请求消息。"

由于WAP信道带宽的限制,我们在编写WAP应用的时候都希望最大限度地减少消息的传送量。要做到这一点,就要尽量地使用缓存,经常地从缓存中获得以前的消息。幸运的是目前大多数WAP设备都有一定级别的缓存,在默认情况下,会尝试最大化的缓存。几乎所有指向URL的响应都会被缓存下来。

当WAP用户终端缓存一个响应的时候,会保存几乎所有的信息:URL、响应文本、消息头以及其他可以验证响应的内容(参看下一节"验证和历史堆栈")。每个被缓存的项目都可以根据它的URL组成部分(域名、路径、协议、参数、端口等等)唯一的识别。

有两种HTTP消息头可以让你控制WML的DECK缓存,对我们最重要的是Cache-Control消息头。它能够直接通过请求/响应链来控制所有的缓存实体。所有的缓存机制都必须遵守这些消息头的定义。Cach-Control消息头通常用来屏蔽一个设备的默认缓存行为。他们在消息链中传递时必须直接穿过所有的代理服务器和网关而不被改变。

* Cache-Control: no-cache。设定这个选项的URL不能被缓存,包括用户终端和所有处于内容服务器和用户终端之间的其他服务器;
* Cache-Control: max-age=<second>。定义URL保存在设备缓存中的最长时间。时间到了以后,这个实体会从缓存中清除;
* Expired:<date> 。指定URL在缓存中存放的最后日期期限。[RFC1123]定义了日期的格式,通常是这样的:Expires: Sun, 29 October 2000 17:30:47 GMT

在写一个WAP应用的时候,你要先假设用户终端会尽量最大化缓存以便使向内容服务器获取信息的动作减少到最少。下面做些解释:

1、永久缓存URL

WAP用户终端通常会尽量长地在它的缓存中保存存取过的URL,这个"尽量长"在Phone.com浏览器中的定义是大约30天。不过,也许你会想把一个URL的缓存时间尽量延长,比如你公司的LOGO,这样每次打开页面的时间就会减少。用下面两种方法能够很简单地实现:

* 指定一个离现在很远的过期日,比如:Expires: Tue, 01 Jan 2002 00:00:00 GMT;
* 指定一个很大的缓存时间,如:Cache-Control: max-age=3153600。这个例子可以让URL缓存一年。用户终端允许的最大整数是2,147,483,647,所以你可以让一个URL保存超过68年之久。当然,到那个时候,你的手机早就那报废了。

2、指定对URL的缓存时间

通常的情况是对一个URL你只需要缓存一段时间。比如股票报价系统,网页可能需要5分钟更新一次,那么你只要在DECK的HEAD部分指定Cache-Control: max-age=300就行了。 如果用户在5分钟以内再次检索该页面,看到的还是缓存里的网页。如果在5分钟以后,就会到服务器上获取最新的数据。

另外一种控制缓存时间的方法是使用前面提到过的Expires,不过这种方法只能告诉用户终端:只要过了指定时间,无论什么时候访问页面都要刷新。如果你下次要控制时间,只能改变Expires里的时间值。

3、禁止对URL的缓存

对于快速变化的内容,一般都会希望每次都得到最新的数据。所以这个时候要完全禁止对相关网页的缓存。方法有三种:
* 设定Cache-Control: no-cache;
* 设定最大缓存时间为0,Cache-Control: max-age=0;
* 设定缓存到期日为一个早就过去的日期,Expires: Mon, 1 Jan 1990 00:00:00 GMT。

实际上,后两种不是最好的选择。首先这样会多占用终端的处理时间,因为当碰到这个DECK时,终端需要计算一下过期时间。其次,这样会多占用一些字节,而且在表达上也不够清楚。

上一页  [1] [2] [3] [4] 下一页

 
  • 上一篇文章:

  • 下一篇文章: 没有了
  •  
     

     
    Copyright (C) 2008 shouji56.COM, All Rights Reserved 版权所有