# OF.SmartMVC **Repository Path**: fastdev/OF.SmartMVC ## Basic Information - **Project Name**: OF.SmartMVC - **Description**: 使用 Razor Engine 来提供程序模板的功能,性能较 MVC 提供的 Razor Engine 有较多提升。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 15 - **Forks**: 4 - **Created**: 2016-08-13 - **Last Updated**: 2024-04-29 ## Categories & Tags **Categories**: webframework **Tags**: None ## README #OF.SmartMVC **序言** 之前网上找了一个不错的开源项目,基于MVC实现,结果运行后发现比想象中的慢很多。跟踪了一下代码发现瓶颈居然不是读取数据库环节,多少有点出乎意料。几经折腾后发现耗时最多的过程竟然是在 MVC 框架里面,项目中使用了太多的 Html.partial、Html.Action、以及 RenderPartial 等方法,而这些方法在 MVC 框架中的实现都有些复杂,所以性能上就感觉很慢。 由于MVC也是基于Razor语法实现的,所以第一时间想到的是找一个性能更好的RazorEngine试试。后面在网上找了一个 RazorEngine的实现,发现实现相同的功能其性能明显比 MVC 框架高不少。 **实现** 另外这个框架本身也很强大,提供了直接编译字符串、编译模板等多种方法,只是这种方式编译后的dll保存在临时文件下的,每次都会生成一个。考虑到实际项目的需要,我在此框架基础上做了一些封装和改进: 1、相关 cshtml 模板写在单独的一个类库项目中,文件属性设置为“嵌入的资源”。另外我重写了其关键的类,编译的过程会将文件生成到指定的目录(文件名自定义)。 2、需要调用模板的时候,只需要先加载上一步生成的dll库,然后调用公共方法传入 cshtml 资源名和参数即可。使用此方法对比测试了一下这种方式和原来MVC的性能,发现在Render的速度有了非常大的提升。另外,使用这种方式也可以减少第一次网站启动过程中编译View的耗时。 另外,由于时间原因mvc 中的一些指令如 Section. Layout 目前并没有实现,提供了另外的指令 CallFunc 来实现,只需要调用模板的时候传入调用请求中指定子 Func 的信息即可。 **项目说明** 此项目分为3个子项目: 1、OF.SmartMVC.Core 类库 2、OF.SmartMVC.TestView 用于测试的模板文件库 3、OF.SmartMVC.Test 用于测试的程序(需要注意的是,本项目中使用Console应用进行的说明,所以资源文件的命名为 “...目录.资源名”(以 . 做分隔符).方式,如果是 MVC项目资源命名上会以/作为分隔符