当前位置: 首页 > Web前端 > JavaScript

SAP电商云SpartacusUISSR中engine和engine实例的区别

时间:2023-03-27 13:46:26 JavaScript

将originalEngine传递给装饰器decorateExpressEngine:输出的是一个engine函数,包含了原Engine函数,然后调用engine函数,并在同时传入Engine参数,得到第二个引擎实例函数。最终的服务器端渲染由引擎实例函数处理。我们来看看生产版的引擎实现原理:第一个传入装饰器的引擎实例,来自Angular@nuniversal/express-engine:Thisdecoratorreturnsanewfunction。(1)NgExpressEngine的入参(2)Spartacus开发组引入的优化参数通过闭包传入(3)Angular标准NgExpressEngine实例在实际生产中通过装饰器的get方法传入nguniversal/expresscode-engine标准引擎,返回ngExpressEngine:然后将这个ngExpressEngine作为参数,传递给server.engine处理参数:再看单元测试中的代码:传递给装饰器的第二个参数为null,表示未使用optimizationengine:135行的代码返回了下图中47行的函数体本身:如果我们观察返回的engine实例,可以发现里面包含了两个闭包,分别存放了传入的originalEngine和optimization调用装饰器时option的值:接下来执行136行的代码,这是lin上装饰器返回的新函数的函数体e135:当然,因为ngExpressEngine已经被mock过,返回callFake指定的mock版本的实现:因为optimization传入的option为空,所以没有使用优化引擎,所以返回原引擎实例:更多Jerry原创文章在这里:《王子熙》: