当前位置:网站首页>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:
边栏推荐
- 【打卡】广告-信息流跨域ctr预估(待更新)
- No server is required, teach you to get real-time health code recognition with only 30 lines of code
- #夏日挑战赛# HarmonyOS 实现一个滑块验证
- What is an artifact library in a DevOps platform?What's the use?
- Difference between GET and POST requests
- 农产品期货开户哪家好??
- 06-总线
- 吴恩达机器学习[12]-机器学习系统设计
- jasmine.any(Function) 的一个使用场景
- 7 月浏览器市场份额:Edge 全球第二、360 安全浏览器中国第二
猜你喜欢
![吴恩达机器学习[13]-支持向量机](/img/8c/87f1dd825bb998008d1532ff2899e2.png)
吴恩达机器学习[13]-支持向量机

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

Redis的主从复制和集群

74行代码实现浪漫的红心下落的动画效果

如何防止重复下单?

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

【IDEA】idea配置

"Research Report on the Development of Global Unicorn Enterprises in the First Half of 2022" released - DEMO WORLD World Innovation Summit ended successfully

Minecraft HMCL 使用认证服务器LittleSkin进行登录

Real-Time Rendering 4th相关资源整理(无需积分 传火)
随机推荐
张乐:研发效能的黄金三角及需求与敏捷协作领域的实践
生产环境重大bug,update加上索引字段会走索引进行更新?还是走全表扫描
JVM Tuning-GC Fundamentals and Tuning Key Analysis
Jenkins 如何玩转接口自动化测试?
Minecraft 我的世界 .minecraft下的各个文件夹的用处
LeetCode·84.柱状图中最大的矩形·单调递增栈
74行代码实现浪漫的红心下落的动画效果
5 基本引用类型
dot net double 数组转 float 数组
吴恩达机器学习[12]-机器学习系统设计
Win10 无线网卡驱动感叹号,显示错误代码56
Roslyn 在 msbuild 的 target 判断文件存在
【二叉树】根据描述创建二叉树
视频字幕API接口文档
人造肉在中国还有未来吗?
会话劫持安全攻击
An article to answer what is the product library of the DevOps platform
UWP WPF 解决 xaml 设计显示异常
转型阵痛期,好未来减亏容易增收难?
吴恩达机器学习[11]-机器学习性能评估、机器学习诊断