罗永浩 演讲,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 可以随意看要新增在哪个controller 底下,不一定要是与预热的view 有相关的controller,为了看出有无预热的差异,在这边我新增一个warmupcontroller 放置预热的程式码,接下来我们就去找出我们web 应用程式底下所有的view,然后透过viewengine 把它们逐一render 一次,就完成预热的程序。
view 的编译并不是一个档案编译成一个组件,而是一个目录编译成一个组件,举例来说,~/views/home/ 底下有三个.cshtml 档案:contact.cshtml、index.cshtml、about.cshtml,它们三个会被编译在同一个组件。
有关于应用程式初始化,就参考微软官方的说明,我们在这边就直接动手在web.config加入以下设定,让web应用程式在启动时对/warmup发出请求。
我们来比较一下有无预热的结果,原先在web 应用程式完成启动后,首页下载完成的时间为1.94s,在预热之后减少到78ms,可以看出view 的初次渲染真的很花时间。
但是这个会拉长web 应用程式启动的时间,不过我们可以透过升级azure app service 方案至少到s 等级,然后部署我们的web 应用程式到预备位置,预热完成之后再自动交换到production 环境来避开此问题。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论