Sitecore 6中的一般架构问题......
假设我们有10,000个项目实施"新闻稿"模板.这些项目存储在Sitecore中/sitecore/content/home/press/*
.在我们的主页上,我们想要显示一些有关最近3个新闻稿的信息.
我们正在寻找构建与SQL相当的东西:
SELECT TOP 3 * FROM PressReleases ORDER BY ReleaseDate
通过Sitecore的查询文档阅读,这听起来像多数这个查询必须在我们C#应用程序进行处理.就像是:
public Item[] GetRecentPressReleases() { string query = "/sitecore/content/home/press/*"; Item[] items = Sitecore.Context.Database.SelectItems(query); Array.Sort(items, new PressReleaseDateComparer()); return items.Take(3).ToArray(); }
这似乎是加载从数据库到内存中万个Sitecore的项目,然后每一个我们的主页被击中是从性能的角度不可接受的时间对它们进行排序.
是否有更有效的方式来表达此查询?或者我应该专注于输出缓存和/或预先计算?
Sitecore Query(或快速查询)不支持排序或TOP构造,因此必须在代码中表达这些内容.
专注于缓存是一件好事.使用标准的Sitecore渲染缓存是一种最简单的方法,我认为你不需要比这种情况更复杂的东西.
有助于理解Sitecore查询可以在SQL或API级别解决,这确实会影响性能,有时可以用于您的优势.
Sitecore 6内置了快速查询,使所有查询都在SQL级别执行,从而大大提高了性能.它目前也不支持排序和TOP,但我们正在考虑如何添加它.