asp.net-mvc – 如何在每个页面的第一次打击时提高ASP.Net MVC3
如果我更改剃刀视图,重新编译或等待15-20分钟,页面可能需要3-20秒才能在第一次点击时渲染.我知道视图需要在更改后重新编译.我也明白应用程序将在一段时间不活动后卸载,但我认为这将是第一次打击时的一次性惩罚.但对我来说,它似乎适用于每一页.
以我的主页为例.根据YSlow,它是一个“B”,有15个组件,重250K(包括MiniProfiler的额外jquery参考).从MiniProfiler我看到第一行大约500ms(http:// localhost:80).我假设这包括视图编译.但后来我看到了Find:Index的1200ms.没有SQL调用.首次命中的总加载时间约为3000ms,后续命中约为40ms. 在具有几个部分视图的另一个页面上,父视图需要2400ms到“查找”,其中一个部分视图需要1000ms才能找到.父视图也需要3200ms才能“渲染”.最大的影响是第一行(http:// localhost:80 / User / Dashboard),这是一个惊人的7000毫秒.此页面只有3个查询,总查询时间为100毫秒.总加载时间超过15000ms.随后的命中大约是250毫秒. 我们的设置是ASP.Net MVC 3,Ninject,EF4.2,Razor视图引擎,ELMAH,NLog,Html5Boilerplate和MvcMiniProfiler.我创建了一个重复项目并删除了Ninject,NLog和MvcMiniProfiler.性能只是略快一点.我们在一个区域内有大约15个控制器和大约40个视图. 这是正常的表现吗?当我们部署到Azure时,它(自然地)比在本地测试更糟糕.有改进的建议吗? 编辑: 解决方法
您经常部署此应用程序吗?如果是这样,那么我可以看出为什么第一次打击表现可能会受到关注.
我们经常部署,并创建了一个单独的项目来“预热”我们的部署.它是一个单元测试项目,使用WebDriver在部署后点击我们应用中的每个未编译视图. 基本上,您只需使用WebDriver API启动浏览器,然后使用Navigate()到需要编译的每个URL.运行一次,部署温暖. 此外,在Azure中,您可以关闭空闲超时,以便您的应用永远不会被闲置.我们使用这个脚本: %windir%system32inetsrvappcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 …并在Azure部署期间运行它,如下所示: <Task commandLine="startupdisableTimeout.cmd" executionContext="elevated" taskType="simple" /> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – 一旦SetCacheability方法设置了,就可以删
- 在asp.net中引用jquery的最佳方法是什么?
- asp.net – 使用basicHttpBinding时无法识别的属性’transa
- asp.net-core – .NET核心托管包
- asp.net – 绝对定位是最佳实践还是我应该避免它?
- asp.net-mvc – JQGrid和MVC完整工作示例
- asp.net-mvc – 在AccountController之外访问UserManager
- asp.net-mvc – mvc4数据注释比较两个日期
- asp.net – 如何阻止不必要的回发
- asp.net-web-api – 间歇性“无法加载类型”System.Net.Htt
- asp.net – 在.NET中发生部分回发时,用户控件中的
- asp.net – MVC2 – 逻辑应该去的基本问题
- asp.net-mvc – Unity PerRequestLifetimeManage
- App_GlobalResources(ASP.NET)中的子文件夹
- asp.net中的SqlDependency
- asp.net-mvc-4 – MVC4自定义OnActionExecuting
- asp.net-mvc – 绑定客户端模板中的两个字段,用于
- asp.net 中用easyui中的treegird的简单使用
- asp.net-mvc – MVC 5脚手架不为基本EF派生数据发
- asp.net – 通用成员资格提供程序(System.Web.Pr