当前位置: 移动技术网 > IT编程>开发语言>.net > 预热ASP.NET MVC 的View

预热ASP.NET MVC 的View

2018年12月24日  | 移动技术网IT编程  | 我要评论

罗永浩 演讲,unihub,刀剑神域2 动漫

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 环境来避开此问题。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网