当前位置:网站首页>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:
边栏推荐
猜你喜欢
随机推荐
手把手教你搭建一个Minecraft 服务器
推荐 7 月份 yyds 的开源项目
07-输入输出系统
Beginner crawler notes (collecting data)
可视化大屏丑?这篇文章教你如何做美观大屏!
Minecraft HMCL 使用认证服务器LittleSkin进行登录
The electromagnetic compatibility EMC protection study notes
Summary of some pytorch knowledge points that have been updated for a long time
花 30 美金请 AI 画家弄了个 logo,网友:画得非常好,下次别画了!
Visual Studio 2022创建项目没有CUDA模板的解决方法
勒索软件的原理
dot net double 数组转 float 数组
视频字幕API接口文档
In-depth analysis of HyperBDR cloud disaster recovery 1: Cloud-native cross-platform disaster recovery, making data flow more flexible
B 站又上热搜了, HR 称「核心用户都是 Loser」
B站回应HR称核心用户是Loser;微博回应宕机原因;Go 1.19 正式发布|极客头条
HyperBDR云容灾深度解析一:云原生跨平台容灾,让数据流转更灵活
HCIP笔记(8)
SAP HANA Schemas 和 HDI Containers
攻防视角下,初创企业安全实战经验分享









![吴恩达机器学习[9]-神经网络学习](/img/07/0eeb3cd5f3ea7c2baeec1732ea8d9a.png)