@ZEAL Blog·厉
WWW Zeal Blog
We stand alone,
TOGETHER.

Avoid Unwanted Copies 问题

Posted by zeal on 2007-08-08 22:30 , 1129 characters |  + 0 - 0   English
转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/530 MaDe1nZEAL
标签 ( 开发/理论 ):  ,  , 

  OracleAS Web Cache 里面可以设置 Global URL Parameters to Ignore 来让 webcache 把多个带不同参数的 URL 作为同一个对象来缓存。比如说当利用 Dynamic Javascript 来进行跨域的数据调用的时候,对于 Firefox 来说不存在浏览器缓存过时数据的问题,但对于 IE 来说就会在多次动态加载某个 js URL 的时候总是缓存老的数据内容。

  这时候如果服务端提供 js 数据输出的 URL 是纯动态页面的话,可以设置 header 来强制客户端不缓存数据;如果是纯静态页面的话,可以在 URL 后面添加一个随机的字符串(比如 sURL+'?'+((new Date()).getTime()) ,不过对于这样的静态内容来说浏览器做本地缓存也很应该)。

  但如果你提供服务的是经过 Web Cache 做了 Cache 的内容,只有在内容发生变化的时候才通知 Oracle Web Cache 清除当前缓存,这时候想让 IE 浏览器即时抓到变化的内容就有点麻烦了。如果在 URL 后面增加一个随机的字符串参数的话, IE 固然不会错误的进行缓存,但 Web Cache 内存中就保留了无数个不同的 URL 对象,而实际上这些对象都是相同的东西。

  好在 Web Cache 控制台可以通过设置 Global URL Parameters to Ignore 来 Avoid unwanted copies ,让 Web Cache 在遇到 URL 中特定的 query 参数时进行忽略,以便把这些URL过滤成相同的一个。

  挺好用的一个功能,但似乎应用了这个过滤规则以后似乎无法即时清除指定的 URL cache 了。到后台查看 web cache 里面的对象,原来这个过滤规则的处理方法是把指定的参数的值用 @ 符号代替(比如 myservice.php?a=1&sid=45&rnd=4837281828 , 如果把 rnd 设置为 Global URL Parameters to Ignore 的话,过滤之后的 URL 就变成 myservice.php?a=1&rnd=@&sid=45),并且会对所有的参数按字母重新排序( sid 参数被放到了 rnd 参数的后面)。因此如果按照假定的 URL 来写清除规则( myservice.php\?a=1&sid=.* )的话就无法正确定位 cache 对象,需要把清除规则的参数也进行相应的调整才行。

Last Modified on 2007-08-08 22:34
1 条评论:
- lihuawei () (link) 于 2007-08-10 16:39
确实很强啊
日志存档
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
本 Blog 原创内容
遵循以下授权:

Creative Commons
(创作共用) CC

署名-非商业性
-相同方式分享
ZEAL Blog 基于
Powered byPivot - 1.24.1: 'Arcee'
Pivot1.24.1
开发
系统部署于
Linode.com
Launched @
2005-04-27
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | About me | Back To Home | @ZEAL | zbird.com | 沪ICP备05024379号