【问题标题】:ASP.NET MVC - Slow initial loadASP.NET MVC - 初始加载缓慢
【发布时间】:2014-02-04 16:16:57
【问题描述】:

我最近创建了一个 asp.net mvc web 应用程序并在线发布。

第一次加载网站时,您应该会发现它需要大约 10 到 15 秒才能真正显示出来,但是在单击一次后,它会以我预期的第二次加载速度。我只是想知道是否有人知道为什么该网站需要这么长时间?

【问题讨论】:

  • 可能有几个原因。主要的 DNS 服务器没有域的 IP 地址。此外,目前这似乎不是 C#/asp.net 问题。
  • 刚刚发现另一件事,您的主页上有 2 张非常大的图片。为此,您可能需要调整它们的大小。
  • 你指的是什么大图?您是指页面左侧滑块中的那些吗?谢谢
  • 是的,house4.jpg 和 office.jpg。另外,据我所知,滑块需要很长时间才能加载。
  • 我有这个问题,我注意到托管在 azure web 应用程序上时它特别糟糕?我一直可用。这应该将应用程序保留在内存中。

标签: c# asp.net asp.net-mvc web-applications


【解决方案1】:

通常,随着应用程序域的启动,应用程序总是需要一些额外的时间来加载。

从编写不佳的代码(IE:Application_Start)到您可能正在使用的某些库(例如 ORM),可能会加剧这种情况。你加载了多少个模块?

对于初学者,请检查您的 web.config 以查找臭名昭著的 <compilation debug="true">。这可能会对生产设置产生重大的性能影响。设置为“假”!

建议按照“改善应用程序启动时间”的方式在谷歌上搜索一些内容,并寻找可能与您的特定应用程序相关的内容。

更新您的第一条评论:

如果您看到应用程序在 30 分钟后再次启动(挂起几秒钟),这可能与 IIS 中的应用程序池回收设置有关。

进入 IIS 管理器(假定为 v7+):

  1. 应用程序池
  2. 右键单击正在用于您的应用程序的池
  3. 选择“回收”,将出现一个标有“回收”的窗口 条件”
  4. 检查这些设置,因为它们将决定何时 自动杀死你的应用程序池并让它重新启动。

就一般性能而言,您可能想尝试一下:

  1. 添加一些调试语句,在你的 Application_Start() 方法或任何其他适用的位置尝试 赶上耗时最长的事情。
  2. 创建一个完全干净的演示项目并进行部署。看看有没有 遭受同样的问题。如果它不尝试引入更多 以及更多真实代码,直到您检测到速度变慢。

如果你真的被难住了,#2 可能是你最好的选择,尽管它可能是最慢的选择。

【讨论】:

  • 感谢您的意见。我现在已将编译调试设置为 false,但这似乎并没有解决它。我没有使用 ORM,该网站只是访问 xml 提要并显示其中的原始数据。我认为我也没有使用很多(如果有的话)模块。似乎当我第一次加载网站时,需要 10 多秒,但如果我尝试在几次后直接加载它,则每次只需 2 秒多一点,这是正常的。但是,如果我离开它 30 分钟然后再回来,它又需要 10 多秒。不太确定是什么原因造成的。
  • @JamieMclaaughlan 根据您的上述评论对我的帖子进行了一些补充。希望对您有所帮助。
  • 这听起来像是默认的应用程序池“空闲超时”设置,在 20 分钟后将关闭您的应用程序池并导致它在您第一次返回时再次加载(这需要 15 秒) .
  • @VFein 我认为这个评论是多余的。我原来的帖子详细介绍了应用程序池回收以及如何检查/更改这些设置。
  • 所以,我必须接受这样一个事实,即构建后的每个第一个请求都需要 15 秒才能加载(至少,没有数据库调用等)。也许有一天会像 Android Studio 2.0 那样提供 Instant Run 功能。
【解决方案2】:

我也有同样的问题,第一次加载asp.net mvc站点很慢,最后我找到了加载站点的最佳方式,第一次加载速度非常快。

我的解决方案适用于 windows server 2008 r2 和 IIS 7.5,但在上层 windows 服务器和上层 iis 版本中也可以工作,只是有一些简单的区别。

首先,您必须将应用程序池的 startMode 设置为始终运行,这将防止您的应用程序池在一段时间后休眠。 (就我而言,这一步将我的网站首次加载时间从 45-55 秒更改为大约 8-12 秒)

在第一步中,您的网站没有第一个请求, 为了预加载您的网站,我们需要另一个步骤,即从 here 安装 iis7.5 的应用程序初始化模块

在第二步中,您必须为您的网站设置 preloadEnabled=true,此选项是应用程序初始化添加到网站设置的内容。

有关更多信息以及如何设置这些选项,请参阅此博客文章: http://blogs.iis.net/wadeh/application-initialization-part-2

第二步之后,我的网站加载只需 1-3 秒

【讨论】:

  • 您能否澄清一下“startMode”的含义?我只能在默认设置为 True 的高级设置下看到“自动启动”。
  • 在 windows/system32/inetsrv/config 中找到 applicationHost.config;找到 并找到您的应用程序池并添加此属性: startMode="AlwaysRunning" 例如:
  • 您能否考虑添加您的评论作为对我之前发布的问题的回答,并说明如何从 Web.Config 文件中实现相同的目标(如果可能),我很乐意接受作为答案。 stackoverflow.com/questions/35046455/…
  • 这对我们很有帮助!感谢您提供详细信息。
【解决方案3】:

除了 Jay 所说的,您还应该考虑应用程序池的内存使用情况。对于共享托管环境尤其如此,一旦达到内存限制(而不是基于时间),您的提供商通常会回收应用程序池。这将再次导致您的网站“重新启动”,从而导致初始加载性能问题。

【讨论】:

    【解决方案4】:

    看起来旋转的图像有点大。在我的浏览器中,这部分加载最后一个。页面的所有其余部分都加载得非常快。您可能会考虑调整这些图像的大小。此外,较大的 JavaScript 文件可能会在初始加载过程中导致速度变慢。

    【讨论】:

    • 您好,感谢您的意见。您是指主页左侧滑块中的图像吗?谢谢
    • 是的,左边的图片滑块。我猜它是在所有显示的图像都加载后出现的。一种解决方法是更改​​滑块的 java 脚本以在加载第一张图像后显示和/或减小图像的大小。
    【解决方案5】:

    有几个步骤可以实现:

    1. 客户端缓存
    2. 捆绑和缩小
    3. 服务器端缓存
    4. 使用 IIS 管理器配置自动启动

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 2017-01-18
      • 2012-07-16
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2016-07-18
      • 2016-04-25
      • 1970-01-01
      相关资源
      最近更新 更多