网站缓存处理---网站优化利器

                                   网站提速之“葵花宝典”

 我们大多数对缓存一无所知,因为我们很多时候都很少开发大型的资源网站,尤其是视频网站,图片网站及含有大资源的网站。如果你想让你网站获得新生,那就认真看完下面这篇文章吧。

  网站获得访问量无非二点:一、做seo优化(网络爬虫),二、优化网站响应速度 (少使用flash特效,租用好的服务器,优化你代码(缓存))

 下面是图片缓存与文字缓存的区别:

  图片缓存跟一般页面缓存是不大一样的,一般页面缓存只要设置
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>
即可。
② 但图片缓存的话,只有通过另辟蹊径的方法,即图片资源加个随机数
    如:<img src="../../uppic/a.jpg"+"?temp="+<%=Math.random()%>/>








1.服务器端禁用缓存。那客户端不论如何都不能缓存网页
2.服务器端设置页面过期时间。客户端是如何判断什么时候过期并从新取数据
3.服务器(WEB服务器配置缓存策略)


一、服务器如何做到禁用缓存的。
代码实现:
1, 使用java提供的方法,在jsp或者servlet中都可以 
<% 
response.setHeader("Pragma","No-cache"); 
response.setHeader("Cache-Control","no-cache"); 
response.setDateHeader("Expires", 0); 
%> 
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>
只有在使用安全连接时“Pragma: no-cache”才防止浏览器缓存页面。对于不受安全保护的页面,“Pragma: no-cache” 
被视为与“Expires: -1”相同,此时浏览器仍旧缓存页面,但把页面标记为立即过期。 
在IE 4或5中,“Cache-Control”META HTTP-EQUIV标记将被忽略,不起作用。 
   在实际应用中我们可以加上所有这些代码。然而,由于这种方法不能适用于所有的浏览器,所以是不推荐使用的。但 
如果是在Intranet环境下,管理员可以控制用户使用哪种浏览器,我想还是有人会使用这种方法。


相关的语言整理如下:


禁止服务器端缓存:


Response.Expires = 0 或<meta http-equiv="Expires" CONTENT="0">


禁用客户端缓存。


HTML网页 


<META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">


ASP网页 


<% Response.Expires = -1 Response.ExpiresAbsolute = Now() - 1 Response.cachecontrol = "no-cache" %>


PHP网页 


header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); 


JSP


response.setHeader("Pragma","No-Cache"); response.setHeader("Cache-Control","No-Cache"); response.setDateHeader("Expires", 0);


C#中禁止cache的方法!


Response.Buffer=true; Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1); Response.Expires=0; Response.CacheControl="no-cache";




二、如何配置IIS或Resin或Apache或nginx的缓存策略
IIS篇:
如果要禁用IIS所有站点静态页面缓存,那么可以:   
编辑注册表中的   DisableStaticFileCache值,0为启用,1为禁用   ,该键值的位置位于:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters
如果没有该键值,新建一个dword值的就可以
我按照这样的方法配置了一下不过没有做测试!(如何测试ASP的缓存是否有呢?)


Resin篇
JSP应该会有。研究下看看
摘录的相关资料:
1、服务器缓存可以将动态页面加速到接近静态页面的速度。很多页面通过数据库请求生成,仅在每15分钟左右更新,比如CNN或Slashdot。Resin 可以将结果进行cache,并将它们做为静态页面处理,Resin的缓存对任何Sevrvlet有效,包括jsp和XTP页面,它依赖于http响应头。
默认情况下,页面是不缓存的,要进行cache,页面必须设置http cache头。
Resin的缓存操作类似代理cache,每个用户共享同样的cache页面




不缓存页面:
response.setHeader("Cache-Control", "no-cache, post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT");


设定网页生存期:(服务器端设置好缓存过期时间)
<%
long now = System.currentTimeMillis();
response.setDateHeader("Expires", now + 15 * 60000);
%>


不缓存页面2:
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


找了一下相关的资料不多。好像只能是修改RESIN的配置
<!-- 设置缓存页、静态也的延时值 --> 
      <cache-mapping url-pattern="/" expires="5s"/> 
      <cache-mapping url-pattern="*.gif" expires="60s"/> 
      <cache-mapping url-pattern="*.jpg" expires="60s"/> 
      <cache-mapping url-pattern="*.png" expires="60s"/> 
如果是专业版可以:
<!-- 缓存启用 (专业版的功能)   --> 
    <resin:if test="${isResinProfessional}"> 
      <cache path="cache" memory-size="64M"> 
        <!-- Vary header rewriting for IE --> 
        <rewrite-vary-as-private/> 
      </cache> 
    </resin:if> 
 
