入口:所有常规路由都使用通用引擎:简而言之,AngularUniversal是Angular的预渲染解决方案。在普通的单页应用程序中,我们通常将数据带到客户端,然后在客户端的最后一秒构建表示该数据的HTML。但在某些情况下,出于充分的理由,我们可能希望提前渲染,例如在服务器上或在应用程序构建时:这正是AngularUniversal允许我们做的。express的响应实现:express应用的实现:静态资源,全部从浏览器目录获取:渲染后回调:然后来到Spartacus代码:view.js的render方法调用SAPSpartacus实现的回调函数renderResponse:获取渲染key:第139行,判断请求是否被缓存。如果正在渲染或者渲染并发数达到上限,则回退到CSR:判断是否timeout:shouldTimeout返回true,且满足以下任一条件必须为真:this.ssrOptions===nullthis.getRenderingStrategy(request)===渲染策略.ALWAYS_SSR);为什么这里要回退到CSR?如果客户端设置了超时时间,则使用setTimeout设置一个客户端指定的超时时间间隔,然后进入else分支的下一行开始正常的SSR渲染。如果SSR足够快以在超时发生之前结束怎么办?原因:值为0将立即返回CSR页面。
