美文网首页
关于 SAP Spartacus CmsService.getC

关于 SAP Spartacus CmsService.getC

作者: _扫地僧_ | 来源:发表于2022-05-20 20:16 被阅读0次

    问题和观察

    关于由 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 页面。

    相关文章

      网友评论

          本文标题:关于 SAP Spartacus CmsService.getC

          本文链接:https://www.haomeiwen.com/subject/nnkuurtx.html