我从他们发布它的那天起就一直在使用Angula2 + Universal,但今天我对它的实际工作方式感到困惑。
在example的server.ts文件中,您会找到:
PUT https://www.googleapis.com/games/v1/turnbasedmatches/matchId/dismiss
如果您运行该应用,右键点击并查看页面来源,您就会发现这些虚假数据来自服务器'在源代码中,意味着页面已在服务器中呈现? (这是正确的吗?)
到目前为止,太棒了。
接下来是app.ts,你可以找到:
https://www.googleapis.com/auth/games
同样,此文本也可以在页面源中找到。
现在这是我的奇怪部分:
如果您出于任何原因增加服务器延迟,请执行以下操作:
app.get( '/data.json' , ( req , res ) => {
res.json( {
data : 'This fake data came from the server.'
} );
} );
这样,页面源不会得到文本,但是,如果你这样做:
ngOnInit () {
setTimeout( () => {
this.server = 'This was rendered from the server!';
} , 10 );
}
这一个,您可以在服务器中找到文本。!!!!!!
到目前为止,基于我的测试,我猜测ajax呼叫延迟是否很长(我猜是多于一秒?),你不会从服务器端渲染中获益。
但是:
但是,如果你在app.component.ts中增加timeOut,例如:
app.get( '/data.json' , ( req , res ) => {
setTimeout( function() {
res.json( {
data : 'This fake data came from the server.'
} );
} , 2000 ); // Added setTimeOut with 2 seconds .
} );
您仍然可以获得服务器端渲染,源页面将呈现文本!
这里发生了什么?
显然不是所有的ajax调用都可以低于1秒,那么使用通用的好处是什么呢?