预热ASP.NET MVC 的View
asp.net mvc 的view 预设是load on demand(按需加载),也就是说view 第一次要render 的时候才会去载入跟编译,这个就会造成一个现象,即使web 应用程式已经完成启动,在浏览页面的时候也是会感觉到一点延迟,尤其web 应用程式部署在azure app service 上更为明显,既然这样,那我们就在web 应用程式启动时候,把所有view 载入跟编译,然后render 一次就行了,我们来看看怎么做?
要render 一个页面有时候还会牵扯到一些外部资源(database、file...等),这个就不在讨论范围,我们只单纯关注view 的部分,我会以asp.net mvc 的范本专案来当做我的范例,使用的azure app service 方案是b1。
新增预热用的action
这个预热用的action 可以随意看要新增在哪个controller 底下,不一定要是与预热的view 有相关的controller,为了看出有无预热的差异,在这边我新增一个warmupcontroller 放置预热的程式码,接下来我们就去找出我们web 应用程式底下所有的view,然后透过viewengine 把它们逐一render 一次,就完成预热的程序。
view 的编译并不是一个档案编译成一个组件,而是一个目录编译成一个组件,举例来说,~/views/home/ 底下有三个.cshtml 档案:contact.cshtml、index.cshtml、about.cshtml,它们三个会被编译在同一个组件。
应用程式初始化(application initialization)
有关于应用程式初始化,就参考微软官方的说明,我们在这边就直接动手在web.config加入以下设定,让web应用程式在启动时对/warmup发出请求。
我们来比较一下有无预热的结果,原先在web 应用程式完成启动后,首页下载完成的时间为1.94s,在预热之后减少到78ms,可以看出view 的初次渲染真的很花时间。
但是这个会拉长web 应用程式启动的时间,不过我们可以透过升级azure app service 方案至少到s 等级,然后部署我们的web 应用程式到预备位置,预热完成之后再自动交换到production 环境来避开此问题。
上一篇: python之反射
下一篇: android自定义带箭头对话框
推荐阅读
-
ASP.NET MVC 4 中的JSON数据交互的方法
-
ASP.NET第一次访问慢的解决方法(MVC,Web Api)
-
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(24)-权限管理系统-将权限授权给角色
-
详解ASP.NET MVC的筛选器
-
ASP.NET MVC下的四种验证编程方式[续篇]
-
asp.net mvc 实现文件上传带进度条的思路与方法
-
ASP.NET MVC中URL地址传参的两种写法
-
IIS部署asp.net mvc网站的方法
-
ASP.NET MVC 主要的四种过滤器和三种具体实现类
-
基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理