下面的方法也能改变HTTPHEADER属性,它的原理和1是一样的.
<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
StringnewLocn="/index.html";
response.setHeader("Location",newLocn);
%>






JSP禁用缓存常用方法
jsp页面禁止缓存设置




1.客户端缓存要在<head>中加入类似如下内容: 
<META HTTP-EQUIV="pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> 
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"> 
或  


<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0">   
       


         


2.在服务器的动态网页中禁止缓存,要加入类似如下脚本 
response.setHeader("Pragma","No-cache"); 
response.setHeader("Cache-Control","no-cache"); 
response.setDateHeader("Expires", 0); 


           


3.设置有限时间的缓存 
int minutes = 10; 
Date d = new Date(); 
String modDate = d.toGMTString(); 
String expDate = null; 
expDate = (new Date(d.getTime() + minutes * 60000)).toGMTString(); 
response.setHeader("Last-Modified", modDate); 
response.setHeader("Expires", expDate); 
response.setHeader("Cache-Control", "public"); //   HTTP/1.1 
response.setHeader("Pragma", "Pragma"); //   HTTP/1.0 
建议:jsp cache最好做在过滤器上,把需要缓冲的页面集中在同一个目录下,每次更改只须更改web.xml就可以完成缓冲设置,这样比较方便.


            


           


4.最后如果以上方法都不行的话,就在你的正常的URL后面加上一个尾巴


在JS中就选择


var timestamp = (new Date()).valueOf();  


URL+"&timestamp="+timestamp;


在Java代码中就选择


long timestamp=new Date().getTime();


URL+"&timestamp="+timestamp;


这样的话,你的URL始终都在变化,自然浏览器就得老老实实的进行更新了,它也无缓冲可拿了。




JSP 页面缓存以及清除缓存 博客分类: jsp
 .


JSP 页面缓存以及清除缓存


一、概述 


 


    缓存的思想可以应用在软件分层的各个层面。它是一种内部机制,对外界而言,是不可感知的。 


    数据库本身有缓存,持久层也可以缓存。(比如:hibernate,还分1级和2级缓存) 


    业务层也可以有缓存(但一般来说,这是一个过程域,不会设缓存)。 


    表现层/数据服务层(传统web的表现层)也可以设置缓存(jsp cache 就是这一层,实现在app 


 


server上的缓存机制) 


    另外Browser也有缓存(如IE)这个大家也都知道(实现在 web server 上的缓存机制)。越上层的


 


缓存效果越好,越底层的缓存影响越深远。 


 


二、缓存实现(浏览器缓存当前访问的JSP动态页面) 


 


(一)、服务端方法: 


 


<%   


response.setHeader("Pragma","No-cache");    


response.setHeader("Cache-Control","no-cache");    


response.setDateHeader("Expires", -10);   


%>  


(二)、客户端方法: 


 


meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,


 


meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于


 


content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人


 


自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和


 


keywords(分类关键词),所以应该给每页加一个meta值。比较常用的有以下几个: 


name 属性 


1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等; 


2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词; 


3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容; 


4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者; 


5、<meta name="Robots" contect="all|none|index|noindex|follow|nofollow"> 


 


其中的属性说明如下: 


设定为all:文件将被检索,且页面上的链接可以被查询; 


设定为none:文件将不被检索,且页面上的链接不可以被查询; 


设定为index:文件将被检索; 


设定为follow:页面上的链接可以被查询; 


设定为noindex:文件将不被检索,但页面上的链接可以被查询; 


设定为nofollow:文件将不被检索,页面上的链接可以被查询。 


 


http-equiv属性 


1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80"> 


和 <meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语


 


言;又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集; 


2、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时间n内,


 


跳转到页面http;//yourlink; 


3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到


 


期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式; 


4、<meta http-equiv="Pragma" contect="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅


 


页面内容,设定后一旦离开网页就无法从Cache中再调出; 


5、<meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT">cookie设定,如果


 


网页过期,存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式; 


6、<meta http-equiv="Pics-label" contect="">网页等级评定,在IE的internet选项中有一项内容


 


设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的; 


7、<meta http-equiv="windows-Target" contect="_top">强制页面在当前窗口中以独立页面显示,


 


可以防止自己的网页被别人当作一个frame页调用; 


8、<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)">和<


 


meta http-equiv="Page-Exit" contect="revealTrans(duration=20,transtion =6)">设定进入和离


 


开页面时的特殊效果,这个功能即FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个


 


frame页面。 


 


  三、缓存应用 


 


