• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

OF.SmartMVC: 使用 Razor Engine 来提供程序模板的功能,性能较 MVC 提供的 Razor Eng ...

原作者: [db:作者] 来自: 网络 收藏 邀请

#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项目资源命名上会以/作为分隔符


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
UnPHP: 轻量级的PHP框架,已迁移至:发布时间:2022-02-13
下一篇:
OneFox: A Simple PHP Framework发布时间:2022-02-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap