缓存一、Asp.net页面缓存

本篇文章是个人对Asp.net缓存的理解,在写文章中过程中参考了以下博文:

http://www.cnblogs.com/fish-li/archive/2012/01/11/2320027.html#_labelStart

http://www.cnblogs.com/haiyabtx/archive/2012/11/18/2776462.html

相信大家在面试时,经常被问到的问题就是如何提高程序性能?有用过缓存吗?缓存有哪些实现?等等…在数据驱动的Web开发中,经常要重复从数据库中执行查询获取数据,这种重复增加了服务器、数据库、及网络负载。通过缓存可以解决这些问题,提高访问速度和效率。本篇文档主要讨论的是Asp.net中让浏览器端实现Cache缓存。后面在学习和整理服务器端缓存对象Cache、自定义缓存(静态、字典等)、Memcached,待整理后再发布博文与大家讨论。

页面全局缓存

本例很简单,就是在MVC默认工程结构下创建了MyCacheController和Index页面,在index页面上按F5时输出当前时间。工程结构如下图

Index.cshtml页面代码

@{

ViewBag.Title = "Index"; 

}

<h2>Index</h2>

当前时间:@DateTime.Now.ToString("HH:mm:ss.ffff") 

MyCacheController.cs代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace CacheMvc.Controllers
{
    public class MyCacheController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

    }
}

默认不设置页面缓存,用Fiddler查看Header请求情况,InspectorsàHeaders中可查看到,Cache显示的 Cache-Control:private,意思是当前页面是没有缓存的。所以这个时间页面每按一次F5就进行请求一次服务器,并且显示当前最新时间。

修改代码,设置为客户端浏览器缓存10秒

        [OutputCache(Duration=10)]
        public ActionResult Index()
        {
            return View();
        }

Fiddler查看Header请求情况,InspectorsàHeaders中可查看到,在设置为页面缓存后可以看到Cache 的显示结果改变了Cache-Control:public,max-age=10。这时客户端浏览器对此页面进行了缓存。与上图中显示的Private是不一样的。这时再按F5进行页面刷新,Http返回的状态为304,且下图中④处Entity显示为 Last-Modified:Tue,31Mar 2015 08:36:35GMT,证明此时刷新页面浏览器并没有去请求服务器端,而是显示的上一次缓存内容。

HTTP 304 状态的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

这样只需要在后台代码中加入一句[OutputCache(Duration=10)]就实现了客户端页面缓存10秒,实现很简单吧,通过上面的实例我们可以验证的结果是,用户发出请求指令时,如果被请求的页面有缓存且没过期,则浏览器不会发起至服务器的请求,而是直接显示缓存页。这样可以有效的减少对服务器的请求,从而提升效率。

具体在实际应用中,比如查看当前登录用户的积分、等级不需要实时刷新的页面可以进行缓存。

时间: 2024-10-14 22:21:58

缓存一、Asp.net页面缓存的相关文章

ASP.NET页面缓存

静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出缓存可以使用以下两种方式:一

ASP.NET 页面缓存OutputCache用法实例(附ab压力测试对比图)

本文主要介绍Web窗体页面中的使用方法,MVC中使用方法,大家自行百度. 一.简单一行指令即可实现 <%@ OutputCache VaryByParam="none" Duration="300" %> 这样整个页面就被缓存了,由于我是首页进行的缓存,没有任何参数所以VaryByParam值设置为none,如果希望通过指定的参数来缓存内容可以设置"id;classid"这种形式,或者干脆就用"*",通过所有参数来

asp.net页面清除缓存1

1.页面每次打开页面的时候都要清除本页面的缓存 页面打开时候,由于缓存的存在,刚刚更新的数据有时无法在页面得到刷新,当这个页面作为模式窗口打开问题更加明显 2.asp.net页面缓存的清除 ASP.NET清除页面缓存 (1) Response.Buffer = true;Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);Response.Expires = 0;Response.CacheControl = "no-cac

asp.net页面清除缓存2(转)

ASP.NET 提供三种主要形式的缓存:页面级输出缓存.用户控件级输出缓存(或称为片段缓存)和缓存 API. 输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用这两种缓存就足够了.而缓存 API 则提供了额外的灵活性(实际上是相当大的灵活性),可用于在应用程序的每一层利用缓存. Steve 的缓存提示 尽早缓存:经常缓存 您应该在应用程序的每一层都实现缓存.向数据层.业务逻辑层.UI 或输出层添加缓存支持.内存现在非常便宜 — 因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很

asp.net里如何清空页面缓存的后台代码

asp.net里如何清空页面缓存的后台代码(因为只有GET请求会有缓存)   题描述:当使用ajax的时候,很有可能出现同一次请求,这里.比如buttonA修改了数据,而buttonB导出数据,如果两个按钮都采用ajax的技术来做的话,实际上buttonB在第二次点击以后,不会重新从数据库里获得一次数据,而是直接将缓存页发送给客户端.恩-这么做是好的,但是不是我们希望的.所谓使用了Ajax产生了不可预计的结果,有一部分可能也许就在于此.所以我要做的就是每次GET请求的时候都去清空缓存,然后再生成

探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)

其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.html#mvc 本章Demo:https://github.com/dunitian/LoTCodeBase/blob/master/NetCode/6.网页基础/BMVC5/MVC5Base/Controllers/CacheController.cs 这次来篇放松的,咱们不要老是说安全相关的东西.

ASP.NET MVC 阻止当前请求的视图页面缓存OutputCache

设置缓存 [OutputCache(Duration =333,VaryByCustom ="Index")] 缓存: //在action中,临时阻止该次请求的视图页面缓存 Response.Cache.SetNoServerCaching(); //可以使得默认的缓存,在规定过期时间内,除第一次访问外,都是304. Response.Cache.SetOmitVaryStar(true); 主要防范,循环参数来发起请求时,造成的大量无意义的参数生成的垃圾缓存过多,大量占用内存的情况.

ASP.NET MVC 缓存

什么是缓存: 缓存是将信息(数据或页面)放在内存中以避免频繁的数据库存储或执行整个页面的生命周期,直到缓存的信息过期或依赖变更才再次从数据库中读取数据或重新执行页面的生命周期 哪里用缓存: 数据被频繁的使用,并且很少发生变化或对即时性的要求不高. 怎么用缓存: .NET自带的缓存分为 Control缓存.Action缓存.配置缓存(这是逻辑上的区分,在用法和实现上其实是一样的)通过OutputCache关键字来实现缓存.用起来是十分的容易. 我们先看下OutputCache的实现.这个实现用到了

提高ASP.NET页面载入速度的方法

前言 本文是我对ASP.NET页面载入速度提高的一些做法,这些做法分为以下部分: 目录 1.采用 HTTP Module 控制页面的生命周期. 2.自定义Response.Filter得到输出流stream生成动态页面的静态内容(磁盘缓存). 3.页面GZIP压缩. 4.OutputCache 编程方式输出页面缓存. 5.删除页面空白字符串.(类似Google) 6.完全删除ViewState. 7.删除服务器控件生成的垃圾NamingContainer. 8.使用计划任务按时生成页面.(本文不