当前位置:网站首页>SAP 电商云 Spartacus UI SSR 里 engine 和 engine instance 的区别
SAP 电商云 Spartacus UI SSR 里 engine 和 engine instance 的区别
2022-08-04 16:18:00 【华为云】
传入 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:
边栏推荐
- 平稳发展 | 西欧地区手游玩家的数据和洞察
- PAT 甲级 A1072 Gas Station
- 荐书 | 《大脑的奥秘:人人要懂的脑科学》:大脑里面有什么
- GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
- [TA-Frost Wolf_may-"Hundred Talents Project"] Art 2.7 Metallic and Speculer Process
- 现代 ABAP 编程语言中的正则表达式
- 花了半个月,终于把一线大厂高频面试题做成合集了
- 云存储硬核技术内幕——(13) 抓手,组合拳与闭环
- 容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
- Real-Time Rendering 4th相关资源整理(无需积分 传火)
猜你喜欢

Typora收费?搭建VS Code MarkDown写作环境

GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
![吴恩达机器学习[13]-支持向量机](/img/8c/87f1dd825bb998008d1532ff2899e2.png)
吴恩达机器学习[13]-支持向量机

Real-Time Rendering 4th相关资源整理(无需积分 传火)

8年软件测试感悟,送给刚入测试行业的小伙伴

【打卡】广告-信息流跨域ctr预估(待更新)

游戏云服务器配置怎么选合理?

【Jprofile 11.0 安装】

DocuWare Platform - Content Services and Workflow Automation Platform for Document Management (Part 1)

NFT blind box mining system dapp development NFT chain game construction
随机推荐
HCIP笔记(7)
广东湛江海关破获3起走私冻海产品案 查证案值约1亿元
Check which user permissions are assigned to each database, is there an interface for this?
C#命令行解析工具
jasmine.any(Function) 的一个使用场景
基本的SELECT语句
地理标志农产品需双重保护
Jenkins 如何玩转接口自动化测试?
寻找消失的类名
Minecraft 服务器安装Forge 并添加Mod
皕杰报表配置文件report_config.xml里都配置了什么?
在VMD上可视化hdf5格式的分子轨迹文件
7 月浏览器市场份额:Edge 全球第二、360 安全浏览器中国第二
平稳发展 | 西欧地区手游玩家的数据和洞察
2022-08-04日报:量化细胞内的信息流:机器学习时代下的研究进展
手把手教你搭建一个Minecraft 服务器
会话劫持安全攻击
JVM Tuning-GC Fundamentals and Tuning Key Analysis
录音文件识别
如何实时监控销售数据?销售看板来帮你!