加快ASP.Net网站或者应用程序的速度
我有一个启用Ajax.Net的ASP.Net 2.0网站。网站和数据库的托管以及数据库的架构都超出了我的控制范围。在对硬件的测试中,我确实控制了站点的性能,但是在客户端的硬件上,重新加载或者更改页面时会有明显的延迟。
我想做的是在交付应用程序时使其应用程序尽可能紧凑和快速。一种想法是为网站的所有静态资源设置失效日期,以使它们不会在页面加载时被调用。我所说的资源是指图像,链接的样式表和JavaScript源文件。是否有捷径可寻?
还有什么其他方法可以优化.Net网站?
更新:
我在网站上运行YSlow,受到的打击最大的是加载的JavaScript和样式表的数量(23个JS文件和5个样式表)。 Ajax.net和Asp插入了除主样式表之外的所有样式。为什么那么多?
解决方案
回答
我们可以基于客户端支持的压缩功能来启用压缩功能。看到这篇文章:链接文本
回答
除非更改,否则不应重新发送静态资源。 IIS将发送一个响应代码,告诉浏览器使用缓存的版本。
回答
- .net 3.5 SP1中的脚本合并
- 快速网站的最佳做法
- HTTP压缩(gzip)
- .NET YUI压缩器
我最好的建议是查看YUI内容。他们有一些很棒的文章谈论CSS精灵之类的东西,并且有一些不错的javascript库来帮助减少浏览器发出的请求数量。
回答
默认情况下,关闭viewstate,即使是最简单的页面,也会存在昼夜差异。
回答
我认为我们真的需要能够在生产中运行时从应用程序中获取一些实际的PerfMon数据/遥测,以便能够就最佳化方案做出明智的决定。
作为一个提示,我将确保应用程序被部署为Release版本,并在web.config的" compilation"部分中设置debug =" false"。
回答
如果我们使用Firefox来测试网站,则可能要尝试使用Yahoo!提供的漂亮Firefox扩展。称为YSlow。
它会分析网页,并为高性能网站的每个最佳实践提供从A-F(A为最佳,F为最差)的等级。它将跟踪网站中可以优化以加快速度的元素。
回答
我们似乎首先假设问题出在下载大小上,而实际情况不一定如此。我们应该对ASP.NET网站进行一些试验,以确定代码中是否存在引起不必要延迟的区域。如果事实证明下载大小不是问题,则需要找到方法来缓存结果(查看输出缓存,这是ASP.NET功能)或者优化代码。
在任何情况下,查看性能问题的第一步都是始终先验证假设,然后决定采取的措施。
回答
我们是否尝试过这些技巧?
http://weblogs.asp.net/haroonwaheed/archive/2008/06/30/ASP.NET-Performance-Tips.aspx
回答
几个月前,我写了一篇有关改善ASP.NET页面性能的博客文章。这里有一些快速简便的方法-
- 关闭检视状态
- 关闭事件验证
- 实现HTTP gzip / deflate压缩以减小响应大小(服务器必须发送回客户端的字节数)
- 尝试针对每个请求优化/最小化数据库调用
回答
我们可以开始研究缓存策略。诸如CSS(甚至压缩文件)和图像(甚至优化文件)之类的静态文件只需要在一段时间内由浏览器下载一次即可。
已经提到了针对AJAX的Scirpt合并,但是我没有注意到对ScriptReferenceProfiler MS的引用已在codeplex上发布,以帮助找出要合并的内容。迈克·奥蒙德(Mike Ormond)在这方面有一个很好的起点。
如果我们要对数据库执行大量INSERT操作,则另一个提示是,请再次检查服务器的磁盘缓存是否已打开。举例来说,我有一个数据导入程序在运行期间进行了120万次插入。花了4个小时,不进行缓存就进行更改。花费了16分钟。
回答
我们还可以查看ASP.NET输出缓存,该缓存可以相当精细地应用于页面的不同部分:
http://msdn.microsoft.com/zh-CN/library/xsbfdd8c(VS.71).aspx
回答
一起使用ASP.NET和Ajax(任何Ajax库)时,通常要避免使Page_Load和Page_Init(以及与之对应的方法)麻烦,因为它们将在每个Ajax请求上执行。
这么说的话,我会认真放弃ASP.NET AJAX并使用其他任何东西...
Anthem.NET,AjaxPRO.NET,jQuery或者ASP.NET AJAX以外的任何其他软件...
当然我会自己使用Ra-Ajax,因为那是我的项目。但话又说回来我有偏见...