在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
#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项目资源命名上会以/作为分隔符 |
请发表评论