codecamp

百度智能小程序 性能优化还有什么

骨架屏

为什么要在页面中使用骨架屏

提前加载页面的骨架屏,可以减少用户的白屏等待时长。百度智能小程序提供了骨架屏机制(小程序框架骨架屏比业务中创建的骨架屏加载时机更靠前,推荐使用小程序提供的框架骨架屏),使用这一机制,可以给用户带来更好的用户体验。下面将介绍如何使用骨架屏这一机制。

未使用骨架屏用户体验

使用骨架屏用户体验

骨架屏优化方案示例

  1. 在工程项目根目录新建 skeleton 文件夹( skeleton 为指定命名,不可修改;page 文件夹中的文件名可自定义),目录如下所示:
      skeleton
      |--- page
      |    |--- index.tpl  // 骨架屏模板代码文件
      |    |--- list.tpl  // 骨架屏模板代码文件
      |--- config.json  // page和骨架屏的映射关系文件
  2. 使用标准 HTML 与 CSS,编写骨架屏模板文件。如 index.tpl 骨架屏代码如下图:代码示例
    <div class="home-holder">
        <div class="home-holder-content">
            <div class="home-holder-content-header">
                <div class="jz-holder-imgContent-img"></div>
                <div class="home-holder-content-header-des jz-holder-imgContent-des c-gap-left-small">
                    <div class="home-holder-content-header-des-one jz-holder-des-item"></div>
                    <div class="home-holder-content-header-des-two jz-holder-des-item c-gap-top-large"></div>
                    <div class="jz-holder-slider"></div>
                </div>
            </div>
            <div class="home-holder-content-body jz-holder-block-content"></div>
        </div>
    </div>
    <style>
    .home-holder {
        padding: 0 17px;
        background-color: #fff;
    }
    .home-holder-content-header {
         margin-top: 40px;
    }
    .home-holder-content-header-des-two {
        width: 75%;
    }
    .home-holder-content-body {
        margin-top: 40px;
        margin-bottom: 40px;
    }
    .jz-holder-imgContent-img,
    .jz-holder-des-item {
        background-color: #F4F2F2;
    }
    .jz-holder-imgContent-des {
        display: inline-block;
        vertical-align: middle;
        width: 75%;
    }
    .c-gap-left-small {
        margin-left: 5px;
    }
    .c-gap-top-large {
        margin-top: .15rem;
    }
    .jz-holder-block-content {
        width: 100%;
        height: 214px;
    }
    .jz-holder-slider {
        position: absolute;
        top: 0;
        left: 0%;
        opacity: 0.4;
        width: 104px;
        height: 100%;
        background: -webkit-linear-gradient(left, #F4F2F2, #FFF 50%, #F4F2F2); /* Safari 5.1 - 6.0 */
        background: -o-linear-gradient(right, #F4F2F2, #FFF 50%, #F4F2F2); /* Opera 11.1 - 12.0 */
        background: -moz-linear-gradient(right, #F4F2F2, #FFF 50%, #F4F2F2); /* Firefox 3.6 - 15 */
        background: linear-gradient(to right,#fff, #FFF 50%, #fff); /* 标准的语法(必须放在最后) */
        animation: slide 1.5s infinite;
        -webkit-animation: slide 1.5s infinite;
    }
    @-webkit-keyframes slide {
        0% {
            left: -141px;
            top: 0;
        }
        100% {
            left: 100%;
            top: 0;
        }
    }
    @keyframes slide {
        0% {
            left: -141px;
            top: 0;
        }
        100% {
            left: 100%;
            top: 0;
        }
    }
    </style>
    
  3. 配置 config.json 文件,页面和骨架屏可以是多对一的映射关系,可配置多个页面对应同一个骨架屏模板,也可以为每个页面配置一个骨架屏模板。
    代码示例
    {
        "pages/home/index": "skeleton/page/index",
        "pages/list/index": "skeleton/page/index"
    }
    
  4. 在首屏页面渲染完毕后,调用 this.removeSkeleton() 方法移除骨架屏。在调用 removeSkeleton 方法的时候,需要有兼容逻辑( this.removeSkeleton && this.removeSkeleton() )。代码示例
    {
       onLoad() {
           // 请求首屏数据,并渲染首屏
           getData().then(() => {
               this.setData({
                   pageModule
               }, () => {
                   this.removeSkeleton && this.removeSkeleton();
               });
           });
       }
    }
    

Bug&Tip:

1. 开发者工具需要 2.15 及其上版本,基础库需要 3.70.53 及其以上版本;
2. 若无法预览或打开 tpl 文件,请升级开发者工具至 3.3.0 及以上。


百度智能小程序 如何优化渲染层速度
百度智能小程序 客户端性能分析工具
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

百度智能小程序开发文档

百度智能小程序 组件

百度智能小程序 地图

百度智能小程序 画布

百度智能小程序 API

百度智能小程序 界面

百度智能小程序 关注小程序引导组件

百度智能小程序 自定义组件

百度智能小程序 媒体

百度智能小程序 设备

百度智能小程序 拨打电话

百度智能小程序 内存警报

百度智能小程序 手机联系人

百度智能小程序 用户截屏事件

百度智能小程序 第三方平台

百度智能小程序 开放接口

百度智能小程序 百度收银支付

百度智能小程序 分包预下载

百度智能小程序 数据分析

百度智能小程序 服务端

百度智能小程序 云开发

百度智能小程序 初始化

百度智能小程序 云函数

百度智能小程序 服务端初始化

百度智能小程序 服务器获取上下文

百度智能小程序 服务端云函数

百度智能小程序 开发教程

百度智能小程序 功能开发

百度智能小程序 基本原理

百度智能小程序 小程序自动化

百度智能小程序 视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }