asp.net - 对于复杂的导航菜单,我应该使用数据缓存还是输出缓存?

标签 asp.net asp.net-mvc asp.net-mvc-4 caching asp.net-mvc-5

我正在尝试根据不同的标准缓存导航菜单的部分。

例如,新闻和文章需要按持续时间刷新,而登录和个人资料应该按用户缓存。

我正在考虑 2 个选项 - 有没有人愿意告诉我每个选项的优缺点?如果可能,建议采取更好的方法!

选项 1。

只需将所有需要的 html 缓存为数据缓存中的字符串。需要时手动检查用户差异。

我(也许错误地)认为这将是最需要实现的工作,但也是缓存不同部分的最有效方式。

选项 2。

为菜单的每个部分设置一个具有不同子操作的 NavigationController。 (我们可以根据需要在每个子操作上应用不同的 outputCacheProfile。)

但这需要我们为导航菜单的每个部分调用单独的 RenderAction。我很担心这一点,因为对 Phil Haack 的一篇博文发表了评论:

[Render Action] is very similar to making another request since we need to run through routing to make sure we have the appropriate route data and context to call the action method. So each call to RenderAction is going to add up.



完整帖子在这里:http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

最佳答案

我认为人们普遍回避了这个问题,因为这里没有正确的答案。

事实上,您的选择建筑 实现复杂导航将决定最佳 缓存 战略。

我非常喜欢通过 导航带有子操作的部分 View .

我同意你的观点,引用文件是更多的工作。我更喜欢使用按键分组的导航选项的数据库条目,并通过子操作的参数引用。

所以你的导航表可能看起来像这样

grpId    Title        Path
1        Home Page    /
1        About Page   /Home/About
1        Reports Page /Reports
2        Home Page    /
2        Admin Page   /Admin
2        Reports Page /Reports

并且您的子操作将采用 grpId
[OutputCache(Duration = 60000, VaryByParam = "grpId")]
public PartialViewResult NavigationPage(int grpId)

可以拉出所有导航组选项并呈现自定义导航菜单。这种形式的输出缓存是按时间定制的(60000 秒和您的参数)

结论:

我怀疑我没有告诉你什么新鲜事,但只是证实了你已经倾向于的东西。 MVC 框架非常健壮,并提供了很好地处理您想做的事情的工具。使用文件和数据缓存也是一种有效的方法,但它会更令人头疼,并且需要您自己来实现。

请记住: Haacks 的帖子已经超过 4 年了( MVC 2 Beta )。从那时起,框架和输出缓存得到了很好的发展。您现在可以缓存 Partials 而不必担心缓存整个页面。 This recent reference to caching with MVC 4没有直接谈到菲尔早先的担忧,但明显忽略了它们。

关于asp.net - 对于复杂的导航菜单,我应该使用数据缓存还是输出缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166865/

相关文章:

asp.net - IIS 托管的 Web 应用程序中的静态变量

asp.net-mvc - MVC 错误处理要涵盖哪些 HTTP 状态代码

asp.net-mvc - MVC3 检查在 View 中是有效的形式

c# - TextBoxFor 和 PasswordFor 元素由于未知原因显示默认值

asp.net - Html.Action 未创建指向 View 的链接

php - cURL 将数据发布到 asp.net 页面

.net - 为什么我无法将 DLL 添加到 Windows 7 中的 GAC?

html - 用于固定定位 ASP.NET 的 Z-Index

javascript - 使用 MVC 将 Ext.Net 1.6 迁移到 Ext.Net 2.1 破坏了渲染器功能

asp.net-mvc - 如何在 Url.Action 中发送多个参数?