前端渲染方式
单页面应用
只要一个web页面的应用,单页面跳转仅刷新局部资源,公共资源(css、js)仅需加载一次。
如图:
多页面应用
多页面应用跳转需刷新所有资源,每个公共资源需选择性重新加载。
具体分析对比:
单页面应用 | 多页面应用 | |
---|---|---|
组成 | 一个外壳页面和多个页面片段组成 | 多个完整页面组成 |
资源共用(css、js) | 资源共用,只需在外壳页面加载 | 不共用,每个页面都需要加载 |
刷新方式 | 页面局部刷新或更改 | 整页刷新 |
url模式 | a.com/#/pageone a.com/#/pagetwo |
a.com/pageone.html a.com/pagetwo.html |
用户体验 | 页面切换速度快,用户体验好 | 页面切换加载缓慢,流畅度不够,用户体验比较差 |
单页面应用就是只有一个主页面的应用,浏览器需要一开始就加载所有必须的html,css,js。所有的页面内容都包含在这个主页面中,但在写的时候还是分开写页面片段,然后在交互的时候由路由动态载入,单页面的页面跳转,仅刷新局部资源。
多页面(MPA),就是指一个应用中有多个页面,页面跳转时是整页刷新
客户端渲染
用户访问url,请求html文件,前端根据路由动态渲染页面内容,关键链路较长,有一定的白屏时间
服务端渲染
用户访问url,服务端根据访问路径请求所需数据,拼接成html字符串,返回给前端,前端接收到html已有部分内容
预渲染
构建阶段生成匹配预渲染路径的html文件(每个需要预渲染的路由都有一个对应的 html),构建处理的html已有部分内容
服务端渲染:发送请求-服务器请求数据渲染html-包含首屏的html
预渲染:发送请求-包含首屏的html
客户端渲染:发送请求-html-js加载并动态渲染
prerender-spa-plugin :一个 webpack 插件用于在单页应用中预渲染静态 html 内容
安装插件:
1 | npm install prerender-spa-plugin --save-dev |
配置:
1 | var path = require('path') |
实例化 PrerenderSpaPlugin 需要至少两个参数,第一个参数是单页应用的输出目录,第二个参数指定预渲染的路由,这里执行了两个路由 /new 和 /hot
npm run build构建后:
1 | dist |
预渲染的目录多了两个文件 new/index.html, hot/index.html
prerender-spa-plugin 原理:
在 webpack 构建阶段的最后,在本地启动一个 phantomjs,访问配置了预渲染的路由,再将 phantomjs 中渲染的页面输出到 html 文件中,并建立路由对应的目录。