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.core.Element 的概要介绍
- 关于 sap.ui.base.Object 的简要介绍
- SAP UI5 应用中的 sap.ui.require.toUrl 使用场景
- 关于 SAP UI5 所有控件的共同祖先 - sap.ui.base.ManagedObject
- 调用 sap.ui.base.ManagedObject 的构造函数时,如何传递绑定路径进去
- SAP UI5 sap.ui.export.Spreadsheet API 介绍
- SAP UI5 sap.ui.Device.media 公有方法介绍
- 如何使用 SAP UI5 V2 ODataModel 创建数据
- SAP 电商云 Spartacus UI External Route 的模块实现概述
- UI自动化平台_ui自动化是什么意思
- SAP UI5 加载本地并不存在的 PDF 文件的错误处理
- 澄清一些对 SAP UI5 响应式表格 sap.m.Table 的常见理解误区试读版
- 使用 class sap.ui.core.UIComponent.createContent 创建 Component 实例
- 安装SAP,Linux获台前瞻未来(linux安装sap)
- SAP smartforms之Zebra print control language详解编程语言
- SAP中使用FTP服务详解编程语言
- SAP 如何从表中区分内外向交货单详解编程语言
- SAP错误处理总结详解编程语言
- SAP字段与表的对应关系详解编程语言
- SAP中关于物料主数据里物料类型的修改详解编程语言
- 系统SAP在Linux系统上的开启之旅(sap启动linux)
- 跨界合作新模式 Oracle与SAP实现合并(oracle与sap合并)
- 聘请高级Oracle与SAP顾问,拓展业务潜力(oracle sap顾问)
- Oracle和SAP教程一步一步学习(oracle sap教程)
- 使用Oracle与SAP进行数据接口开发(oracle sap接口)