如果应用程序正在按URL进行缓存,那么使用应用程序缓存是否有任何优势?还是应该只使用输出缓存?
请注意,由于我正在使用自定义HTTP处理程序,所有这些都是在C#中完成的,而不是在页面指令中完成的。
假设您不使用授权和没有动态内容,那么您下降到的层级越低,结果就会越好。最低层是内核模式缓存。http://learn.iis.net/page.aspx/154/walkthrough-iis-70-output-caching/
用办公室来比喻。技术上请求链是:老板、秘书、答录机和电话线提供商。
想象一个没有秘书的办公室。老板必须回答每个电话。这就是没有缓存的情况。
应用程序缓存就像是一位秘书。它处理电话,让老板(应用程序)不必一遍又一遍地回答同样的问题。秘书坐在老板和外部世界之间。她可以处理大多数简单的情况。当工作中没有秘书时(低内存),老板就会很烦。
但是秘书是人类,所以她晚上会回家(ASPNET应用程序在某个时间段进行回收,应用程序缓存暴露出来,因此在ASPNET方面,秘书与老板共享同一个应用域)。
这里介绍一个自动应答机。它不仅可以帮助秘书避免反复回答愚蠢的问题,还可以在没有秘书时为老板过滤电话。它只是一台机器,当秘书和老板都无法接听电话时,客户会听到一个美妙的预录音或音乐(缓存项)。
IIS 缓存内核模式就像你的 asnet“办公室”中的自动应答机。与秘书相比,自动应答机要便宜得多。它只是一个带有磁带的微控制器,甚至不需要喝咖啡,只需播放磁带或类似物品即可。
虽然它运行在同一台计算机上,但它的性能要好得多,因为它只是简单地使用自己的低级系统资源管理以最大速度提供内容。
也就是说,如果您的内容在性能方面是半动态的,那么内核模式是首选的缓存方式。
首先,我要声明的是通常的警告是它取决于具体情况。例如可用的Web服务器内存、负载、页面大小、数据大小等因素。
话虽如此,如果URL数量不是很多,而且它们不必非常新鲜,那么输出缓存将占据优势。特别是如果您要公开使用它,即鼓励在ISP和浏览器级别上进行缓存。从而节省服务器负载并缩短返回用户或使用相同ISP或代理的用户的行程。