基础库 2.11.1 开始支持,低版本需做兼容处理。
小程序页面的初始化分为两个部分。
在启动页面时,尤其是小程序冷启动、进入第一个页面时,逻辑层初始化的时间较长。在页面初始化过程中,用户将看到小程序的标准载入画面(冷启动时)或可能看到轻微的白屏现象(页面跳转过程中)。
启用初始渲染缓存,可以使视图层不需要等待逻辑层初始化完毕,而直接提前将页面初始 data 的渲染结果展示给用户,这可以使得页面对用户可见的时间大大提前。它的工作原理如下:
利用初始渲染缓存,可以:
在初始渲染缓存阶段中,复杂组件不能被展示或不能响应交互。
目前支持的内置组件:
自定义组件本身可以被展示(但它们里面用到的内置组件也遵循上述限制)。
若想启用初始渲染缓存,最简单的方法是在页面的 json 文件中添加配置项 "initialRenderingCache": "static" :
{
"initialRenderingCache": "static"
}
如果想要对所有页面启用,可以在 app.json 的 window 配置段中添加这个配置:
{
"window": {
"initialRenderingCache": "static"
}
}
添加这个配置项之后,在手机中预览小程序首页,然后杀死小程序再次进入,就会通过初始渲染缓存来渲染首页。
注意:这种情况下,初始渲染缓存记录的是页面 data 应用在页面 WXML 上的结果,不包含任何 setData 的结果。
例如,如果想要在页面中展示出“正在加载”几个字,这几个字受到 loading 数据字段控制:
<view wx:if="{{loading}}">正在加载</view>
这种情况下, loading 应当在 data 中指定为 true ,如:
// 正确的做法
Page({
data: {
loading: true
}
})
而不能通过 setData 将 loading 置为 true :
// 错误的做法!不要这么做!
Page({
data: {},
onLoad: function() {
this.setData({
loading: true
})
}
})
换而言之,这种做法只包含页面 data 的渲染结果,即页面的纯静态成分。
有些场景中,只是页面 data 的渲染结果会比较局限。有时会想要额外展示一些可变的内容,如展示的广告图片 URL 等。
这种情况下可以使用“动态”初始渲染缓存的方式。首先,配置 "initialRenderingCache": "dynamic" :
{
"initialRenderingCache": "dynamic"
}
此时,初始渲染缓存不会被自动启用,还需要在页面中调用 this.setInitialRenderingCache(dynamicData) 才能启用。其中, dynamicData 是一组数据,与 data 一起参与页面 WXML 渲染。
Page({
data: {
loading: true
},
onReady: function() {
this.setInitialRenderingCache({
loadingHint: "正在加载" // 这一部分数据将被应用于界面上,相当于在初始 data 基础上额外进行一次 setData
})
}
})
<view wx:if="{{loading}}">{{loadingHint}}</view>
从原理上说,在动态生成初始渲染缓存的方式下,页面会在后台使用动态数据重新渲染一次,因而开销相对较大。因而要尽量避免频繁调用 this.setInitialRenderingCache ,如果在一个页面内多次调用,仅最后一次调用生效。
注意:
14.1.1. EXPLAIN基础14.1.2. EXPLAIN ANALYZE14.1.3. 警告 PostgreSQL为每个收到查询产生一个查询计划。 选择正确的计划来匹配查...
SPI_execute_plan_with_paramlist — 执行一个由SPI_prepare预备好的语句大纲int SPI_execute_plan_with_paramlist(SPIPlanPtr p...
SPI_freetuple — 释放一个在上层执行器上下文中分配的行大纲void SPI_freetuple(HeapTuple row)描述 SPI_freetuple释放之前在上...
pg_replication_slots视图和pg_stat_replication视图分别提供了有关复制槽和流复制连接的当前状态的信息。这些视图适用于物理和...
ALTER AGGREGATE — 更改一个聚集函数的定义大纲ALTER AGGREGATE name ( aggregate_signature ) RENAME TO new_nameALTER AGGREG...
ALTER EVENT TRIGGER — 更改一个事件触发器的定义大纲ALTER EVENT TRIGGER name DISABLEALTER EVENT TRIGGER name ENABLE [ REP...
ALTER OPERATOR — 更改一个操作符的定义 大纲ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } )OWNER TO ...
ALTER USER MAPPING — 更改一个用户映射的定义大纲ALTER USER MAPPING FOR { user_name | USER | CURRENT_USER | SESSION_USER ...
XML DOM 节点类型 DOM 是一个代表节点对象层次的文档。XML 文档对象模型(DOM)具有多种节点类型。 尝试一下 - 实例下面的实例使...