ZKEACMS Core预编译视图提高性能
ZKEASOFT March 16, 2018
动态编译
ASP.NET中cshtml
视图页面是动态编译的,仅当访问到的页面使用到该视图的时候才会进行编译,这会导致第一次访问变慢。不过好处就是更新页面的时候,可以不用编译直接上传视图文件即可。
预编译
在ASP.NET Core 2.0开始,在发布的时候预编译视图已经是默认选项。如果要修改这个默认配置,需要修改项目文件*.csproj,加上MvcRazorCompileOnPublish
的配置选项:
<PropertyGroup>
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
</PropertyGroup>
ZKEACMS默认已将该设置配置为true,即为预编译模式。要注意的是,如果要修改该选项,要将解决方案中的所有项目都做修改。
预编译的好处就是有更好的性能,较低的内存占用。就是更新视图的时候麻烦一些,要先发布DLL,再替换。
有关ASP.NET Core预编译的更多内容,请查看微软的官方文档:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation
混合模式
ZKEACMS支持动态编译和预编译的混合模式。在预编译以后,如果添加新的视图文件也会动态被编译。
开启方式
- 通过发布一次基础版来得到refs文件,并手动将发布根目录的refs文件夹整个复制过来使用
- 注意加上对应的 /Views/_ViewImports.cshtml,/Views/_ViewStart.cshtml
如果缺少该refs文件夹,在动态编译的时候会因为编译环境的不完整而报错。
如果不想手动复制refs文件夹,也可在ZKEACMS.WebHost.csproj
中添加配置项
<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
这样在发布的时候依然会带上refs的相关文件,详细请查看:https://github.com/aspnet/MvcPrecompilation