Welcome 布拉格

BlogJava 首页 联系 聚合 管理
  6 Posts :: 13 Stories :: 15 Comments :: 0 Trackbacks

关于中大型开发b/s开发中的缓存(cache),我的一些看法,有不正确的或者是有笔误的地方,请指正。thanks

首先,应该了解基本的,对于缓存的知识:

Q:如:静态缓存和动态缓存的区别?缓存是什么?

A:缓存,在某个方面简单的说,就是无需与数据库再次交互.

静态缓存: 即所说的html,shtml文件。

动态缓存:即所说的把缓存存于服务器的内存中,需要时调用。

他们的区别在哪呢?

静态缓存不用占用负载(服务器的内存),但需要占用服务器的空间(因为生成很多文件),最重要的,是因为生成了静态的缓存,而不利于维护,因为当你设计一个系统的时候,你必须考虑到用这个的后果,应该就像设计模式中所说的,有的模式是灵活的,而有的模式是一开始布署的时候就不变了的。

因此,重申一次,设计时需要小心。考虑尽可能多的东西,如:系统升级后,是否还适用(尽可能的想),是否有利于更换模板,为一些页面添加特殊的或特定的代码,用shtml还是html?等等。

而动态的cache,我想大家都应该知道动网“迷城浪子”写的用application做为cache的class了,这是asp中比较经典的用动态cache的例子。因此我也不用说太多过于application的cache了。他的优点就在于,较静态的cache利于维护和升级。以下是静态缓存与动态缓存示意图:

A: 何时使用静态缓存和动态缓存呢?

Q:这个要看具体,你是如何布署服务器,以及,你是怎么样设计你的程序与代码的
举个例子:

我的服务器负载量够大,无需考虑内存这里问题,那么你可以较多的使用动态的cache,如新闻的索引页、首页、更多的索引页。而不必再生成静态的。如动易以前的版本(现在的版本我是很清楚,现在的好像是采用了静态的缓存)广泛采用动态的缓存技术。因此在后台更新时,需要手动更新cache,当然这里就可以采用URL rewrite了,更利于Search Engine的收录。提醒一句,这一点也蛮重要的,也是提醒很多的个人架设服务器的朋友,Search Engine并不是非常的友好的
(通常Search Engine的robot在收录的网站的过程中。会一直在爬你的网站,因此,做一个流量访问的系统还是很有必要的,记得cnblog(博客园)的dodo在检测中发现yahoo的robot每分钟爬的次数是google的几倍,这对你的网站速度是某个方面是有影响的,有的时候还很大)

而静态的缓存呢,上面也说到了,不利于维护。但广泛采用的MVC开发方式,把页面与程序很好的分离开来的话,是可以更快的提高,如我下面的图所示:

Q: 还有其它的方式来布署吗?

A: 有。如下所示。采用Proxy的技术来设计,通过代码获得静态cache是否可用,如果可用的话,如果不可用(这里所说的不可用,即是cache不存在,或者已经改动过cache了),则重新生成输出,否则的话,直接输出。

采用动态cache和静态cache的完整示意图,用消息通讯。简单的说明了如何应用cache的布署和应用。当然可以不用Cache Proxy来判断的,去掉cacheproxy也是一样的。


<------------------------------------>  Temporary Internet Files

1。在Asp页面首部<head>加入  

  Response.Buffer   =   True  
  Response.ExpiresAbsolute   =   Now()   -   1  
  Response.Expires   =   0  
  Response.CacheControl   =   "no-cache"  
  Response.AddHeader   "Pragma",   "No-Cache"  

  2。在HtML代码中加入

  <HEAD>  
  <META   HTTP-EQUIV="Pragma"   CONTENT="no-cache">  
  <META   HTTP-EQUIV="Cache-Control"   CONTENT="no-cache">  
  <META   HTTP-EQUIV="Expires"   CONTENT="0">  
  </HEAD>  

  3。在重新调用原页面的时候在给页面传一个参数  

  Href="****.asp?random()" 

前两个方法据说有时会失效,而第三种则是在跳转时传一个随机的参数! 因为aspx的缓存是与参数相关的,如果参数不同就不会使用缓存,而会重新生成页面,每次都传一个随机的参数就可以避免使用缓存。这个仅适用于asp&asp.net

4。在jsp页面中可使用如下代码实现无缓存:

response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server

这些代码加在<head> </head>中间具体如下

<head>
<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%>
</head>

5。window.location.replace("WebForm1.aspx");  
  参数就是你要覆盖的页面,replace的原理就是用当前页面替换掉replace参数指定的页面。  
  这样可以防止用户点击back键。使用的是javascript脚本,举例如下:

a.html

<html>
    <head>
        <title>a</title>    
        <script language="javascript">
            function jump(){
                window.location.replace("b.html");
            }
        </script>
    </head>
    <body>
       <a href="javascript:jump()">b</a>
   </body>
</html> 

b.html

<html>
    <head>
        <title>b</title>    
        <script language="javascript">
            function jump(){
                window.location.replace("a.html");
            }
        </script>
    </head>
    <body>
       <a href="javascript:jump()">a</a>
   </body>
</html> 

前4种只是清空了cache,即存储在Temporary Internet Files文件夹中的临时文件,而第五种则是使用跳转页面文件替换当前页面文件,并没有清空cache,也就是说Temporary Internet Files产生了相关的临时文件,两者搭配使用真是清空缓存,必备良药。正好我这里有了记录,所以常来看看哦。

posted on 2007-09-11 16:20 Welcome 阅读(247) 评论(0)  编辑  收藏 所属分类: HTML\CSS

只有注册用户登录后才能发表评论。


网站导航: