当前位置:网站首页>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:
边栏推荐
猜你喜欢
随机推荐
【Jprofile 11.0 安装】
LeetCode·85.最大矩形·单调栈
Difference between GET and POST requests
flink cdc怎么指定位点,从某个位点开始消费mysql的Binlog?
【Idea设置运行参数无效】可能是...
吴恩达机器学习[13]-支持向量机
查看每个数据库分配给了哪些用户权限,这个有接口吗
招募 | 香港理工大学Georg Kranz 博士诚招博士
电气成套设备行业如何借助ERP系统,解决企业管理难题?
云存储硬核技术内幕——小结(上)
项目里的各种配置,你都了解吗?
DocuWare Platform - Content Services and Workflow Automation Platform for Document Management (Part 1)
LeetCode·84.柱状图中最大的矩形·单调递增栈
测试零基础如何进入大厂?一场面试教会你(附面试题解析)
07-输入输出系统
2022-08-04日报:量化细胞内的信息流:机器学习时代下的研究进展
An article to answer what is the product library of the DevOps platform
寻找消失的类名
C#命令行解析工具
跟我学 UML 系统建模