(一)、防止JSP页面缓存为了防止浏览器缓存当前访问的JSP动态页面,可以采用如下的方式进行设置


 


: 


<% 


// 将过期日期设置为一个过去时间 


 


response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT"); 


 


// 设置 HTTP/1.1 no-cache 头 


response.setHeader("Cache-Control", "no-store,no-cache,must-revalidate"); 


 


// 设置 IE 扩展 HTTP/1.1 no-cache headers, 用户自己添加 


response.addHeader("Cache-Control", "post-check=0, pre-check=0"); 


 


// 设置标准 HTTP/1.0 no-cache header. 


response.setHeader("Pragma", "no-cache"); 


%> 


 


当然,每一个页面都包含这些代码会很繁琐,可以通过自定义过滤器(Filter)的方法来处理相关的页


 


面  


 


(二)、jsp,html 清除页面缓存 


 


1.禁止客户端缓存要在<head>中加入类似如下内容: 


 


<META HTTP-EQUIV="pragma" CONTENT="no-cache"> 


<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> 


<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"> 


 


或   <meta http-equiv="pragma" content="no-cache"> 


     <meta http-equiv="cache-control" content="no-cache"> 


     <meta http-equiv="expires" content="0">   


 


2.在服务器的动态网页中禁止缓存,要加入类似如下脚本 


 


response.setHeader("Pragma","No-cache"); 


response.setHeader("Cache-Control","no-cache"); 


response.setDateHeader("Expires", 0);  


 


(三)设置有限时间的缓存 


 


    int minutes = 10; 


    Date d = new Date(); 


    String modDate = d.toGMTString(); 


    String expDate = null; 


    expDate = (new Date(d.getTime() + minutes * 60000)).toGMTString(); 


    response.setHeader("Last-Modified", modDate); 


    response.setHeader("Expires", expDate); 


    response.setHeader("Cache-Control", "public"); //   HTTP/1.1 


    response.setHeader("Pragma", "Pragma"); //   HTTP/1.0  


 


补充:关于.jsp cache的几条建议: 


1.jsp cache最好做在过滤器上,把需要缓冲的页面集中在同一个目录下,每次更改只须更改web.xml就可


以完成缓冲设置,这样比较方便. 


2.Gzip压缩可以将页面压缩得很小,平均压缩比为1/3,jsp cache的HashMap缓冲压缩后的页面,肯定比没


压缩前更节约内存消耗,并且效率更高.关于Gzip可以参考这个开源项


目:http://sourceforge.net/projects/pjl-comp-filter  






ASP.Net性能优化——页面输出缓存
        在计算机科学领域,广泛应用缓冲技术来提高系统的性能,它的原理是把经常存取的或者是比较重要的数据保存于内存中以减少系统的响应时间。对于WEB应用领域,缓冲技术主要是把HTTP请求的页面或数据保存于内存,以减少下次使用时重建它们的耗费。
     ASP.NET有两种用于WEB应用的缓冲技术:输出缓冲和数据缓冲。
     输出缓冲指:把一次请求所产生的动态输出保存于内存中。
     数据缓冲指:按照一定的策略把事先不确定的对象保存于内存中。
输出缓冲常用于把整个输出页面缓冲起来。对于一个存取繁忙的站点来说,把一些常用页面放入内存会带来性能上的极大提高。当一个页面被放入输出缓存,那么接下来的对该页面的请求将不再执行创建它的代码,而是从内存中直接返回该页面。
        但实际上,保存整个输出页面的方法并不一定都行得通,因为有些页面的输出取决于客户端的不同请求,称之为“定制”。这时,采取的方法即找出不同中的相同,把一些并不需要经常重新创建的对象和数据识别出来,进行缓冲。一旦这些部分被识别,那么它们将被一次创建并在缓存中保持一定的时间。
 选择缓存的时间是提高性能的关键。对一些部分来说,它们需要隔一定时间进行刷新,而另一些部分来说,可能仅仅只是需要保存一段时间。此种情况下,都可以设定“过期策略”来实现。一旦这些对象和数据到期,它们都将被从缓存中清除出去。当存取对象和数据的代码发现所要求的部分在内存中不存在时,将重建该对象或数据。
         ASP.NET支持文件和缓存关键字的依赖关系,它允许开发人员创建缓存依赖于一个外部文件或另一个缓存事物。利用这项技术可以更新一个缓存事物当其依赖的源文件发生改变时。


