2

好的,所以我刚刚在 Umbraco 的杂草中度过了过去 6-8 周,并对我们的网站和环境进行了一些修复/改进。我花了很多时间试图纠正较低级别的 Umbraco 缓存相关问题。现在反思我的经验,我仍然不知道以下概念之间的差异是什么:

  • 检查索引
  • umbraco.config
  • 缓存在内存中的 xml 文件(据说类似于 umbraco.config)
  • CMSContentXML 表

再次感谢,

德文

4

1 回答 1

6

检查索引是 umbraco 含量的索引

因此,当您创建/更新/删除内容时,当前的内容信息将被编入索引

该索引用于搜索 - 在引擎盖下,它是 lucene 索引 umbraco 后端使用这些索引进行搜索

如果需要,您可以创建自己的索引

更多信息结帐,概述和解释-“检查彼得格雷戈里的检查”

umbraco.config 和内存中缓存的 xml确实是一回事。

前端 UmbracoHelper api 从缓存而不是数据库获取内容 - 缓存来自 umbraco.config

CMSContentXML包含每个内容的信息作为 xml

所以本质上这个xml代表了一个节点内容的所有信息

所以简而言之,它们代表了三件事:

  1. 检查用于搜索
  2. umbraco.config 缓存数据 - 保存到 DB 的往返行程
  3. CMSContentXML 存储内容的完整信息

编辑以包括 Robert Foster 评论和 UmbracoHelper vs ExamineManager 的更好澄清

对于 umbraco.config 和 CMSContentXML 表,@robert-foster 评论道

umbraco.config 仅存储所有已发布内容的最新版本;内存缓存是该文件的缓存版本;cmscontentxml 表存储所有内容的表示形式,主要用于预览模式 - 每次保存内容项时都会更新。IIRC 它还存储其他内容类型的表示

问候UmbracoHelper 与 ExamineManager

UmbracoHelper api 主要从内存缓存中获取它的内容 - IMO 它在定位直接内容时效果最好,例如当你知道你想要的内容的 id 时,你只需调用Umbraco.TypedContent(id)

但是你首先从哪里得到你想要的 id 呢?或者换一种说法,如果你想找到所有包含“Test”这个词的内容的属性标题,那么你会使用检查来搜索它。因为 Examine 是真正的 lucene 包装器,所以它会快速高效

虽然您可以通过诸如Umbraco.TypedContent(id).Children然后使用linq过滤结果的方法来遍历树,但我认为这是使用linq-to-object在内存中完成的,因此它不如lucene高效和优先

所以我个人认为:

  1. 在搜索(定位)内容时使用检查 - 因为您可以使用适当的搜索引擎 lucene 的功能
  2. 从搜索结果中获取 id 后,使用 UmbracoHelper 将内容 id 的完整发布内容表示形式获取到强类型模型中并使用数据。

@robert-foster 在评论中提到的一件事,我不知道 UmbracoHelper 提供了 Search 方法,它是检查的包装器,所以如果更熟悉该 api,请使用它。

最后,如果上面的任何陈述是错误的或不太正确的,请帮助我澄清,以便以后任何人看它都不会出错,谢谢大家。

于 2016-04-22T08:27:26.173 回答