当前位置:网站首页>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:
边栏推荐
- 云存储硬核技术内幕——小结(上)
- LeetCode·每日一题·1403.非递增顺序的最小子序列·贪心
- gcc7.5.0编译ceres-solver报错‘is_trivially_default_constructible’ is not a member of ‘std’
- 平稳发展 | 西欧地区手游玩家的数据和洞察
- 5 基本引用类型
- 【Pick-in】Advertising-information flow cross-domain CTR estimation (to be updated)
- 【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)
- 游戏云服务器配置怎么选合理?
- What is the difference between ITSM software and a work order system?
- Minecraft HMCL 使用认证服务器LittleSkin进行登录
猜你喜欢
随机推荐
功率放大器的设计要点
Many merchants mall system function and dismantling 24 - ping the strength distribution of members
[TA-Frost Wolf_may-"Hundred Talents Project"] Art 2.7 Metallic and Speculer Process
Win10 无线网卡驱动感叹号,显示错误代码56
Minecraft HMCL 第三方启动器使用教程
LeetCode·84.柱状图中最大的矩形·单调递增栈
什么是会话劫持攻击以及如何防止会话劫持
8年软件测试感悟,送给刚入测试行业的小伙伴
【IDEA】idea配置
7 月浏览器市场份额:Edge 全球第二、360 安全浏览器中国第二
HyperBDR云容灾深度解析一:云原生跨平台容灾,让数据流转更灵活
面渣逆袭:MySQL六十六问,两万字+五十图详解
5 基本引用类型
云存储硬核技术内幕——(9) 相见时难别亦难
UWP 转换 IBuffer 和其他类型
番茄插件番茄助手下载
07-输入输出系统
LeetCode·85.最大矩形·单调栈
无心剑七绝《七夕牵手》
备战9月,美团50道软件测试经典面试题及答案汇总