1 基本概念
        页面输出缓存通过保存动态页面的输出内容,大大提高了服务器应用的能力。缺省情况下,输出缓存选项是被打开的,但并不是任意给定的输出响应都将被缓存,除非显示地指定页面应被缓存。
         为使输出能够被缓存,输出响应至少应有一个有效的过期/有效策略以及公用cache的访问权限。当一个GET请求被送往页面,一个输出缓冲入口将被创建。接下来,对该页面的GET请求和HEAD的请求将直接从该缓冲入口中取出返回给用户,而对该页面的POST请求通常是显示地产生动态内容,却并非如同GET和HEAD请求一样从缓冲入口中取出。
         输出缓存还支持带请求串的GET方法,把请求串作为页面识别的一部分。这就意味着带有相同键值但排列次序不同的请求串的GET请求,可能导致缓存中认为不存在该输出页面。
         输出缓存需要知道页面缓存的过期/有效时间策略。如果一个页面在输出缓存中,而且又被指定为60分钟的页面过期时间,那么从它进入输出缓存开始,60分钟后该页面将从输出缓存中被清除。如果恰在此时,有一个对该页面的请求到达,页面的代码将被执行,页面输出又将重新进入输出缓冲。这种方式的过期策略称之为“强制过期”,页面只在一定时间内有效。
        如下,我们可以用下面一条语句来显示的指出页面在输出缓冲中的保存时间。
    <%@ OutputCache Duration=秒数 %>


2 实例
        下面举一个简单的例子来证实ASP.NET中的页面缓存功能
        在一个页加载时,我们显示它的时间,在页面过期时间(设为:10秒)到达之前,我们把页面刷新(相当于重发GET请求),看一看显示的时间;然后,在过期时间到达之后,再看显示的时间。如果,第一次和第二次显示的时间相同,那么就证明了,系统存在有页面输出缓存功能,做为对比,当过期时间到达后,新的请求将导致重新执行页面代码,产生新的时间显示。
程序源程序


<!--文件名: performance\FormPageCache.aspx-->
<%@ OutputCache Duration="10" %>
<!--过期时间设为10秒-->
<html>
<head>
<title>
页面输出缓存测试
</title>
</head>
<body >
    <center>  
    <h2><font face="Verdana">测试页面输出缓存实验</font></h2>
    <p><p><p>
    <hr>
    </center>    
   <asp:label id="lblTime" runat="server"/>
  </body>
</html><!--文件名: FormPageCache.aspx.cs-->
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
/** <summary>
/// FormPageCache 的摘要说明。
/// </summary>
public class FormPageCache : System.Web.UI.Page
{
    private void Page_Load(object sender, System.EventArgs e)
    {
         lblTime.Text ="现在时间是:" +  DateTime.Now.ToString();
    }


    Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
        //
        // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
        //
        InitializeComponent();
        base.OnInit(e);
    }
    
    /** <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
        this.Load += new System.EventHandler(this.Page_Load);


    }
    #endregion
}
第一次输出效果:
 
第二次输出效果:




第三次输出效果:




 实现页面缓存的另一种方法:


//指定页面输出缓存下一个10秒到期
    Response.Cache.SetExpires(DateTime.Now.AddSeconds(10));


    //指定所有用户都有对缓存的访问权力
    Response.Cache.SetCacheability(HttpCacheability.Public);


    //如果不希望进行页面缓存,可采用Response.Cache.SetSlidingExpiration方法,当其为True时,每次页面请求到达时,相当于页面过期时间到了,就要对页面输出重新刷新 。
    
    //当每次页面请求时,重置到期时间计数器,并且页面到期
    Response.Cache.SetSlidingExpiration(true);
例如上面的例子可以改写成如下例子:


<!--文件名:FormPageCache01.aspx-->
<html>
<head>
<title>
页面输出缓存测试1
</title>
</head>
<body >
    <center>  
    <h2><font face="Verdana">测试页面输出缓存实验1</font></h2>
    <p><p><p>
    <hr>
    </center>    
   <asp:label id="lblTime" runat="server"/>
   </body>
</html>


<!--文件名:FormPageCache01.aspx.cs-->
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;


/** <summary>
/// FormPageCache 的摘要说明。
/// </summary>
public class FormPageCache : System.Web.UI.Page
{
    private void Page_Load(object sender, System.EventArgs e)
    {
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(10));
        Response.Cache.SetCacheability(DateTime.Now.AddSeconds(10));
        lblTime.Text ="现在时间是:" +  DateTime.Now.ToString();
    }


    Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
        //
        // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
        //
        InitializeComponent();
        base.OnInit(e);
    }
    
    /** <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
        this.Load += new System.EventHandler(this.Page_Load);


    }
    #endregion
}



此文章参考网上资料


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值