Sitecore在智能发布上更新了许多项目

Sitecore在智能发布上更新了许多项目,sitecore,sitecore8,Sitecore,Sitecore8,我正在使用Sitecore 8.0更新5。 每次我用英语以外的语言进行“智能”发布时,我都能看到成千上万的项目正在更新 Job started: Publish to 'web' Items created: 0 Items deleted: 0 Items updated: 56207 Items skipped: 13057 Job ended: Publish to 'web' (units processed: 69258) 我已经启用了跟踪,在日志中可以看到Sitecore更新了这些

我正在使用Sitecore 8.0更新5。 每次我用英语以外的语言进行“智能”发布时,我都能看到成千上万的项目正在更新

Job started: Publish to 'web'
Items created: 0
Items deleted: 0
Items updated: 56207
Items skipped: 13057
Job ended: Publish to 'web' (units processed: 69258)
我已经启用了跟踪,在日志中可以看到Sitecore更新了这些项目的共享字段

##Publish Item: Name=sitecore, Uri=sitecore://master/{11111111-1111-1111-1111-111111111111}?lang=zh&ver=1, Operation=Updated, ChildAction=Allow, Explanation=Shared fields were published.
##Publish Item: Name=templates, Uri=sitecore://master/{3C1715FE-6A13-4FCF-845F-DE308BA9741D}?lang=zh&ver=1, Operation=Updated, ChildAction=Allow, Explanation=Shared fields were published.
##Publish Item: Name=List Manager, Uri=sitecore://master/{D2833213-CB77-431A-9108-55E62E4E47FD}?lang=zh&ver=1, Operation=Updated, ChildAction=Allow, Explanation=Shared fields were published.
对于树中的几乎每个项目,列表都是这样的。 借助dotPeek,我能够在发布管道中找到一种负责确定发布操作的方法:

private void HandleSourceVersionNotFound(项目sourceItem,PublishItemContext)
{
Assert.ArgumentNotNull((对象)sourceItem,“sourceItem”);
Item targetItem=context.PublishHelper.GetTargetItem(sourceItem.ID);
if(targetItem!=null)
{
Item[]versions=targetItem.versions.GetVersions(true);
if(versions.Length>0&&versions.Any(v=>v.Language!=sourceItem.Language))| | Settings.Publishing.PublishEmptyItems)
context.Action=PublishAction.PublishSharedFields;
其他的
context.Action=PublishAction.DeleteTargetItem;
}
else if(Settings.Publishing.PublishEmptyItems)
context.Action=PublishAction.PublishSharedFields;
其他的
AbortPipeline(PublishOperation.Skipped,PublishChildAction.Skip,“不存在可发布的源版本(也不存在目标项)”;
}
在这里,我们可以看到它检查项目版本,如果存在英语以外的语言版本,它会将action设置为PublishAction.PublishSharedFields。 在我的例子中,Settings.Publishing.PublishEmptyItems设置为false,因此这不会触发共享字段发布

我认为在我的解决方案中,只有语言是非英语版本的“系统”项,但当我从日志中查看其中一项时,我发现了一件非常有趣的事情:

这些似乎是Sitecore的“默认”语言

当我启用语言回退模块时,此行为会导致发布性能问题。()

我的问题是:

  • 每次发布时,Sitecore都会推送共享字段,这是预期的行为吗
  • 当系统项只有这些默认语言的版本时,Sitecore会推送这些共享字段吗
  • 如何禁用这些默认语言并删除这些语言的版本?(Powershell?)
  • 删除这些默认语言的含义是什么
  • 我做错了什么会导致这种行为吗
  • UPD。在另一个环境中,它超过了100k项阈值并触发完全索引重建,这是一个非常昂贵的操作。(有或没有语言回退)


    提前谢谢

    这是Sitecore在每次发布时推送共享字段的预期行为吗? =>没有,但您找到的代码并非用于所有项目。当找不到源版本且该项存在于web中但不在master中时,会发生该操作。这就是为什么它要么发布共享字段(以防其他版本存在),要么从web上完全删除该项(因为它不再存在于master中)


    当系统项只有这些默认语言的版本时,Sitecore会推送系统项上的共享字段吗? =>如果没有更深入的调查,我无法回答这个问题,我现在没有时间,很抱歉

    如何禁用这些默认语言并删除这些语言的版本?(Powershell?) =>这些语言没有注册,它们出现是因为这些项目确实有这些语言的版本。因此,如果删除这些语言中所有系统项的版本,它们将不再显示。您可以通过代码创建任何语言的版本,即使是不存在的版本

    删除这些默认语言的含义是什么? =>任何使用该语言的内容编辑器可能会突然看到英语(或一种遗留语言),而不是他们首选的set-Sitecore编辑语言。除此之外,这不重要

    我做错了什么会导致这种行为吗? =>从您目前的演示中,我看不出这一点

    如何禁用这些默认语言并删除这些语言的版本

    如果该语言在/sitecore/system/Languages下注册,则如果删除该语言,则sitecore应删除该语言的所有项目版本

    如果未在/Sitecore/system/Languages下注册该语言(或者由于某种原因,在删除它时Sitecore未能将其删除),请执行数据库清理(控制面板>数据库>清理数据库)。Sitecore将删除任何未注册语言版本的项目

    删除这些默认语言的含义是什么


    除非您计划在将来使用这些语言,否则没有真正的意义。

    性能问题是什么?您看到的增长幅度有多大?禁用语言回退模块后,60k项不需要20-30秒。如果启用了语言回退功能,这将是一场噩梦,同样数量的项目将花费一个多小时。您不太可能一次收到所有问题的全面答案。我会把它分成至少两个独立的问题:(1+2+5),(3+4)。也许你也应该单独问一下语言回退性能问题。