阅读(2813)
赞(10)
百度智能小程序 性能优化还有什么
2020-08-10 16:28:43 更新
骨架屏
为什么要在页面中使用骨架屏
提前加载页面的骨架屏,可以减少用户的白屏等待时长。百度智能小程序提供了骨架屏机制(小程序框架骨架屏比业务中创建的骨架屏加载时机更靠前,推荐使用小程序提供的框架骨架屏),使用这一机制,可以给用户带来更好的用户体验。下面将介绍如何使用骨架屏这一机制。
未使用骨架屏用户体验
使用骨架屏用户体验
骨架屏优化方案示例
- 在工程项目根目录新建 skeleton 文件夹( skeleton 为指定命名,不可修改;page 文件夹中的文件名可自定义),目录如下所示:
skeleton |--- page | |--- index.tpl // 骨架屏模板代码文件 | |--- list.tpl // 骨架屏模板代码文件 |--- config.json // page和骨架屏的映射关系文件
- 使用标准 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>
- 配置 config.json 文件,页面和骨架屏可以是多对一的映射关系,可配置多个页面对应同一个骨架屏模板,也可以为每个页面配置一个骨架屏模板。
代码示例{ "pages/home/index": "skeleton/page/index", "pages/list/index": "skeleton/page/index" }
- 在首屏页面渲染完毕后,调用 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 及以上。