【问题标题】:How to improve selection descendant speed in sitecore?如何提高sitecore中的选择后代速度?
【发布时间】:2016-08-08 14:50:15
【问题描述】:

我需要在某些特定项目下选择按模板 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..为什么不可能?
  • 使用 LinkDatabase。查找模板类型 XXX 的所有项目,为每个项目检查 .IsDescendantOf(yourRoot)。更多信息:intothecore.cassidy.dk/2016/05/…
  • 最终会比查询方法快 100-200 倍。
  • 就我个人而言,无论数据访问等如何,我都没有发现 sitecore 可以很好地扩展。如果您需要速度和大量数据,请使用您自己的缓存。也许像弹性搜索,站点核心之上的 redis 缓存层,similar to how SO works。我现在几乎只使用 SC 作为数据层。
  • 嘿@Arbejdsglæde,考虑将 Richard 的回答标记为已接受,以防它对您有所帮助。

标签: c# sitecore


【解决方案1】:

答案总是#3 - 就其本质而言,后代行走将是一个缓慢的操作。特别是如果您的起始项目有很多后代。

Sitecore 搜索 API 使用 Lucene 或 SOLR 索引,可以非常快速地搜索数千/数百万条记录。这个名字使它看起来应该只用于站点搜索,但实际上它应该用于大多数可能使用 Sitecore 查询或 XPath 的操作。

我不知道你为什么没有这个选项。但是你将很难加快后代树的行走速度。这样做的唯一选择是重组内容树,这样就不需要遍历。

【讨论】:

  • #3 会使您的网站遭受索引损坏,这意味着过时的结果(旧值)、丢失的结果(未出现新项目)、延迟的结果(剩余的已删除/未发布的项目)。您可以重建索引,但在重建运行时根本没有搜索结果。
【解决方案2】:

虽然有很多方法可以检索项目(使用 Mark Cassidy 建议的链接数据库,使用 Siteocre Search API 等),但您的问题在于您的缓存。如果第二次查询运行得足够快,但第一次运行缓慢,则很可能缓存的某些部分被清空然后重新填充。这很可能是以下情况之一: SqlDataProvider - 预取数据 主|网络 [数据]
master|web [项目路径]
大师|网站 [项目]
master|web [路径]

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

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

还请记住,在查看运行缓慢的代码时,缓存配置应该是最后的手段——它只是治疗症状而不是根本原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2018-05-17
    • 2014-03-10
    • 1970-01-01
    相关资源
    最近更新 更多