2

我最近询问了我目前工作地点的前首席开发人员,为什么他选择使用Razor 生成器将我们的视图预编译到单独的程序集中。

他在下面提出了一些声明,但我似乎无法在网络上找到任何Razor Generator配置文件和/或指标来支持该声明(快 10-100 倍),和/或,如果IIS7/ASP.NET确实如此关于预编译与运行时编译的视图的幕后以及它们的好处或缺乏。

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

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

为什么我们使用 Razor 生成器来预编译我们的视图以及为什么将它们放在单独的程序集中?

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

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

4

1 回答 1

7

我们在同样的问题上苦苦挣扎。我们开始编译 Views 是为了捕捉在集成测试UX 测试期间会出现在我们身上的明显问题。更糟糕的是不知何故潜入生产的错误。

但是,我们的构建时间变得无法忍受。我们的开发人员构建了无数次,这成为我们一天的主要部分。我们在午餐后开玩笑说要进行测试,这样我们就可以在外出时完成构建。

我们最终在UX-tests之前开始构建。


现在我们正朝着预编译的方向发展。目前我们团队中只有一个人采用了它,并且显然预编译明显优于构建(增量与总)。设置基本上是一个 nuget 提取。

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

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,它将启动您的应用程序池,但不会强制编译您的视图。结果,您将获得第一个用户使用每个视图的初始启动命中。

于 2013-04-19T17:38:32.270 回答