Asp.net mvc 知多少(九)
本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。
由于个人技术水平和英文水平也是有限的,因此错误在所难免,希望大家多多留言指正。
系列导航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)
Asp.net mvc 知多少(七)
Asp.net mvc 知多少(八)
Asp.net mvc 知多少(九)
本节主要讲解缓存的使用
Q87. 什么是caching(缓存)以及什么时候使用缓存?
Ans. Caching 是高性能web应用程序的一个很重要的方面。Caching是一种提高web应用程序性能的高效方法。Caching 提供了存储经常访问的数据以及重用这些数据的一种方式。
何时使用缓存:
- 对经常访问的内容使用缓存;
- 避免缓存对用户唯一的内容;
- 避免缓存不经常访问的内容;
- 使用
VaryByCustom
方法去缓存基于自定义的请求类型(比如cookie,role,theme,browser等等)的多个版本的内容; - 使用64位的Windows Server和Sql Server进行高效缓存;
- 如果使用database进行缓存,需要确保数据库服务器拥有充足的内存,否则会适得其反而降低性能。
- 如果要缓存经常变化但又经常访问的动态内容,可以定义一个短暂的缓存过期时间来实现。
Q88. 缓存的好处是什么?
Ans. 主要有以下几点:
- 减少寄宿服务器的往返调用(round-trips)。
- 如果缓存在客户端或是代理,将减少对服务器的请求,减少带宽。
- 减少对数据库服务器的往返调用(round-trips)。
- 当内容缓存在web服务器,能够减轻对数据库的请求。
- 减少网络带宽。
- 避免了重新生成可重用内容的时耗。
- 提高性能
- 因为缓存减少了round-trips, network traffic(网络带宽),并避免了生成可重用内容的时耗,所以对性能有巨大的提高。
Q89. 什么是output caching(输出缓存)?
Ans. OutputCache
过滤器允许你缓存一个action的输出数据。默认该过滤器只缓存60s。60s后,ASP.NET MVC会重新执行action并再次缓存输出。
class HomeController : Controller
{
[OutputCache(Duration = 20, VaryByParam = "none")]
public ActionResult Index()
{
ViewBag.Message = DateTime.Now.ToString();
return View();
}
}
Index()
action的输出将会被缓存20s。
Output Caching Location(输出缓存的路径)
默认内容被缓存在3个地方:web server(web 服务器),proxy server(代理服务器),user's browser(用户浏览器)。
你可以通过修改OutputCache
特性的Location
参数来控制内容缓存的地方。Location
可以设置为:Any
,Client
,Downstream
, Server
,None
,ServerAndClient
。
默认,Location
参数设置为Any
可以适用于大部分场景。但是有些时候你可能需要对缓存数据有更多的控制。
Q90. ASP.NET MVC中什么是Donut caching 和 Donut hole caching?
Ans. Donut caching 缓存除了部分内容以外的整个页面。在介绍Donut caching之前,我们使用Output Caching(输出缓存)来缓存整个页面。
何时使用Donut caching?
假设你有一个web应用程序中有一些页面,比如主页,主页展示的内容对所有用户来说都是一样的除了用户的登陆信息比如用户名。如果你想通过OutputCache(VaryByParam=UserID)
来为所有用户缓存主页,那么整个页面将会为每个用户分别缓存。这将不是一个好的实践,因为如果同时又1000个登陆的用户,就将会缓存1000个网页。
为了解决这个问题,Donut Caching 被引入,它为所有用户缓存一份整个页面除了部分动态内容。这个动态部分实际上类似于缓存内容上的一个洞(像甜甜圈)。
Donut caching 非常适用于对大部分内容很少改变但又有部分内容动态改变的页面进行缓存。
Donut Hole caching
Donut Hole Caching和Donut Caching刚好相反,它用来缓存页面中的一小部分。
何时使用Donut Hole caching?
假设你有一个web应用程序,它需要在每个页面里显示产品列表,那么这时以HTML的形式缓存一个产品列表就是很需要的了,Donut Hole Caching就是设计来处理这种情况。
ASP.NET MVC 通知在Child Action上使用OutputCache来支持Donut Hole caching:
class HomeController : Controller
{
[ChildActionOnly]
[OutputCache(Duration = 60)]
public ActionResult CategoriesList()
{
// Get categories list from the database and
// pass it to the child view
ViewBag.Categories = GetCategories();
return View();
}
}
Asp.net mvc 知多少(九)的更多相关文章
- Asp.net mvc 知多少(十)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Asp.net mvc 知多少(一)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Asp.net mvc 知多少(三)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Asp.net mvc 知多少(六)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Asp.net mvc 知多少(七)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Asp.net mvc 知多少(八)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问[http: ...
- Asp.net mvc 知多少(五)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Asp.net mvc 知多少(四)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Asp.net mvc 知多少(二)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
随机推荐
- android——网络操作(一)连接网络
连接网络 一,包含许可 <uses-permissionandroid:name="android.permission.INTERNET"/> <uses-pe ...
- 【Xilinx-VDMA模块学习】-01- VDMA IP的GUI配置介绍
使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2). 在我的系统中,GUI配置图片如下:(其实和默认配置没有太大区别) 下面介绍 ...
- scala和maven整合实践
.scala和maven如何整合 网上有一堆教程讲idea如何new module或new project一步一步来创建scala工程,在这里我不推荐这个.原因是现在主流的开发环境,大多数是采 ...
- 如何编写高质量CSS
虽然写过很多css代码,但每次动手写都让我痛苦不堪,如何组织好那一堆堆的代码,如何提高代码复用率,甚至如何命名类,这些都让我纠结.下面的浅显的谈一谈在看了<编写高质量代码>中的html和c ...
- 搭建自己的BT下载平台服务器
[原理基础] BT(Bit Torren比特流)是由国外的一名叫Bram Cohen的程序员开发的下载软件,可以说它是目前网络是非常流行的一个多点下载的P2P软件,它最显著的特点就是:下载的人越多,速 ...
- Zepto.js-事件处理
http://www.webdevs.cn/article/68.html web开发网 事件 $.Event $.Event(type, [properties]) ⇒ event 创建并初 ...
- jmeter接口测试实践
一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...
- 转:找不到include xgpio.h;Unresolved include xgpio.h
这个文档讲解的是在SDK下出现的问题,如果在ISE下编译是有错的,不能正常进入SDK,那这篇文档不适合你. 问题是这样的.根据教程<XILINX FPGA Verilog编程大全>做SOC ...
- 常用的JavaScript字符串处理函数及用法
最近参加了几次前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等,如果你经常参加笔试或者也是一个过来人,相信你也跟我一样,发现字符串的处理是前端招聘过程中最 ...
- swift 定位 根据定位到的经纬度转换城市名
好久没写随笔了 最近这段时间项目有点紧 天天在加班 国庆 一天假都没放 我滴娃娃 好啦 牢骚就不发了 毕竟没有什么毛用 待我那天闲了专门写一篇吐槽的随笔