所有常规路由采用 universal engine 实现:
将 req 的 app 属性保存到变量 app 里:
在浏览器里访问 localhost:4000,该请求转发给 app.render 函数。
这个 merge 操作,把对象 b 的属性,全部赋给对象 a:
首先试图从缓存中读取 view 实例:
读取 index 视图实例:
得到视图构造函数:
开始渲染:
调试模式:
调用 Universal Engine 进行渲染:
下列代码是我们团队同事编写的:
在哪里渲染好的呢?
入口函数:renderResponse
this.shouldRender 判断是否应该在服务器端渲染:
如果当前请求正在渲染,或者已经超过最大渲染并发数,那么就 fallback 到 CSR 渲染模式:
调用钩子函数,得出当前这个请求的渲染策略:
fallback 到 CSR 了:
在 CSR 模式下,把 index.html 的请求返回给客户端:
self 的指向:
我还没在 Visual Studio Code 里 attach nodejs 进程,/ 的 rendering 就结束了 ?!
如果给了一个很大的 timeout 值,就不用担心会 fallback 到 CSR 了:
此时这个 doc,里面包含的 selector 是空的:
Render an HTML document for a specific URL with specified render options:
上图就是 express-engine.js 的 render 实现函数。
下图:platform-server.js:
最终渲染的结果:
更多Jerry的原创文章,尽在:“汪子熙”: