SAP 电商云 Spartacus UI SSR 里 engine 和 engine instance 的区别
传入 originalEngine 到装饰器 decorateExpressEngine 里:
传出的是一个 engine 函数,engine 函数包括了 original Engine 这个函数,然后调用 engine 函数,同时将 Engine 参数传入,得到第二个 engine instance 函数。
最后的服务器端渲染,就是该 engine instance 函数负责处理。
我们再来看看生产版本的 engine 实现原理:传入 decorator 的第一个 engine 实例,来自 Angular @nguniversal/express-engine:
这个装饰器返回一个新的函数。
(1) NgExpressEngine 的输入参数
(2) Spartacus 开发团队引入的优化参数,通过闭包传入
(3) Angular 标准的 NgExpressEngine 实例
在实际的生产代码里,通过装饰器的 get 方法,传入 nguniversal/express-engine 标准的 engine,返回 ngExpressEngine:
然后这个 ngExpressEngine 被作为参数,传入 server.engine 处理参数:
再看单元测试里的代码:传入装饰器的第二个参数为 null,意思是不使用 optimization engine:
第135行代码返回的是下图第47行的函数体本身:
如果我们观察返回的 engine 实例,就能发现它内部包含两个闭包,存储了装饰器调用时,传入的 originalEngine 和 optimization option 的值:
接下来执行第136行代码,即 135行装饰器返回的新函数的函数体:
当然,因为 ngExpressEngine 已经被 mock 过了,所以返回 callFake 指定的 mock 版本的实现:
因为传入的 optimization option 为空,所以不使用 optimization engine,因此返回 original engine instance:
更多Jerry的原创文章,尽在:“汪子熙”:
相关文章
- SAP UI5 应用中的 sap.ui.require.toUrl 使用场景
- 使用 SAP UI5 sap.ui.export.Spreadsheet API 进行 Excel 导出的一些限制
- SAP UI5 sap.ui.Device.media.RANGESETS.SAP_STANDARD_EXTENDED 介绍
- 通过一个实际例子,理解 SAP UI5 sap.ui.model.odata.v2.ODataModel API 中 BindingContext 绑定上下文的概念和用法试读版
- SAP MM SPED输出报错-No authorization for delivery from shipping point US##-之对策
- SAP Fiori 3 的 Quartz Theme 在 WebClient UI 和 SAPGUI 中的应用
- sap.ui.comp.smarttable.SmartTable 一些属性的用法阐述
- ORA-06816: TLI Driver: could not set the SPX SAP address ORACLE 报错 故障修复 远程处理
- SAP 使用较频繁的日期时间处理函数总结详解编程语言
- SAP选择屏幕字段设为单值还是区间详解编程语言
- SAP MM中如何修改物料的评估类详解编程语言
- SAP常用知识点{系统变量|TCODE|消息类型|数据类型|变量声明|Internal Table}详解编程语言
- Reading and Writing data on application server in SAP详解编程语言
- 系统SAP在Linux系统上的开启之旅(sap启动linux)
- SAP vs Oracle:差异点与解析(sap和oracle的区别)
- 比较:Oracle与SAP的对比(oracle和sap)
- 对比SAP VS Oracle: 哪个更适合你?(sap与oracle)
- SAP HANA连接Oracle系统的指南(hana连接oracle)