Sitecore:站点地图生成和性能问题,替代方案

时间:2013-06-14 00:22:36

标签: sitecore sitemap sitecore6

我正在查看Sitecore市场中可用的Sitemap模块,看起来它正在使用

中的某些内容
[Pseudocode and several lines combined]
var items = database.Items[Factory.GetSite(siteName).rootpath].Axes.GetDescendants();

然后按模板ID过滤预期的项目,并按项目ID排除意外的项目。

我只是想知道..不是这个根。后代的东西会对性能产生指数性的影响吗? Sitecore的新手,请稍微阐明一下。此外,如果我只是wana得到所有项目(满足某些条件,如发布和最重要的,可能基于主模板或东西......我正在寻找一种方式,我不必选择这样的模板,如果我实现了我自己的版本,没有GUI(例如通用处理程序),然后当然映射ID会非常难看)那么有更好的方法吗? (非常有信心有一个!)

1 个答案:

答案 0 :(得分:2)

Item.Axes.GetDescendants()确实可能是一个潜在的性能损失,但是,Sitecore使用一个所谓的Item缓存,它缓存从数据库中读取的项目。因此,第一次点击可能需要一些时间,但第二次点击可以读取项目缓存中的项目,您也可以缓存您的Sublayout或渲染。

但是,我会进行一些更改并使用StartPath而不是RootPath仅包含主页下面的项目,因为StartPath是您的主页,RootPath是父项。 我还会将复选框字段“IncludeInSitemap”添加到内容项的基本模板,并使用LINQ过滤此选中字段上的项目。

var items = Sitecore.Context.Database.GetItem(Sitecore.Context.Site.StartItem)
 .Axes.GetDescendants()
 .Where(item => item.Fields["IncludeInSitemap"].Value.Equals("1"));

当然,你需要添加一些额外的空引用检查,但你明白了。