关于javascript:关于-SAP-Spartacus-CmsServicegetComponentData-可能的优化思路

31次阅读

共计 908 个字符,预计需要花费 3 分钟才能阅读完成。

问题和察看

对于由 Spartacus 驱动的页面或组件申请的一个疑难。

申请负载中的 componentIds 是由 CmsService.getComponentData 调用定义的,重叠起来,而后通过一些优化立刻发送到后端。

如果二次开发人员间断屡次调用 CmsService.getComponentData(在同一个 JS 宏工作中),那么 Spartacus 会将这些调用分组,并且仅向 OCC 收回一个带有所有组件 ID 的 HTTP 申请。

浏览器 JavaScript 执行流程以及在 Node.js 中都是基于事件循环的。

理解事件循环的工作原理对于优化十分重要,有时对于正确的架构也是如此。

事件循环的概念非常简单。有一个有限循环,JavaScript 引擎期待工作,执行它们而后休眠,期待更多任务。

引擎的个别算法:

  1. 期待有工作达到,而后执行它们,从队列里最旧的工作开始。
  2. 睡眠直到工作再次达到。

这是咱们在浏览网页时看到的模式。JavaScript 引擎大部分工夫什么都不做,它只在脚本 / 处理程序 / 事件激活时运行。

工作示例:

  1. 当内部脚本 <script src="..."> 加载时,工作引擎开始加载这些脚本文件。
  2. 当用户挪动鼠标时,任务调度 mousemove 事件并执行对应的处理程序。
  3. 当预约的 setTimeout 工夫到期时,工作将运行其回调,等等。

具体实现细节如下。

请留神,OCC 对组件的调用是上下文相干的,它在无效负载中传递 productCode.

这是因为对于不同的 PDP,雷同的 cms 组件可能会从后端携带不同的无效负载。

如果客户冀望更改这种行为状况,客户能够增加自定义项来优化它 – 这样就不会在不同的产品代码中反复调用这些组件 ID.

对于 SAP 公布的开箱即用的示例数据用例,Spartacus 实践上不须要在不同的 PDP 上从新加载这些组件,因为无效负载在 PDP 之间不会发生变化。但这只是因为咱们的样本数据在页面之间没有区别:

  • 其中 3 个只是 CmsFlexComponent
  • 第四个是一个段落组件,其内容属性具备 Lorem ipsum…

路由外部有一个配置 loadStrategy。默认值为 ALWAYS。它将强制每次从新加载 CMS 页面。如果是 ONCE,则不会从新加载 CMS 页面。

正文完
 0