剃须刀发电机:这是准确的吗?

gan*_*elo 2 asp.net pre-compilation asp.net-mvc-4 razorgenerator asp.net-mvc-5

我最近在我目前的工作地点询问了前任首席开发人员,以了解他为什么选择使用Razor Generator将我们的视图预编译到一个单独的程序集中.

他在下面提出了一些声明,但我似乎无法在网上找到任何Razor Generator配置文件和/或指标来备份声明(快10到100倍),和/或,如果IIS7/ASP.NET做了什么关于预编译与运行时编译的视图及其益处或缺乏的幕后故事.

谁能指出我正确的方向?还是评论?

在我看来(就启动时而言)只需autostart = true为站点设置IIS 就可以平衡使用Razor Generator进行预编译的任何好处.以下是他的发言:

为什么我们使用Razor Generator预编译我们的视图以及为什么将它们放在一个单独的程序集中?

第一个是简单的编译时错误检查.有了这么多观点,它似乎是避免生产错误的好方法.重新编译以查看我承认的视图的更改有点令人沮丧,但它(在我看来)完全值得知道你有更多的错误检查.

第二个是当视图没有在项目中编译时,它们在运行时被编译,然后那些编译的表示必须存储在ram中.有时,如果他们没有被定期访问(大多数视图就是这种情况,因为有这么多),那些存储的编译版本会被放弃并收集垃圾以保存ram.因此,除了gaf.com等网站中最常访问的视图之外,每次访问时都会重新编译.但是如果你把它们放在一个项目中,那么编译后的版本只需要从dll中加载(如果它还没有在内存中)(是的,代码也可以被垃圾收集,但不常用).加载来自dll的速度快10到100倍(这是来自Razor Generator项目的网站 - 我自己没有验证它,但这听起来很合理).

Dav*_*ich 7

我们在同样的问题上挣扎.我们开始编译视图,以便捕获在集成测试和用户体验测试期间会出现的明显问题.更糟糕的是,不知何故悄悄进入生产的错误.

但是,我们的构建时间变得无法容忍.我们的开发人员建立了无数次,这成为我们今天的主要部分.我们在午餐后开玩笑说测试,所以我们外出时可以完成构建.

我们最终在UX测试之前搬到了建筑.


现在我们正在进行预编译.我们团队中只有一个人现在采用它,显然预编译明显优于构建(增量与总数).设置基本上是一个nuget fetch.

这些文章应该是一个好的开始

http://stacktoheap.com/blog/2013/01/19/precompiling-razor-views-in-asp-dot-net-mvc-3/

http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html


预编译为我们提供了部署现成二进制文件的所有优势.我们的用户在第一次查看视图时不会遇到短暂的延迟.

据我所知,IIS autostart = true将启动您的应用程序池,但不会强制编译您的视图.因此,您将获得第一个用户使用每个View的初始启动命中.