预渲染与服务端渲染的共同点: 都是多页面, 根据客户端的url 返回响应的文件。
不同点: 预渲染html文件的生成 在客户端 , 服务端则反之。
预渲染的缺点:
在这里我举一个例子更好的理解预渲染道德流程。
首先我们做的项目已经打包好了,根据不同的路由已经生成了不同的文件。
现在有A B C 三个路由文件 放在服务端。
客户点现在发送请求 需要A文件, 服务端收到请求后将A文件发送给客户端, 这时客户端做了一件这样的事情。生成了一个无头浏览器(可以理解成虚拟的浏览器), 执行A文件,A文件里面js文件生成DOM元素,然后获取内容等等,最终生成一个执行完html文件,在给到真正的浏览器去渲染, 这样浏览器拿到的html文件里面就是有内容有DOM结构的了。
但是在这个过程中有一个问题, 客户端发送需要A文件的请求时,携带了一个参数. 当服务端收到请求时, 就算携带参数服务端本身无法执行文件,更无法将 参数代入到文件中,只能把文件发给客户端。
结论就是 预渲染不能处理带有参数的路由。
服务端渲染就解决了这个问题。
服务端渲染是这样执行的. 当服务器收到客户端的请求时,会在服务端直接把文件执行完,生成最终的html文件,在发给客户端。 既然是服务端直接执行,那么收到的客户端参数也就可以放在文件中执行了。
那么我们试想一下预渲染到底怎么做才能解决参数的问题。
预渲染的限制点在与 服务端不能执行文件, 那么服务端有参数怎样才能给到文件中呢, 方案:只要是预渲染的文件刚开始就写好某一个函数 可以引进某个文件获取外部的参数。 服务端做的就是把参数放进某个文件中。