预热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 环境来避开此问题。
预热ASP.NET MVC 的View的更多相关文章
- TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE
TransactionScope事务处理方法介绍及.NET Core中的注意事项 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...
- 返璞归真 asp.net mvc (4) - View/ViewEngine
原文:返璞归真 asp.net mvc (4) - View/ViewEngine [索引页] [源码下载] 返璞归真 asp.net mvc (4) - View/ViewEngine 作者:web ...
- ASP.NET MVC 之View
仅此一文让你明白ASP.NET MVC 之View的显示(仅此一文系列二) 题外话 一周之前写的<仅此一文让你明白ASP.NET MVC原理>受到了广大学习ASP.NET MVC同学的 ...
- ASP.NET MVC 中 View 的设计
1. 前言 感觉有好长时间没有接触View 了,周末闲来无事,翻翻书桌上的书来回顾回顾ASP.NET MVC中View的相关内容. 2. View概述 View 通过应用程序在Action 中返回 ...
- Asp.Net MVC向视图View传值的三种方法
本文将总结Asp.Net MVC向视图View传值的三种常见的方法: ----------------------------------------------------------------- ...
- 仅此一文让你明白ASP.NET MVC 之View的显示(仅此一文系列二)
题外话 一周之前写的<仅此一文让你明白ASP.NET MVC原理>受到了广大学习ASP.NET MVC同学的欢迎,于是下定决心准备把它写成一个系列,以满足更多求知若渴的同学们.蒋金楠老师已 ...
- Asp.net MVC在View里动态捆绑压缩引用的js
前言 Asp.net MVC 4以上版本多了BundleConfig.RegisterBundles方法,可以把要捆绑的脚本或样式进行捆绑压缩,以减少客户端的请求次数从而提高了客户端的访问速度. 问题 ...
- ASP.NET MVC 前端(View)向后端(Controller)中传值
在MVC中,要把前端View中的值传递给后端Controller, 主要有两种方法 1. 利用Request.Form 或者 Request.QueryString public ActionResu ...
- 【ASP.NET MVC】View与Controller之间传递数据
1 概述 本篇文章主要从操作上简要分析Controller<=>View之间相互传值,关于页面之间传值,如果感兴趣,可参考我另外一篇文章ASP.NET 页面之间传值的几种方式 . Co ...
随机推荐
- Vue-admin工作整理(十九):从数字渐变组件谈第三方JS库Count-to的使用
1.组件封装基础 npm install countup@latest 2.组件中使用id值 3.组件中获得dom 如何封装一个组件,在组件中用到需要传入HTML元素ID值的JS库时如何处理,如何获取 ...
- 基于redis的分布式锁(转)
基于redis的分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...
- 遗传算法(GA)
来自:https://blog.csdn.net/u010451580/article/details/51178225 遗传算法是模仿生物进化机制的随机全局搜索和优化方法.借鉴达尔文进化论和孟德尔的 ...
- Python用上锁和解锁 lock lock.acquire lock.release 模拟抢火车票
Python用上锁和解锁 lock lock.acquire lock.release 模拟抢火车票 import jsonimport timefrom multiprocessing impor ...
- Confluence 6 在升级之前
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新. 如果你的 Confluence 安装实例是当前的许可证的话,那么对 Con ...
- 使用 Laragon 在 Windows 中快速搭建 Laravel 本地开发环境 (转)
laravel学院 简介 对于那些使用 Windows 操作系统的同学来说,Homestead 和 LaraDock 虽说支持 Windows 系统,但是对初学者来说,安装配置起来还是有一定复杂度的, ...
- windows 下 修改jmeter ServerAgent端口
from:https://blog.csdn.net/wanglha/article/details/51281462 如果想修改UDP和TCP的端口该如何做呢,可以采用如下的方式: CMD命令进入S ...
- 20165309 《网络对抗技术》 Kali安装
20165309 <网络对抗技术> Kali安装 1. 目的要求 下载 安装 网络 共享 软件源 2. 主要步骤 下载系统镜像文件 进入Kali官网下载,我选择的是64位版本: 虚拟机设置 ...
- 使用 HttpClient 进行文件上传
1.使用 AddPart 方法 public static void upload(String authorization,String baseUrl,String filePath,String ...
- append导致TypeError: 'NoneType' object is not iterable
a=[1,2,3] a.append(4) a Out[4]: [1, 2, 3, 4] a=a.append(5) print(a) None a =[1,2,3] print(a.append(4 ...