问题和察看
对于由 Spartacus 驱动的页面或组件申请的一个疑难。
申请负载中的 componentIds 是由 CmsService.getComponentData 调用定义的,重叠起来,而后通过一些优化立刻发送到后端。
如果二次开发人员间断屡次调用 CmsService.getComponentData(在同一个 JS 宏工作中),那么 Spartacus 会将这些调用分组,并且仅向 OCC 收回一个带有所有组件 ID 的 HTTP 申请。
浏览器 JavaScript 执行流程以及在 Node.js 中都是基于事件循环的。
理解事件循环的工作原理对于优化十分重要,有时对于正确的架构也是如此。
事件循环的概念非常简单。有一个有限循环,JavaScript 引擎期待工作,执行它们而后休眠,期待更多任务。
引擎的个别算法:
- 期待有工作达到,而后执行它们,从队列里最旧的工作开始。
- 睡眠直到工作再次达到。
这是咱们在浏览网页时看到的模式。JavaScript 引擎大部分工夫什么都不做,它只在脚本 / 处理程序 / 事件激活时运行。
工作示例:
- 当内部脚本
<script src="...">
加载时,工作引擎开始加载这些脚本文件。 - 当用户挪动鼠标时,任务调度 mousemove 事件并执行对应的处理程序。
- 当预约的 setTimeout 工夫到期时,工作将运行其回调,等等。
具体实现细节如下。
请留神,OCC 对组件的调用是上下文相干的,它在无效负载中传递 productCode.
这是因为对于不同的 PDP,雷同的 cms 组件可能会从后端携带不同的无效负载。
如果客户冀望更改这种行为状况,客户能够增加自定义项来优化它 – 这样就不会在不同的产品代码中反复调用这些组件 ID.
对于 SAP 公布的开箱即用的示例数据用例,Spartacus 实践上不须要在不同的 PDP 上从新加载这些组件,因为无效负载在 PDP 之间不会发生变化。但这只是因为咱们的样本数据在页面之间没有区别:
- 其中 3 个只是 CmsFlexComponent
- 第四个是一个段落组件,其内容属性具备
Lorem ipsum…
路由外部有一个配置 loadStrategy。默认值为 ALWAYS。它将强制每次从新加载 CMS 页面。如果是 ONCE,则不会从新加载 CMS 页面。