问题与观察一个关于Spartacus驱动的页面或组件请求的问题。请求有效负载中的componentIds由CmsService.getComponentData调用定义、堆叠并通过一些优化立即发送到后端。如果二级开发人员连续多次调用CmsService.getComponentData(在同一个JS宏任务中),Spartacus会将这些调用分组,并只向OCC发出一次带有所有组件ID的HTTP请求。浏览器和Node.js中的JavaScript执行流程基于事件循环。了解事件循环的工作原理对于优化非常重要,有时对于正确的架构也非常重要。事件循环的概念非常简单。有一个无限循环,JavaScript引擎等待任务,执行它们然后休眠,等待更多任务。引擎的通用算法:等待任务到达,然后执行它们,从队列中最旧的任务开始。睡眠直到任务再次到来。这是我们在浏览网页时看到的形式。JavaScript引擎大部分时间什么都不做,它只在脚本/处理程序/事件触发时运行。任务示例:当加载外部脚本时,任务引擎开始加载这些脚本文件。当用户移动鼠标时,任务会调度mousemove事件并执行相应的处理程序。当预定的setTimeout时间到期时,任务将运行其回调等。具体实现细节如下。请注意,对组件的OCC调用是上下文相关的,它在有效负载中传递productCode。这是因为对于不同的PDP,相同的cms组件可能从后端携带不同的有效负载。如果客户希望改变这种行为,客户可以添加定制来优化它——这样这些组件ID就不会在不同的产品代码中被重复调用。对于SAP发布的开箱即用的示例数据用例,Spartacus理论认为无需在不同的PDP上重新加载这些组件,因为payload在PDP之间不会发生变化。但这只是因为我们的样本数据在页面之间没有差异:其中3个只是CmsFlexComponent,第四个是一个段落组件,其内容属性中有一个Loremipsum...路由中有一个配置loadStrategy。默认值为ALWAYS。它将强制CMS页面每次重新加载。如果是ONCE,则不会重新加载CMS页面。