预热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 ...
随机推荐
- 【python 3】 字典方法操作汇总
基础数据类型:tuple 1.1 新增 dic["key"] = value 字典中没有key就添加,有key就覆盖 dic ...
- 201806 数据处理 SQL、python、shell 哪家强...速度PK(上篇)
最近在工作中,进行大量的数据处理,使用的是mysql5.7.22,发现当数据量级达到几十万之后,SQL执行速度明显变慢.尤其是当多个表join时,于是就尝试用python pandas进行数据处理,发 ...
- linux下的启停脚本
linux下的根据项目名称,进行进程的启停脚本 #!/bin/bash JAVA=/usr/bin/java APP_HOME=/opt/program/qa/wechat APP_NAME=prog ...
- Asp.net core Identity + identity server + angular 学习笔记 (第二篇)
先纠正一下第一篇的的错误. 在 Login.cshtml 和 Login.cshtml.cs 里, 本来应该是 Register 我却写成 Login . cshtml 修改部分 <form a ...
- selenium 模拟拖动滚动条下拉
senium做自动化测试的过程中,有的页面需要下拉滚动条才能全部加载完成,否则加载不出来就定位不到想要的元素. 参考链接:http://www.cnblogs.com/landhu/p/5761794 ...
- LeetCode--026--删除排序数组中的重复项(java)
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...
- Python+turtle交互式绘图:可以用鼠标拖动的小海龟
下面是我画海龟的过程: (1)打开python: 2.调用turtle库,先设置一些基础设置,与一个画龟的函数 from turtle import Screen,Turtle,mainloop cl ...
- 最简单的RPC框架实现
通过java原生的序列化,Socket通信,动态代理和反射机制,实现一个简单的RPC框架,由三部分组成: 1.服务提供者,运行再服务端,负责提供服务接口定义和服务实现类 2.服务发布者,运行再RPC服 ...
- 修改 input / textarea placeholder 属性的颜色和字体大小
话不多说,直接上代码: input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #666; fon ...
- 关于node
nodejs npm常用命令 npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包. ...