zoukankan      html  css  js  c++  java
  • [转]Asp.net mvc 网站之速度优化 -- 页面缓存

    网站速度优化的一般方法

    由于网站最重要的用户体验就是速度,特别是对于电子商务网站而言。

    一般网站速度优化会涉及到几个方面:

    1. 数据库优化 — 查询字段简历索引,使用数据库连接池和持久化,现在还有种趋势,就是选择使用No SQL作为补充;

    2. 数据缓存 — 使用Memcached等;

    3. 负载均衡 — 使用ngnix等

    4. 页面缓存 — 将.aspx, .jsp等动态页面缓存或静态化为.html页面

    5. 前端优化 — Yahoo 14条前端优化原则。

    城江湖(Incity.me)针对 2 数据缓存, 4 页面静态化, 5 Yahoo 14条优化原则做了具体的实践,并获得了实际效果,以后的系列文章会举出一些实践方法和列出部分代码,这次主要针对页面缓存进行说明。

     

    哪些地方需要页面缓存?

    以InCity为例,首页商品分类帮助中心等都是用于展示商品和网站信息的,与用户的交互相对较少。在某个时间段内(1小时),所有用户看到的页面都应该是相同的, 并不会因为不同的用户而显示不同的信息。

     

    全局页面缓存 OutputCache

    InCity是基于ASP.NET MVC开发的,熟悉ASP.NET MVC的童鞋都知道,ASP.NET MVC自带了一个属性叫OutputCache,  最常用的是Duration和VaryByParam两个参数:

    MSDN:

    Duration:表示页或用户控件进行缓存的时间(以秒计)

    VaryByParam:分号分隔的字符串列表,用于使输出缓存发生变化。

     

    Code:

    [OutputCache(Duration="3600" VaryByParam="type")]

    public ActionResult Catalog(string type)

    解释一下:

    1. 用户第一次输入http://incity.me/catalog/food,从后台获取,并为catalog/food生成缓存页面,3600秒内缓存页面有效。

    2. 用户再次输入http://incity.me/catalog/food,从缓存页面获取。

    3. 当用户第一次输入http://incity.me/catalog/play的时候,因为{type}从food变成了play,数据从后台获取,并为catalog/play生成缓存代码3600秒内有效。

    4.用户再次输入http://incity.me/catalog/play,从缓存页面获取。

     

    局部页面缓存 PartOutputCache

    上 述的解决方法对于大部分都可以处理,但是如果遇到下面的情况怎么办?登录前首页右侧的面板是显示登录区,登录后是显示用户信息,而首页如果采用 OutputCache全局页面缓存的话,则右侧显示不同的账户信息的。因为前面我们已经提到,在某个时间段内(1小时),所有用户看到的页面都应该是相 同的。

    登录前:

    登录后:

     

    这时候就需要针对左侧的商品作局部缓存,而对右侧不使用缓存。如何达到这个效果呢?遗憾的是,这时候微软官方的ASP.NET MVC并未提供这种功能,因此参考使用了PartOutputCache,用法如下:

    [PartOutputCache(CacheDuration = 3600)]

    public ActionResult ShowCase()

    aspx页面代码则变成了

    <div id=”Container”>

    <!–使用了缓存–>

    <%Html.RenderAction<HomeController>(p => p.IndexShowCase());%>

    <!–没有使用缓存–>

    <%Html.RenderAction<HomeController>(p => p.LoginPanel());%>

    </div>

  • 相关阅读:
    Cocos2d-x 3.2:定时器的使用和原理探究(2)
    Cocos2d-x 3.2:定时器的使用和原理探究(1)
    c++初学(电梯实验加强版)
    中序线索化二叉树
    c++初学(电梯实验)
    二叉树表达式计算(2)
    输入计算表达式,将他们存在string【】中
    函数修改二维数组的值
    单件模式以及内存释放
    迷宫(栈)不能求最短路径
  • 原文地址:https://www.cnblogs.com/Raywang80s/p/3624104.html
Copyright © 2011-2022 走看看