安利一个MVC的好东西,RazorGenerator.MsBuild,可以自动编译cshtml文件
在传统的asp.net webForm 开发里,在发布时,如果选择预编译,就会自动将所有的aspx 文件编译,在发布后的目录里,就看不到aspx的源代码了,同时因为是预编译的,所以每个页面打开速度都挺快的。
而在MVC里,默认就不是这样了。
MVC在发布以后,我们熟知的这些cshtml文件会随着发布,一起发布到发布后的目录里。你源代码过去咱也不说什么了,但是,却没有把这些cshtml文件预编译为二进制文件。就会导致当我们每打开一个新页面时,第一次总会慢一些(这个是第一次是指,整个网站的这个页面被用户的第一次访问,而不是仅仅针对你一个人来说哦)。
举个例子来说,比如我们访问 /Activity/Page/1
对应的controller 是 Activity,action是Page
那么,当我们第一次访问这个 action时,.NET 会把 这个 Activity controller 对应的view 目录里的所有view(cshtml文件 ,实际目录其实就是 /Views/Activity/*.cshtml 这些文件)编译成一个dll文件(其实是先转成.cshtml.cs,然后再编译的),然后再加载这个dll进行。所以,第一次,总会慢一些,再快的服务器也得稍微等那么一下下,即使你负载均衡又怎么样?
当第二次再访问这个action时,.NET 会自动判断是否已编译过,如果已编译就直接调用执行,否则再重新编译一次(文件如果发生了变更会重新再编译一次)。
这时候,我们已经访问过 /Activity/List/Page/1,在页面里我们找到一个“活动”点进去,跳转到 /Activity/Detail/2。这个时候 会不会再要编译一次呢?不会了,因为在访问 /Activity/Page/1 的时候,已经把 "/Views/Activity/*.cshtml"这些文件都编译过了。.NET的这些cshtml编译策略是把一个目录下的所有cshtml文件都编译一遍,合并输出到一个dll文件里。
这块说明,请参考http://www.cnblogs.com/artech/archive/2012/09/04/razor-view-engine-01.html
我解释的不够好。
---------------------------------------------------------------------
那么,我们如何在发布的时候,就将项目工程里的所有cshtml都一次性编译好呢。
使用 "RazorGenerator.MsBuild",可以直接通过Nuget安装。(链接附在最后)
安装好以后,在编译之前,它会将项目工程里声明引入的cshtml文件都转成 {viewPageName}.cshtml.cs 文件,默认是输出到 "obj/CodeGens"目录下面;然后项目编译的时候就会把这些*.cshtml.cs编译,并合并到主程序集的dll文件 里,比如你的项目名是 RazorBuildDemo,那么生成的dll 就是RazorBuildDemo.dll, 所有的*.cshtml.cs 编译也都会合并到RazorBuildDemo.dll 里。
网站发布到生产环境以后,除了网站第一次打开稍微慢一些(网站初始化过程),其他时候打开各个页面,是不是要比之前的快一些了?
当然,这个东西的好处不仅仅是 预编译,还可以自动在发布时检查页面里的错误。因为是预编译页面,所以在发布时,每个页面都会进行处理,这样就可以自动检查页面里的错误代码(因为必须保证编译通过才行),省得有些地方改了,而又没去测,导致之前可能出现的低级错误。
这家其实还有几个这方面的工具,大家可以去看看。
之前一直搜这方面的工具,可惜一直都没有好的发现,有几个都是RazorGenerator.MVC 这个工具,虽然是同一家出的,但是这个要给每个页面都配置一下,好像新版的不用每个页面都设置这么麻烦,没去细研究,但是我想总没有 RazorGenerator.MsBuild 这个好用吧?我就喜欢这种傻瓜式的,用起来方便。所以我们自己做东西也要奔着傻瓜式做,让用户用着简单,可以有复杂的功能,但是上手,一定要简单,不然实在太难受了。我特么的就是一个懒人。
今天发现了这个好东西,不敢独享,我想一定要分享出来,给有需要的人。(我看这个RazorGenerator.MsBuild的安装数还是很多的)。
在百度我专门搜“RazorGenerator.MsBuild”搜的都是几个国外的英文站,国内就搜出来一个,也是博客园的,不过有点早,说明也比较浅一些。难道做ASP.NET MVC 开发的人少?
唉,自己技术圈子小,这些知识知道的还是太少,蛋疼!
所以,推荐大家,以后建MVC项目,最好把这个包添加到项目中。
在此,必须安利一下这个好东西“RazorGenerator.MsBuild”。
asp.net MVC开发,你值得拥有!
https://github.com/RazorGenerator/RazorGenerator
安利一个MVC的好东西,RazorGenerator.MsBuild,可以自动编译cshtml文件的更多相关文章
- ASP.NET MVC中切换模板页(不同目录的cshtml文件)
看来以后建立一个父类控制器还是有必要的... using System;using System.Collections.Generic;using System.Linq;using System. ...
- 创建第一个MVC
创建第一个MVC(asp.net)和默认路由设置 Asp.net的MVC已经出到了4.0,我用的是visual studio2013,接下来努力学下MVC,学之前的话我建议大家先去学下三层(分别是DA ...
- Pro ASP.NET MVC –第二章 第一个MVC程序
学习一个软件开发框架的最有效的方式就是了解并使用它.在本章,你将会创建一个简单基于ASP.NET MVC Framework的数据-实体应用程序.我们会该程序划分成若干小块,每次介绍一个部分,以便你能 ...
- 使用 Netty 实现一个 MVC 框架
NettyMVC 上面介绍 Netty 能做是什么时我们说过,相比于 SpringMVC 等框架,Netty 没提供路由等功能,这也契合和 Netty 的设计思路,它更贴近底层.下面我们在 Netty ...
- 【MVC 4】1.第一个 MVC 应用程序
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> ASP.NET MVC 是微软的一个 Web开发框架,它整合了“模型—视图—控制器(MVC)”架构 ...
- 创建一个MVC解决方案,添加一个控制器后,运行程序报错:”/"未找到服务器
1.创建一个MVC项目,如图
- 老司机教你用原生JDK 撸一个 MVC 框架!!!
其实 Spring MVC 是一个基于请求驱动的 Web 框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器进行处理,具体工作原理见下图. 在这里,就不详细谈相关的原 ...
- 安利一个vps,7美元/年。
黑色星期五.给大家安利一个vps,7美元/年.配置如下:2 个虚拟化 CPU 2 GB (2048 MB) 专属内存 50 GB RAID-10 受保护硬盘存储 3000 GB (3TB) 月流量 1 ...
- 创建第一个MVC应用程序
整个国庆期假,Insus.NET没有出门,在家静心修炼MVC.这意味着Insus.NET将来的日子里会以MVC为学习,开发,应用作为重点,不过现在才开始踏出第一步...... 路慢慢...... 下载 ...
随机推荐
- 关于raid的理解
缘起 公司部署业务的时候,6块盘需要做raid,以前还没有用过所以不知道,临时才去百度看了一下相关知识. 部署 当前可以用软raid与硬raid,软raid系统上建立,占用CPU与IO资源;硬RAID ...
- node.js Websocket消息推送---GoEasy
Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送 速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送 支持websocket ...
- HTML DOM 节点
一切皆节点 在 HTML DOM (文档对象模型)中,节点主要包括(括号中用数字表示节点类型):元素(1).属性(2).文本(3,其中换行符也是一个文本节点).注释(8).文档(9). 其中重要的方法 ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- vs2010配置boost编程环境(照抄并简化)
第一步:下载boost,我下载的方法是从http://www.boost.org/上找最新的下载.名字叫boost_1_50_0.7z. 第二步:在D盘(我C盘空间不大,准备出至少10G的空间吧)创建 ...
- Java学习
第一个java程序: 用记事本创建一个文件名为HelloWorld.java文件,我的目录为D:\My Documents\Java-workspace\Test\HelloWorld.java. 打 ...
- POJ做题笔记:1000,1004,1003
1000 A+B Problem 题目大意:输入两个数a和b,输出他们的和. 代码: #include <stdio.h> int main() { int a, b; while (sc ...
- 怎么样修改PHPStorm中文件修改后标签和文件名的颜色与背景色
自从最近在PHPstrom里引入Git,并且使用MONOKAI_SUBLIME主题之后 ,当文件在PHPstrom中进行编辑,文档内容变化时,左侧项目文件列表中的文件名颜色以及右侧编辑区域标签卡的文件 ...
- linux find命令
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- ie的不同版本测试
ie的11.0.9600.17728版本支持在开发者工具栏中导航中edge按钮支持测试在不同ie版本下的显示情况如ie7,8,9但不支持ie6