天天看點

SAP Spartacus 伺服器端渲染的單步調試

SAP Spartacus 伺服器端渲染的單步調試

将 req 的 app 屬性儲存到變量 app 裡:

SAP Spartacus 伺服器端渲染的單步調試

在浏覽器裡通路 localhost:4000,該請求轉發給 app.render 函數。

SAP Spartacus 伺服器端渲染的單步調試

這個 merge 操作,把對象 b 的屬性,全部賦給對象 a:

SAP Spartacus 伺服器端渲染的單步調試

首先試圖從緩存中讀取 view 執行個體:

SAP Spartacus 伺服器端渲染的單步調試

讀取 index 視圖執行個體:

SAP Spartacus 伺服器端渲染的單步調試

得到視圖構造函數:

SAP Spartacus 伺服器端渲染的單步調試
SAP Spartacus 伺服器端渲染的單步調試

開始渲染:

SAP Spartacus 伺服器端渲染的單步調試

調試模式:

SAP Spartacus 伺服器端渲染的單步調試

調用 Universal Engine 進行渲染:

SAP Spartacus 伺服器端渲染的單步調試
SAP Spartacus 伺服器端渲染的單步調試

下列代碼是我們團隊同僚編寫的:

SAP Spartacus 伺服器端渲染的單步調試

在哪裡渲染好的呢?

SAP Spartacus 伺服器端渲染的單步調試

入口函數:renderResponse

SAP Spartacus 伺服器端渲染的單步調試
SAP Spartacus 伺服器端渲染的單步調試
SAP Spartacus 伺服器端渲染的單步調試

this.shouldRender 判斷是否應該在伺服器端渲染:

SAP Spartacus 伺服器端渲染的單步調試

如果目前請求正在渲染,或者已經超過最大渲染并發數,那麼就 fallback 到 CSR 渲染模式:

SAP Spartacus 伺服器端渲染的單步調試

調用鈎子函數,得出目前這個請求的渲染政策:

SAP Spartacus 伺服器端渲染的單步調試

fallback 到 CSR 了:

SAP Spartacus 伺服器端渲染的單步調試
SAP Spartacus 伺服器端渲染的單步調試

在 CSR 模式下,把 index.html 的請求傳回給用戶端:

SAP Spartacus 伺服器端渲染的單步調試

self 的指向:

SAP Spartacus 伺服器端渲染的單步調試

我還沒在 Visual Studio Code 裡 attach nodejs 程序,/ 的 rendering 就結束了 ?!

SAP Spartacus 伺服器端渲染的單步調試

如果給了一個很大的 timeout 值,就不用擔心會 fallback 到 CSR 了:

SAP Spartacus 伺服器端渲染的單步調試
SAP Spartacus 伺服器端渲染的單步調試

此時這個 doc,裡面包含的 selector 是空的:

SAP Spartacus 伺服器端渲染的單步調試

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

SAP Spartacus 伺服器端渲染的單步調試

上圖就是 express-engine.js 的 render 實作函數。

下圖:platform-server.js:

SAP Spartacus 伺服器端渲染的單步調試

最終渲染的結果:

SAP Spartacus 伺服器端渲染的單步調試

繼續閱讀