【问题标题】:Speeding up an ASP.Net Web Site or Application加速 ASP.Net 网站或应用程序
【发布时间】:2010-09-05 21:44:18
【问题描述】:

我有一个支持 Ajax.Net 的 ASP.Net 2.0 网站。网站和数据库的托管和数据库的架构一样不受我控制。在硬件测试中,我确实控制了网站的性能,但是在客户端的硬件上,重新加载或更改页面时会出现明显的延迟。

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

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

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

【问题讨论】:

    标签: asp.net ajax optimization performance


    【解决方案1】:

    如果您使用 Firefox 来测试您的网站,您可能想尝试一下 Yahoo! 提供的漂亮的 Firefox 扩展程序。叫YSlow

    它会分析您的网页,并为高性能网站的每个最佳做法提供 A-F 等级(A 表示最佳,F 表示最差)。它将帮助您跟踪您可以优化以提高速度的网站元素。

    更新

    现在YSlow 扩展程序兼容所有现代浏览器,如 Firefox、Chrome、Opera、Safari 等,阅读更多here

    【讨论】:

      【解决方案2】:

      一起使用 ASP.NET 和 Ajax(任何 Ajax 库)时,一般的事情是避免把您的 Page_Load 和 Page_Init(以及它们的方法对应物)的事情搞得一团糟,因为它们将在每个 Ajax 请求上执行。

      既然这么说,我会认真放弃 ASP.NET AJAX 并使用 anything 其他...

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          已经提到了用于 AJAX 的脚本组合,但我没有注意到对 ScriptReferenceProfiler MS 已在 codeplex 上发布以帮助确定要组合的内容的引用。迈克·奥蒙德has a good start point on this.

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

          【讨论】:

            【解决方案5】:

            几个月前,我写了一封blog post 来提高 ASP.NET 页面的性能。这里有一些快速简单的方法 -

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

            【讨论】:

              【解决方案6】:
              【解决方案7】:

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

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

              【讨论】:

                【解决方案8】:

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

                作为一次性提示,我会确保您的应用部署为 Release 版本,并在您的“compilation”部分中设置 debug="false" web.config。

                【讨论】:

                  【解决方案9】:
                  1. Script Combining in .net 3.5 SP1
                  2. Best Practices for fast websites
                  3. HTTP 压缩 (gzip)
                  4. 压缩 JS/CSS(不同于 http 压缩,缩小 javascript)
                    1. YUI Compressor
                    2. .NET YUI Compressor

                  我最好的建议是查看YUI content。他们有一些很棒的文章谈论诸如CSS sprites 之类的东西,还有一些浏览器正在制作的nice javascript libraries to help reduce the number of requests

                  【讨论】:

                    【解决方案10】:

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

                    【讨论】:

                      【解决方案11】:

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

                      【讨论】:

                        【解决方案12】:

                        您可以根据您的客户支持打开压缩。见这篇文章:link text

                        【讨论】:

                          猜你喜欢
                          • 2010-09-10
                          • 2010-09-25
                          • 1970-01-01
                          • 2011-04-03
                          • 1970-01-01
                          • 2013-06-20
                          • 2015-11-01
                          • 2010-11-11
                          • 2010-11-02
                          相关资源
                          最近更新 更多