Vue服务端渲染实践之Web应用首屏耗时最优化方案

2020-06-14 06:25:04易采站长站整理

当你在渲染

Vue
应用程序时,
renderer
只从应用程序生成
HTML
标记。在这个示例中,我们必须用一个额外的
HTML
页面包裹容器,来包裹生成的
HTML
标记。

为了简化这些,你可以直接在创建

renderer
时提供一个页面模板。多数时候,我们会将页面模板放在特有的文件中:


<!DOCTYPE html>
<html lang="en">
<head><title>Hello</title></head>
<body>
<!--vue-ssr-outlet-->
</body>
</html>

然后,我们可以读取和传输文件到

Vue renderer
中:


const tpl = fs.readFileSync(path.resolve(__dirname, './index.html'), 'utf-8');
const renderer = vssr.createRenderer({
template: tpl,
});

Webpack配置

然而在实际项目中,不止上述例子那么简单,需要考虑很多方面:路由、数据预取、组件化、全局状态等,所以服务端渲染不是只用一个简单的模板,然后加上使用

vue-server-renderer
完成的,如下面的示意图所示:

如示意图所示,一般的

Vue
服务端渲染项目,有两个项目入口文件,分别为
entry-client.js
entry-server.js
,一个仅运行在客户端,一个仅运行在服务端,经过
Webpack
打包后,会生成两个
Bundle
,服务端的
Bundle
会用于在服务端使用虚拟
DOM
生成应用程序的“快照”,客户端的
Bundle
会在浏览器执行。

因此,我们需要两个

Webpack
配置,分别命名为
webpack.client.config.js
webpack.server.config.js
,分别用于生成客户端
Bundle
与服务端
Bundle
,分别命名为
vue-ssr-client-manifest.json
vue-ssr-server-bundle.json
,关于如何配置,
Vue