SAP 电商云 Spartacus UI SSR 里 engine 和 engine instance 的区别

简介: SAP 电商云 Spartacus UI SSR 里 engine 和 engine instance 的区别

传入 originalEngine 到装饰器 decorateExpressEngine 里:


image.png


传出的是一个 engine 函数,engine 函数包括了 original Engine 这个函数,然后调用 engine 函数,同时将 Engine 参数传入,得到第二个 engine instance 函数。


最后的服务器端渲染,就是该 engine instance 函数负责处理。


我们再来看看生产版本的 engine 实现原理:传入 decorator 的第一个 engine 实例,来自 Angular @nguniversal/express-engine:


image.png


这个装饰器返回一个新的函数。


(1) NgExpressEngine 的输入参数

(2) Spartacus 开发团队引入的优化参数,通过闭包传入

(3) Angular 标准的 NgExpressEngine 实例


image.png


在实际的生产代码里,通过装饰器的 get 方法,传入 nguniversal/express-engine 标准的 engine,返回 ngExpressEngine:


image.png


然后这个 ngExpressEngine 被作为参数,传入 server.engine 处理参数:


image.png


再看单元测试里的代码:传入装饰器的第二个参数为 null,意思是不使用 optimization engine:


image.png


第135行代码返回的是下图第47行的函数体本身:


image.png


如果我们观察返回的 engine 实例,就能发现它内部包含两个闭包,存储了装饰器调用时,传入的 originalEngine 和 optimization option 的值:


image.png


接下来执行第136行代码,即 135行装饰器返回的新函数的函数体:


image.png


当然,因为 ngExpressEngine 已经被 mock 过了,所以返回 callFake 指定的 mock 版本的实现:


image.png


因为传入的 optimization option 为空,所以不使用 optimization engine,因此返回 original engine instance:

image.png

相关文章
|
1月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
|
1月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
|
1月前
|
监控 测试技术
SAP 电商云修改 Product Catalog Staged 版本数据后,同步到 online 版本的 UI 操作
SAP 电商云修改 Product Catalog Staged 版本数据后,同步到 online 版本的 UI 操作
|
1月前
|
存储 监控 数据库
SAP 电商云 product catalog 从 staged 到 online 两个版本之间的同步
SAP 电商云 product catalog 从 staged 到 online 两个版本之间的同步
|
1月前
|
监控 安全 数据管理
SAP 电商云 Product catalog 的 staged 和 online 两种版本的设计理念
SAP 电商云 Product catalog 的 staged 和 online 两种版本的设计理念
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
|
1月前
|
开发者 UED
关于 SAP UI5 sap.m.Column 的 demandPopin 属性
关于 SAP UI5 sap.m.Column 的 demandPopin 属性
|
1月前
|
Web App开发 数据采集 前端开发
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
|
1月前
|
XML 存储 数据格式
SAP UI5 控件 customData 属性的应用介绍
SAP UI5 控件 customData 属性的应用介绍
|
1月前
|
前端开发 JavaScript API
SAP UI5 sap.ui.require.toUrl 的作用介绍
SAP UI5 sap.ui.require.toUrl 的作用介绍