繁体   English   中英

如何提高Sitecore中选择子代的速度?

[英]How to improve selection descendant speed in sitecore?

我需要在某些特定项目下选择按模板ID过滤的所有子项(后代)项目。 我可以通过3种方式做到这一点:

  1. 使用GetDescendants myitem.Axes.GetDescendants().Where(x => x.IsOfTemplate(MyItem.TemplateId)).Select(x => (MyItem)x).ToList();
  2. 使用xPath

      string q = string.Format("{0}//*[@@templateid='{1}']", myItem.Paths.Path, MyItem.TemplateId); var result = myItem.Database.SelectItems(q); 
  3. 使用Sitecore搜索API

我的情况下不能使用#3。 对于我的情况,请跳过它。

Xpath选择器#2应该比#1更快,但是问题在于第一次调用某个路径。

由于某种原因,第一次调用具有特定路径的内容树非常慢。 在第一个呼叫之后,类似的呼叫非​​常快速地工作,使用#1或#2的巫婆风格都没关系。 Sitecore添加一些缓存。

如何提高首次通话的速度?

答案始终是#3-从本质上讲,后代行走将是一个缓慢的操作。 尤其是当您有很多起始项的后代时。

Sitecore Search API使用Lucene或SOLR索引,它们可以非常快速地搜索成千上万的记录。 该名称使它看起来只应用于站点搜索,但实际上,它应用于可能使用Sitecore Query或XPath的大多数操作。

我不确定为什么您没有这个选择。 但是您将很难加快后代树的行走速度。 唯一的选择是重组内容树,因此无需遍历。

尽管有很多方法可以检索项目(如Mark Cassidy建议的那样使用链接数据库,使用Siteocre Search API等),但问题出在缓存中。 如果查询第二次运行足够快,但是第一次运行缓慢,则可能是清空了缓存的一部分,然后重新填充。 这很可能是以下之一:SqlDataProvider-预取数据master | web [data]
master | web [项目路径]
master | web [项目]
master | web [路径]

要对此进行调查,请使用/sitecore/admin/cache.aspx上的admin缓存页面,不仅要特别注意缓存大小,还要特别注意可能受影响的缓存的增量(缓存大小的变化)。 如果增量具有负值,则将刷新您的缓存以为更新的数据腾出空间。 您将需要考虑增加该缓存的大小。

还请记住,应该为正在运行Sitecore实例的特定环境配置缓存,并且例如回收应用程序池将刷新您的缓存。 如果必须从头开始快速运行查询,那么可以考虑将特定项目添加到预取缓存中。 在应用程序启动时将项目添加到预取缓存中会花费启动时间。

还请记住,在查看运行缓慢的代码时,缓存配置应该是最后的选择-它仅处理症状而不是根本原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM