打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于 SAP Spartacus CmsService.getComponentData 可能的优化思路
userphoto

2022.05.17 上海

关注

问题和观察

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存
猜你喜欢
类似文章
天干地支在择时中的应用初探(pdf版)
2022年日历表(一月一张打印版)
Excel教程:公历日期转农历的6个公式
宏--战士宏--通用 老雷
潘长宏制作的博客、图书馆首页可应用的访客与时间显示记录仪
视频制作师潘长宏制作的---【精美分隔线】
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服