放肆青春的博客
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)

放肆青春

一个前端菜鸟的技术成长之路
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)
  • 前端

    • 前端 概览
    • 前端汇总

    • front 博文

    • front 项目总结

    • front 高级

      • 前端优化
      • 前端工程化
      • 前端模块化
      • 前端监控
      • 数据可视化
      • 前端自动化测试
      • 前端安全
      • 微前端
      • 骨架屏
        • 骨架屏
          • 骨架屏方案
      • 预渲染
      • 服务器端渲染
      • 浏览器渲染
    • front tools

  • vue

    • vue 概览
    • vue 汇总

    • vue 博文

    • vue 项目总结

    • vue 高级

  • html

    • html 概览
    • html 汇总

    • html 博文

  • css

    • css 概览
    • css 汇总

    • css 博文

    • sass

    • less

  • js

    • javascript 概览
    • JS 汇总

    • ES6

    • JS 博文

    • JS 工具

  • node

    • node 概览
    • node 汇总

    • node 框架

    • node 博文

  • react

    • react 概览
    • react 汇总

    • react 博文

    • react 高级

  • 微信小程序

    • 微信小程序 概览
    • 微信小程序总结
    • 微信小程序文章
    • 微信小程序 博文

    • 微信小程序 高级

  • 微信公众号

    • 微信公众号 概览
    • 微信公众号总结
    • 微信公众号文章
  • 多端开发

    • 多端开发
    • dsbridge 概览
    • jsbridge 概览
    • webview
    • uniapp

      • uniapp 概览
    • taro

      • taro 概览
    • flutter

      • flutter 概览
      • flutter 环境搭建
    • electron

      • electron 概览
  • front
放肆青春
2021-04-07

骨架屏

# 骨架屏

骨架屏(Skeleton Screen)是指在页面数据加载完成前,先给用户展示出页面的大致结构(灰色占位图)

# 骨架屏方案

(1) 手动书写骨架

  1. 使用图片、svg 或者手动编写骨架屏代码

使用 HTML + CSS 的方式,我们可以很快的完成骨架屏效果,但是面对视觉设计的改版以及需求的更迭,我们对骨架屏的跟进修改会非常被动,这种机械化重复劳作的方式此时未免显得有些机动性不足

(2)自动生成骨架

  1. 通过预渲染手动书写的代码生成相应的骨架屏

vue-skeleton-webpack-plugin,通过 vueSSR 结合 webpack 在构建时渲染写好的 vue 骨架屏组件,将预渲染生成的 DOM 节点和相关样式插入到最终输出的 html 中。

  1. 饿了么内部的生成骨架页面的工具(已不维护)

该方案通过一个 webpack 插件 page-skeleton-webpack-plugin 的方式与项目开发无缝集成,属于在自动生成骨架屏方面做的非常强大的了,并且可以启动 UI 界面专门调整骨架屏,但是在面对复杂的页面也会有不尽如人意的地方,而且生成的骨架屏节点是基于页面本身的结构和 CSS,存在嵌套比较深的情况,体积不会太小,并且只支持 history 模式。

实现原理:通过 puppeteer 在服务端操控 headless Chrome 打开开发中的需要生成骨架页面的页面,在等待页面加载渲染完成之后,在保留页面布局样式的前提下,通过对页面中元素进行删减或增添,对已有元素通过层叠样式进行覆盖,这样达到在不改变页面布局下,隐藏图片、文字和图片的展现,通过样式覆盖,使得其展示为灰色块。并且将修改后的 HTML 和 CSS 样式提取出来,通过 webpack 插件的形式注入最后生成的 html 中,并且还可以启动 UI 界面专门调整骨架屏代码。

缺点:

(1)由于生成的骨架屏节点是基于页面本身的结构和样式,在某些嵌套比较深的页面,骨架屏代码体积不会很小,并且对于多路由的页面,生成的代码就更加庞大了

(2)无法选择生成骨架屏的时机。当页面存在着重定向(H5 需要鉴权)的时候,生成的骨架屏和预期相差比较大

(3)某些依赖浏览器 jsbridge 接口的页面,工具无法使用

(4)只支持 history 路由

  1. 京东 dps

结合 Puppeteer 自动生成骨架屏;

实现原理:通过 puppeteer 在服务端操控 headless Chrome 打开开发中的需要生成骨架页面的页面,在等待页面加载渲染完成之后, 执行遍历 dom 树的脚本代码,通过单纯的 DOM 操作,挑选目标节点,生成骨架屏 html 和 css 代码

简单概括原理:遍历页面上的节点,根据制定的规则生成相应区域的颜色块,最终形成页面的骨架屏;

缺点:

(1)无法选择生成骨架屏的时机。当页面存在着重定向(H5 需要鉴权)的时候,生成的骨架屏和预期相差比较大

(2)内部实现并不完善,某些元素比如伪元素等无法生成骨架屏

(3)某些依赖浏览器 jsbridge 接口的页面,工具无法使用


参考:骨架屏自动化?看这篇就够了 (opens new window)

更新时间: 1/13/2022, 8:38:24 PM
微前端
预渲染

← 微前端 预渲染→

最近更新
01
前端权限管理
02-24
02
vue2指令
02-24
03
vue2 hook
02-24
更多文章>
Theme by Vdoing | Copyright © 2019-2022 放肆青春
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式