0
点赞
收藏
分享

微信扫一扫

SAP Spartacus 服务器端渲染的单步调试

前端王祖蓝 2022-03-15 阅读 58


所有常规路由采用 universal engine 实现:

SAP Spartacus 服务器端渲染的单步调试_请求转发

将 req 的 app 属性保存到变量 app 里:

SAP Spartacus 服务器端渲染的单步调试_请求转发_02

在浏览器里访问 localhost:4000,该请求转发给 app.render 函数。

SAP Spartacus 服务器端渲染的单步调试_html_03

这个 merge 操作,把对象 b 的属性,全部赋给对象 a:

SAP Spartacus 服务器端渲染的单步调试_html_04

首先试图从缓存中读取 view 实例:

SAP Spartacus 服务器端渲染的单步调试_html_05

读取 index 视图实例:

SAP Spartacus 服务器端渲染的单步调试_html_06

得到视图构造函数:

SAP Spartacus 服务器端渲染的单步调试_html_07

SAP Spartacus 服务器端渲染的单步调试_html_08

开始渲染:

SAP Spartacus 服务器端渲染的单步调试_构造函数_09

调试模式:

SAP Spartacus 服务器端渲染的单步调试_构造函数_10

调用 Universal Engine 进行渲染:

SAP Spartacus 服务器端渲染的单步调试_构造函数_11

SAP Spartacus 服务器端渲染的单步调试_构造函数_12

下列代码是我们团队同事编写的:

SAP Spartacus 服务器端渲染的单步调试_请求转发_13

在哪里渲染好的呢?

SAP Spartacus 服务器端渲染的单步调试_构造函数_14

入口函数:renderResponse

SAP Spartacus 服务器端渲染的单步调试_html_15

SAP Spartacus 服务器端渲染的单步调试_请求转发_16

SAP Spartacus 服务器端渲染的单步调试_请求转发_17

this.shouldRender 判断是否应该在服务器端渲染:

SAP Spartacus 服务器端渲染的单步调试_html_18

如果当前请求正在渲染,或者已经超过最大渲染并发数,那么就 fallback 到 CSR 渲染模式:

SAP Spartacus 服务器端渲染的单步调试_html_19

调用钩子函数,得出当前这个请求的渲染策略:

SAP Spartacus 服务器端渲染的单步调试_请求转发_20

fallback 到 CSR 了:

SAP Spartacus 服务器端渲染的单步调试_请求转发_21

SAP Spartacus 服务器端渲染的单步调试_html_22

在 CSR 模式下,把 index.html 的请求返回给客户端:

SAP Spartacus 服务器端渲染的单步调试_html_23

self 的指向:

SAP Spartacus 服务器端渲染的单步调试_构造函数_24

我还没在 Visual Studio Code 里 attach nodejs 进程,/ 的 rendering 就结束了 ?!

SAP Spartacus 服务器端渲染的单步调试_请求转发_25

如果给了一个很大的 timeout 值,就不用担心会 fallback 到 CSR 了:

SAP Spartacus 服务器端渲染的单步调试_构造函数_26

SAP Spartacus 服务器端渲染的单步调试_构造函数_27

此时这个 doc,里面包含的 selector 是空的:

SAP Spartacus 服务器端渲染的单步调试_请求转发_28

Render an HTML document for a specific URL with specified render options:

SAP Spartacus 服务器端渲染的单步调试_html_29

上图就是 express-engine.js 的 render 实现函数。

下图:platform-server.js:

SAP Spartacus 服务器端渲染的单步调试_请求转发_30

最终渲染的结果:

SAP Spartacus 服务器端渲染的单步调试_请求转发_31

更多Jerry的原创文章,尽在:“汪子熙”:

SAP Spartacus 服务器端渲染的单步调试_html_32



举报

相关推荐

0 条评论