骨架屏
主要有几种实现方式:
- 使用图片、svg 或者手动编写骨架屏代码,简单理解就是手动给模块组件增加 loading
- 通过预渲染手动书写的代码生成相应的骨架屏。该方案做的比较成熟的是
vue-skeleton-webpack-plugin
,通过 vueSSR 结合 webpack 在构建时渲染写好的 vue 骨架屏组件,将预渲染生成的 dom 节点和相关样式插入到最终输出的 html 中 - 借助
page-skeleton-webpack-plugin
在构建阶段生成骨架屏代码- webpack 构建阶段,通过无头浏览器
puppeteer
模拟打开网页,等待页面渲染完后注入提取骨架屏的脚本 - 对页面中元素进行删减或增添,对已有元素通过层叠样式进行覆盖,这样达到在不改变页面布局下,隐藏图片和文字,使得其展示为灰色块
- 以 base64 图片或"HTML+样式 style 代码"两种形式进行输出
- webpack 构建阶段,通过无头浏览器
第一种是比较麻烦,第二种的话需要维护额外的 SSR 服务,第三个方法则存在骨架和真实网页可能不符合的风险,不过比较小,也可以通过一些样式细节的调整来解决。一般建议可以用第三种方法