我试图开发一个cms系统,它将使用标记来显示类似的内容。例如,在新闻部分下面将有文章,博客,新闻和论坛的问题,共享相同的标签。每个列表中的项目不超过5项。
我正在考虑两个选项来显示这个相关的内容,我想知道是否比我更有经验的开发人员会推荐一个而不是另一个?
速度是主要目标,因为我们有同样可维护的方法来执行这两个选项。
选项1-输出缓存RenderAction结果
对于每个“相似的内容”部分,在相应的控制器上呈现一个子操作并缓存输出。这感觉更符合MVC的精神,并且对DB调用很有帮助。但是对于5个“相似的内容”列表,对于每个页面请求,这将等于6个完整的MVC周期。
我读过RenderAction can still be expensive,尽管it has improved in the last couple of years。
选项2-为每个提供DB查询的RenderPartials
或者,对于每个“相似的内容”部分,我们可以查询db并使用RenderPartial显示输出。虽然这需要为每个部分(5个或更少的项)提供一个小的DB查询,但我想知道这与不调用RenderAction所节省的性能相比如何。
我经常读how much faster RenderPartial is compared to RenderAction。
发布于 2014-05-08 20:06:01
本质上,您的选择可以归结为哪个更快:已经缓存结果的RenderAction还是5DB查询?
当您这样看待它时,您实际上是在谈论一个没有网络延迟的解决方案和一个具有网络延迟的解决方案(将查询发送到数据库并接收响应)。任何消除网络延迟的解决方案事实上都比具有网络延迟的替代方案要快。
此外,请记住,纯粹主义者喜欢谈论一件或另一件事与其他方式相比是如何“缓慢”的。是的,子操作总是比部分动作慢,因为子操作经过整个路由基础结构,然后最终到达Razor模板引擎,而部分操作则直接进入Razor模板引擎。但是,我们讨论的是运行在内存中的高度优化的编译代码。“较慢”是以毫秒甚至纳秒为单位的。当然,随着时间的推移,这些都会增加,如果你在一个视图中做了一些疯狂的事情,比如渲染50个子动作,你可能会看到一些明显的性能损失,但在99.9999%的情况下,这通常都不是值得担心的问题。
只需以对应用程序最有意义的方式来设计您的应用程序,不要在这里或那里担心一毫秒。
https://stackoverflow.com/questions/23550735
复制相似问题