输出缓存是一种用于减少服务器处理时间的技术。它涉及到存储已呈现的页面并在后续请求中从缓存中检索它们,而不是再次生成它们。
启用输出缓存
要启用输出缓存,可以按照以下步骤操作:
-
在
web.config
文件中,找到 - 在中,添加以下代码:
-
保存
web.config
文件。
输出缓存的类型
有三种主要的输出缓存类型:
- 页面输出缓存:将整个页面存储在缓存中。这是最简单的缓存类型,也是最有效的。
- 片段输出缓存:将页面的一部分存储在缓存中。这比页面输出缓存更灵活,但有效性较低。
- 数据输出缓存:将数据片断存储在缓存中。这是一种用于缓存数据库查询或其他数据流的高级缓存类型。
输出缓存的好处
启用输出缓存具有以下好处:
- 减少服务器处理时间
- 提高页面加载速度
- 降低带宽使用率
- 提高网站的可扩展性
输出缓存的局限性
输出缓存也有一些局限性:
- 缓存的页面可能会过时
- 缓存可能会导致会话问题
- 缓存的页面可能会变得很大
配置输出缓存
可以配置输出缓存以满足特定的需求。以下是一些可以配置的选项:
- Duration:指定页面在缓存中保持有效的时间(以秒为单位)。
- VaryByParam:指定哪些查询字符串参数会触发缓存中的不同版本。
- Location:指定缓存页面存储的位置(服务器或客户端)。
监控输出缓存
重要的是监控输出缓存的使用情况以确保其有效性。以下是一些可以用来监控输出缓存的工具:
- Visual Studio:Visual Studio 提供了用于分析输出缓存使用的工具。
- Performance Monitor:Windows 中的 Performance Monitor 可以用于监视服务器上的缓存活动。
- 第三方工具:有许多第三方工具可用于监视输出缓存。
结论
启用输出缓存是提高网站性能的有效方法。通过了解输出缓存的类型、优点和局限性,可以配置和监控它以满足特定的需求。
什么叫缓存?
所谓的缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。
1、通过文件缓存;顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式;
2、内存缓存;也就是创建一个静态内存区域,将数据存储进去,例如我们B/S架构的将数据存储在Application中或者存储在一个静态Map中。
3、本地内存缓存;就是把数据缓存在本机的内存中。
4、分布式缓存机制;可能存在跨进程,跨域访问缓存数据
对于分布式的缓存,此时因为缓存的数据是放在缓存服务器中的,或者说,此时应用程序需要跨进程的去访问分布式缓存服务器。
扩展资料
当我们在应用中使用跨进程的缓存机制,例如分布式缓存memcached或者微软的AppFabric,此时数据被缓存在应用程序之外的进程中。
每次,当我们要把一些数据缓存起来的时候,缓存的API就会把数据首先序列化为字节的形式,然后把这些字节发送给缓存服务器去保存。
同理,当我们在应用中要再次使用缓存的数据的时候,缓存服务器就会将缓存的字节发送给应用程序,而缓存的客户端类库接受到这些字节之后就要进行反序列化的操作了,将之转换为我们需要的数据对象。
缓存是什么意思?
缓存就是数据交换的缓冲区(称作Cache),是存贮数据(使用频繁的数据)的临时地方。当用户查询数据,首先在缓存中寻找,如果找到了则直接执行。如果找不到,则去数据库中查找。
缓存的本质就是用空间换时间,牺牲数据的实时性,以服务器内存中的数据暂时代替从数据库读取最新的数据,减少数据库IO,减轻服务器压力,减少网络延迟,加快页面打开速度。
工作原理
缓存的工作原理是当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理。
没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
Web Api及MVC性能提升的几个小技巧
一、缓存为了避免每次请求都去访问后台的资源,我们一般会考虑将一些更新不是很频繁的,可以重用的数据,通过一定的方式临时地保存起来,后续的请求根据情况可以直接访问这些保存起来的数据,这种机制就是所谓的缓存机制。
缓存分为页面输出缓存,内存数据缓存和缓存依赖等。
从设计原则来说,易变性、敏感性的信息不适合进行缓存,同时缓存的内容也是易丢失的,在代码中不能完全依赖于缓存的数据,需要保证在缓存的数据丢失后也能进行正确的处理。
1、页面输出缓存通过对输出的页面进行缓存,每次新的用户请求调用相同的 Action 时,相同的内容不需要重新创建一次而直接输出。
页面输出缓存的使用非常简单,在 Action 上使用 [OutputCache] 特性标记即可生效。
页面输出缓存可控制缓存的内容所存储的位置,例如是在服务器端存储缓存的页面内容还是在客户端存储缓存的页面内容;也可使用 Duration 参数控制缓存的失效绝对时间和间隔时间,甚至能使用 VaryByParam 参数对不同的请求参数分别进行缓存。
页面输出缓存非常适合于内容比较固定的前端页面的缓存。
2、内存数据缓存通常情况下,数据是保存在数据库、磁盘文件等存储介质中的,而应用程序访问这些资源是一项很费时的操作。
如果先将这些资源中的数据缓存到内存缓存区中,当应用程序需要这些数据时,直接从缓存区中提取,就可以减少系统开销,显著提高可使用的用户并发数等。
内存数据缓存需考虑缓存的内容更改失效后如何清空其他已经被缓存的相关联的数据问题。
3、EFCache众所周知,NHiberate 提供了二级缓存功能。
现在,如果你使用的是 Entity Framework 6 或更高版本的 Entity Framework ,你也可考虑使用 EFCache 组件来为 Entity Framework 提供二级缓存支持,其实质上也是属于内存数据缓存。
EFCache 的特点是使用上非常方便,仅需定义如下的代码无需其他复杂的额外的配置即可实现二级缓存。
如需定义特定的缓存策略,如缓存的过期时间,控制数据缓存的范围,也仅需继承 CachingPolicy 类并 override 其部分方法即可。
你甚至可以通过实现 ICache 接口来实现自定义的缓存模型以替换默认的 InMemoryCache 。
二、Stream压缩对响应流进行压缩,其作用是减少网络开销,提高系统的响应速度。
目前的浏览器通常都支持 gzip 和 deflate 压缩解压功能,因此你通常无效考虑浏览器的兼容性问题。
启用 gzip 和 deflate ,既可通过 IIS 配置实现,在 MVC 中也可通过编写自定义的 ActionFilter 实现。
在压缩之前和压缩之后 Stream 的大小差异通常都是惊人的,其压缩率通常都在5-10倍以上。
三、js和css文件的压缩和打包1、js 和 css 文件的压缩其实质就是生成较小的文件,减小下载这些文件的网络开销,提供系统的响应速度。
压缩 js 和 css 文件还有个好处是通常还可以起到代码混淆的作用。
在 YbSoftwareFactory 的 MVC 解决方案中,使用的是 Microsoft Ajax Minifier 组件,可在代码编译的过程中自动对所配置的 js 和 css 进行压缩,基本上文件的大小都可减少一半以上2、js、css文件的打包其目的是进行 js 文件和 css 文件的合并,当前主流浏览器的并发连接数默认情况下通常都是 6 个,如果前端页面同时请求的服务器资源(如 img 文件、js 文件、css 文件以及各类 url 请求等)超过6个,通常就需要进行排队下载。
进行 js 文件、css 文件的打包合并,通常可以在一次请求中就完成未打包之前需多次请求才能完成的工作,通过减少前端浏览器的连接请求,在某种意义上也是可提高系统的响应速度的。