Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sitecore:站点地图生成和性能问题、备选方案_Sitecore_Sitemap_Sitecore6 - Fatal编程技术网

Sitecore:站点地图生成和性能问题、备选方案

Sitecore:站点地图生成和性能问题、备选方案,sitecore,sitemap,sitecore6,Sitecore,Sitemap,Sitecore6,我正在查看Sitecore marketplace中可用的Sitemap模块,它似乎在使用类似于 [Pseudocode and several lines combined] var items = database.Items[Factory.GetSite(siteName).rootpath].Axes.GetDescendants(); 然后按模板id筛选预期项目,并按项目id排除意外项目 我只是想知道。。这不是根吗?它对性能的要求是指数级的?Sitecore的新功能,请提供一些信息

我正在查看Sitecore marketplace中可用的Sitemap模块,它似乎在使用类似于

[Pseudocode and several lines combined]
var items = database.Items[Factory.GetSite(siteName).rootpath].Axes.GetDescendants();
然后按模板id筛选预期项目,并按项目id排除意外项目


我只是想知道。。这不是根吗?它对性能的要求是指数级的?Sitecore的新功能,请提供一些信息。此外,如果我只是想获得所有项目(满足某些条件,例如发布,最重要的是,可能基于主模板或其他东西)。例如,我正在寻找一种方法,如果我实现自己的版本,但没有GUI(例如,通用处理程序),我就不必选择这样的模板当然,绘制出ID会很难看)那么有更好的方法吗?(非常有信心会有一个!)

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

但是,我会做一些更改,并使用
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"));

当然,您需要添加一些额外的空引用检查,但您知道了。

根据项目的数量,可能会对性能造成影响,但如果缓存站点地图,则只会造成一次性影响。如果你索引你的项目,那么你可以从Lucene自己创建。谢谢你对Lucene的建议。我需要检查它是否被编入索引。如果不是的话,那可能就是我们首先需要做的。该死的酷,我确实也在考虑这个复选框解决方案!很酷,谢谢,我今天要试试。