本文介绍如何在本地调试 SAP Spartacus Node.js 应用。
按照这个链接 安装 Spartacus.
在 package.json 的 scripts 区域,生成了一个名叫 build:ssr 的指令,默认按照 --prod 参数来构建。

如果使用这个 script,我们不得不调试 minified and uglified code, 不太直观。
也就是说,去掉 --prod 和 :production
使用如下命令行:
ng build && ng run mystore:server

采用这个方式构建出的 main.js, 代码是可读的:

(3) 添加一个 --inspect-brk 选项:
node --inspect-brk dist/mystore/server/main.js

启动:
npm run serve:ssr

(4) Chrome 地址栏输入 chrome://inspect, 点击 inspect hyperlink:

断点会自动触发,停在 main.js 的第一行:

现在就可以开始调试了:


引起 Node.js 应用高 CPU 占用率的一些可能性:
循环和迭代。 如果不限制可迭代集合的大小,任何 .map、.reduce、.forEach 和其他迭代方法调用都可能导致问题。for 和 while 循环也存在同样的潜在问题。 如果业务层面上必须处理大型集合,请使用流或将集合,拆分为块并异步处理它们。 它将在不同的 EventLoop 迭代之间分配负载,减少阻塞效应。
递归函数。 这里的原理相同,你需要考虑递归深度,特别是当函数是同步的时候。
巨大的有效载荷。Node.js 是为处理大量异步操作而创建的,例如向数据库发出请求或外部 API 调用。 在来自外部来源的有效载荷很小之前,它可以完美运行。 不要忘记 Node.js 需要先读取一个有效载荷并将其存储在内存中,然后将 JSON 解析为一个对象(增加了更多内存),对该对象执行一些操作。 来自 Node.js 服务的巨大负载也可能是一个问题,因为 Node.js 首先将对象字符串化为 JSON,然后将它们发送到客户端。 所有这些操作都可能导致高 CPU,确保有效负载大小不是很大,使用分页,并且不要预填充不必要的数据。 对于 GraphQL 服务,使用复杂性来限制响应负载。
Spartacus 3.0 SSR 模式的启用
本地文件夹的路径:

yarn ssrdebug:以调试模式启动 SSR 服务器:

