• pageskeleton骨架屏的实现


    什么是骨架屏

    骨架屏指的是当你打开一个 web 页面,在页面解析和数据加载之前,首先展示给用户大概的样式。

    为什么需要骨架屏

    • Google Research 的研究显示,53% 的用户在等待加载 3s 后,选择关闭 Web 页面或应用,导致用户流失。
    • 当下前端框架,基本都是js 驱动型的,也就是说在JS 代码解析完成之前,页面是不会展示任何内容,即所谓的白屏。
    • 用户体验、用户感知会更友好。

    现有市面上的方案

    • 手写骨架屏 手动html+css样式占位

    缺点: 跟不上UI改变与需求更迭,属于机械化劳动方式。

    • 内容直出 服务端渲染(ssr) 或者 vue 预渲染

    缺点: 内容直出,需要服务端支持,涉及到服务构建、部署、缓存等,成本与风险加大。

    • 结合当前项目,与各方优缺点,这里采用page-skeleton-webpack-plugin(element 自动生成骨架屏插件),进行尝试。

    优点:对现有页面、构建工具侵入性最小。
    缺点:生成会有差异,需人工校验,且打包有一定的样式内容体积。

    page-skeleton-webpack-plugin 插件的基本思路

    通过 puppeteer 打开开发中的需要生成骨架屏的页面,在等待页面加载渲染完成之后, 在保留页面布局样式的前提下,通过对页面中元素进行删减或增添,对已有元素通过层叠样式进行覆盖,这样达到在不改变页面布局下, 隐藏图片和文字,通过样式覆盖,使得其展示为灰色块。最后将修改后的 HTML 和 CSS 样式提取出来,这样就是骨架屏了。
    主要步骤思路如下:

    演示&体验流程:

    • 1、更新leka 命令 - 引入page-skeleton 插件 & 替换<--shell -->插件
    • 2、安装依赖,(有puppteer 需用cnpm)
    • 3、跑leka serve 模式,进行骨架屏生成(评估好是否合适用骨架屏)
    • 4、本地prod打包, (web_leka是新乐效,就上传shell 目录文件内容,然后打包进去)

    骨架时序图

    修改部分说明

    • 修复一些page-skeleton-webpack-plugin插件问题,详见 Demo 踩坑
    • 优化预览二维码,实现实时修改样式,二维码实时更新
    • 手机扫一扫预览,加入适配flexible.js,保证看到的样式更真实
    • 调整priview 预览,把原1280宽度改成375手机宽度

    原1280宽度,容易误认为框内就是手机的全部: 

    结合当前,需修改项

    • 实际上线后,骨架屏会看到初始样式,然后才是适配后的样式, todo。
    • 迁移到web_leka工程todo。
    • weex 骨架是否可以生成?
    • 调整、优化生成的dom, 如head块,app里是不需要的。

    融入项目遇到

    • Jenkins 读取指定目录地址无反斜线处理,导致读取失败。
    const os = require('os')
    os.type() // Linux Windows_NT Darwin
    
    • 安装依赖过程耗时长,Jenkins 一直失败
    1、依赖放dependencies。
    2、npm config set puppeteer_download_host=https://npm.taobao.org/mirrors 保证安装成功
    

    3-10 年内部岗位涉及前后端、PM(虾皮内推、乐信内推、vivo、oppo)推荐机会,欢迎联系,wx号: X915324 ; 也可发简历到: zgxie@126.com

    详情请看 element 自动生成骨架屏, 这里是clone page-skeleton-webpack-plugin插件进行的。

  • 相关阅读:
    nuxt.js 学习与记录
    图片上传预览 接收
    k8s之deployment
    k8s之service
    k8s的一些命令
    ansible 学习
    k8s之ConfigMap && secret
    k8s 之Job/CronJob
    k8s之PV & PVC
    配置ssh免密登录
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/15469964.html
Copyright © 2020-2023  润新知