加快 ASP.Net 网站或应用程序的速度

Speeding up an ASP.Net Web Site or Application

提问人:Rob Allen 提问时间:8/15/2008 最后编辑:VaibhavRob Allen 更新时间:7/2/2020 访问量:3344

问:

我有一个启用 Ajax.Net ASP.Net 2.0 网站。站点和数据库的托管都超出了我的控制范围,数据库的架构也是如此。在硬件测试中,我确实控制了网站,但运行良好,但是在客户端的硬件上,重新加载或更改页面时会出现明显的延迟。

我想做的是在交付应用程序时使它尽可能紧凑和快速。一个想法是为网站的所有静态资源设置到期日期,这样它们就不会在页面加载时被调用。我所说的资源是指图像、链接的样式表和 JavaScript 源文件。有没有一种简单的方法可以做到这一点?

还有哪些其他方法可以优化 .Net 网站?

更新: 我在网站上运行了 YSlow,我受到打击最严重的领域是加载的 JavaScript 和样式表的数量(23 个 JS 文件和 5 个样式表)。除一个(主样式表)外,其他所有样式表都已由 Ajax.net 和 Asp 插入。为什么这么多?

asp.net AJAX 优化 性能

评论


答:

0赞 Campbell 8/15/2008 #1

您可以根据支持压缩的客户端来打开压缩。请参阅此文章:链接文本

0赞 GateKiller 8/15/2008 #2

除非更改,否则不应重新发送静态资源。IIS 将发送一个响应代码,告知浏览器使用缓存版本。

22赞 Darren Kopp 8/15/2008 #3
  1. .net 3.5 SP1 中的脚本组合
  2. 快速网站的最佳实践
  3. HTTP 压缩 (gzip)
  4. 压缩JS/CSS(不同于http压缩,缩小javascript)
    1. YUI 压缩机
    2. .NET YUI 压缩器

我最好的建议是查看 YUI 内容。他们有一些很棒的文章,讨论 CSS 精灵之类的东西,并且有一些不错的 javascript 库来帮助减少浏览器发出的请求数量

3赞 DevelopingChris 8/15/2008 #4

默认情况下关闭视图状态,即使是最简单的页面,它也会有昼夜的差异。

1赞 Kev 8/15/2008 #5

我认为你真的需要能够在生产环境中运行时从应用中获取一些实际的 PerfMon 数据/遥测数据,以便能够就优化内容做出明智的决定。

作为一次性提示,我会确保您的应用程序部署为发布版本,并在 web.config 的“编译”部分中设置 debug=“false”。

4赞 Pascal 8/15/2008 #6

如果你正在使用Firefox来测试你的网站,你可能想尝试一下雅虎的一个漂亮的Firefox扩展,叫做YSlow

它分析您的网页,并为高性能网站的每个最佳实践提供从 A-F(A 表示最佳,F 表示最差)的等级。它将帮助您跟踪网站的元素,您可以优化这些元素以获得加速。

更新

现在 YSlow 扩展程序与所有现代浏览器兼容,例如 Firefox、Chrome、Opera、Safari 等,请在此处阅读更多内容。

1赞 John Christensen 8/15/2008 #7

您似乎一开始就假设您的问题是下载大小 - 但事实可能并非如此。您应该对 ASP.NET 站点进行一些试验,以确定代码中是否存在导致不当延迟的区域。如果事实证明下载大小不是您的问题,则需要找到缓存结果的方法(查看输出缓存,这是一项 ASP.NET 功能)或优化代码。

无论如何,在考虑性能问题时,第一步始终是首先验证您的假设,然后决定行动方案。

1赞 Jon Sagara 8/15/2008 #8

你试过这些技巧吗?

http://weblogs.asp.net/haroonwaheed/archive/2008/06/30/ASP.NET-Performance-Tips.aspx

2赞 Seibar 8/15/2008 #9

几个月前,我写了一篇关于提高 ASP.NET 页面性能的博客文章。这里有一些快速简便的方法 -

  • 关闭视图状态
  • 关闭事件验证
  • 实现 HTTP gzip/deflate 压缩以减小响应大小(服务器必须发送回客户端的字节数)
  • 尝试优化/最小化每个请求的数据库调用
1赞 Dan Maharry 8/28/2008 #10

您可以开始研究缓存策略。静态文件,如CSS(甚至是压缩的)和图像(甚至是优化的)应该只需要在一段时间内由浏览器下载一次。

已经提到了 AJAX 的 scirpt 组合,但我没有注意到对 codeplex 上发布的 ScriptReferenceProfiler MS 的引用,以帮助弄清楚要组合什么。迈克·奥蒙德(Mike Ormond)在这方面有一个很好的起点

如果您要对数据库执行大量 INSERT,另一个提示是仔细检查服务器的磁盘缓存是否已打开。举个例子,我有一个数据导入器在运行期间执行了 120 万次插入。花了 4 个小时,在没有缓存的情况下进行更改。花了 16 分钟。

0赞 Tim Booker 9/18/2008 #11

您还可以查看 ASP.NET 输出缓存,它可以相当精细地应用于页面的不同部分:

http://msdn.microsoft.com/en-us/library/xsbfdd8c(VS.71).aspx

1赞 Thomas Hansen 11/20/2008 #12

当同时使用 ASP.NET 和 Ajax(任何 Ajax 库)时,一般的事情是避免你的 Page_Load 和 Page_Init(及其方法对应物)的东西,因为它们将在每个 Ajax 请求上执行。

当这么说时,我会认真地放弃 ASP.NET AJAX 并使用其他任何东西......

Anthem.NET、AjaxPRO.NET、jQuery 或除 ASP.NET AJAX 之外的任何其他内容......

当然,我自己会使用 Ra-Ajax,因为这是我的项目。但话又说回来,我有偏见......