天天看點

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

所有正常請求都用 universal engine 渲染:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作
SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作
SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

Index 是靜态頁面,還得從 browser 檔案夾裡的資源出發:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

讀取視圖執行個體:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

拿到的 view 執行個體:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

根據請求執行個體拿到其 key:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

呈現的頁面儲存在記憶體中,以便在下次請求時提供服務。 如果

cache

設定為

false

,則一旦成功傳回第一個成功響應,響應就會被驅逐。

OptimizedSsrEngine

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

預設請求的 key 就是 originalURL:/

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

去 cache 裡查找這個 / 之前已經渲染過了嗎?

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

RenderingCache 裡維護了一個 Map:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

判斷是否應該渲染目前請求:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

既沒有正在渲染,也沒有到達并發上限,渲染政策不是 CSR,則 shouldRender 傳回 true:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

優化引擎計數器 currentConcurrency 加一。

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

然後檢查 shouldTimeout:如果傳入了 timeout 值,才會 timeout:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

例如 timeout 為 7秒,則7秒後,執行 fallbackToCSR,那麼7秒内完成渲染呢?

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作
SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

在 map 裡設定一個 key 為 / 的标志位,注明其正在渲染:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

開始調用 expressEngine 進行渲染:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

renderOptions:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

渲染完了之後,輸出的 html,傳入到應用程式提供的 callback 裡:

SAP Spartacus 伺服器端渲染單步調試步驟之一:應用程式準備工作

繼續閱讀