滚动容器及其应用场景

流畅的滚动对于提升用户体验至关重要。为了达到原生级别的滚动效果和降低开发成本,Skyline 扩展了旧的 ScrollView 组件,同时针对部分场景,新增了一些滚动容器。诸多的新能力有时会让开发者选择困难,下面对其典型应用场景进行介绍。

长列表

WebView 下的 ScrollView 组件,在快速滑动时容易出现白屏和渲染卡顿。对于长列表的优化,通常离不开按需渲染,即理想状态下仅渲染在屏节点,超出可视区域的节点及时进行回收。

Skyline 下内置了按需渲染的能力,但对于写法有一定要求,列表项需作为直接子节点,形如下面的结构。

<scroll-view type="list" scroll-y>
  <view> a </view>
  <view> b </view>
  <view> c </view>
</scroll-view>

视口大小

ScrollView 的视口大小 = ScrollView 的高度 + 指定的上下缓冲区 CacheExtent

指定 CacheExtent 可优化滚动体验和加载速度,但会提高内存占用且影响首屏速度,可按需启用。

节点进入视口区域时开始渲染,离开视口时回收资源。资源回收的粒度为其直接子节点。当 ScrollView 仅有单个子节点时,为保证其渲染,所有的资源都无法回收,需全量布局和绘制所有内容,性能较差,因此才需要摊平子节点。

出于业务需要 ScrollView 的内容常被封装成组件,导致无法作为直接子节点。这里有一个小技巧,可将封装的组件设为虚拟的,开启 virtualHost: true。真正渲染时,virtual-comp 节点并不存在,列表项仍是摊平的。

<scroll-view type="list" scroll-y>
  <virtual-comp>
    <view> a </view>
    <view> b </view>
    <view> c </view>
  </virtual-comp>
</scroll-view>

完全的按需渲染

微信小程序内的按需渲染分为两个阶段。

  1. 列表项按需创建其 DOM 节点
  2. 列表项按需绘制上屏;

ScrollViewlist 模式实现了按需绘制,但列表项的 DOM 节点 仍是全量创建的。随着节点数增多,会带来内存压力。

为此框架提供了新的 builder 模式,可使用 list-buildergrid-builder 等组件实现 DOM 节点 的按需创建。

上图是 builder 模式在开发者工具中 wxml 的渲染结果,仅在屏列表项会被真正创建节点,离屏后列表项会被回收,滚动时始终几个子节点。

示例代码片段

在开发者工具中预览效果

ScrollView 的三种模式

ScrollView 提供了列表 list、自定义 custom 和 嵌套 nested 三种渲染模式,实际开发时如何选择呢?

列表模式

默认模式,实现了内置的按需渲染能力,但没有进行节点回收。当列表项比较简单,不会带来明显的内存压力时使用。

非长列表时,即使不摊平列表项也不会有明显性能问题,可使用单子节点写法。

<!-- 单子节点写法,全量绘制 -->
<scroll-view type="list" scroll-y>
  <view>
    <view> a </view>
    <view> b </view>
    <view> c </view>
  </view>
</scroll-view>

<!-- 列表项作为直接子节点,有按需绘制优化 -->
<scroll-view type="list" scroll-y>
  <view> a </view>
  <view> b </view>
  <view> c </view>
</scroll-view>

<!-- 列表项作为 list-view 直接子节点,有按需绘制优化,同上 -->
<scroll-view type="custom" scroll-y>
  <list-view>
    <view> a </view>
    <view> b </view>
    <view> c </view>
  </list-view>
</scroll-view>

自定义模式

列表滚动时常会和特殊布局能力结合使用,如滚动到顶部时自动吸顶 sticky 效果,或瀑布流布局。

Skyline 内置了这部分能力,可直接使用 sticky-headergrid-view 组件实现。

list-view 组件的效果跟列表模式是等价的,如果不需要这些特殊布局能力,可任意选择写法。

需要注意的是自定义模式下,ScrollView 直接子节点本身并没有按需绘制优化,按需绘制的能力是 list-view 组件实现的,custom 模式组合了这些能力。

<scroll-view type="custom" scroll-y>
  <sticky-section>
    <sticky-header>
      <view> h </view>
    </sticky-header>

    <!-- 非 list-view 子节点,无按需绘制优化 -->
    <view> 1</view>
    <view> 2 </view>

    <!-- 列表项作为 list-view 直接子节点,有按需绘制优化 -->
    <list-view>
      <view> a </view>
      <view> b </view>
      <view> c </view>
    </list-view>
  </sticky-section>
</scroll-view>

<scroll-view type="custom" scroll-y>
  <sticky-section>
    <sticky-header>
      <view> h </view>
    </sticky-header>

    <!-- 列表项作为 grid-view 直接子节点,有按需绘制优化 -->
    <<grid-view type="masonry">
      <view> a </view>
      <view> b </view>
      <view> c </view>
    </<grid-view>
  </sticky-section>
</scroll-view>

示例代码片段

在开发者工具中预览效果

嵌套模式

这主要是针对一类嵌套滚动场景。如下图所示,SwiperItem 内也有纵向滚动的 ScrollView 组件,当在内部 ScrollView 上滑动时,会与外层 ScrollView 产生手势冲突,导致外层的页面始终无法滚动。

  • 纵轴+横轴+纵轴的嵌套组合
  • 同一方向的滚动容器存在手势冲突
  • 可使用手势协商解决,但过程较为烦琐

为使得内外的滚动衔接更为流畅,框架新增了 <nested-scroll-headernested-scroll-body 组件结合嵌套模式使用,省去了开发者解决手势的麻烦。

<scroll-view type="nested" scroll-y>
  <nested-scroll-header>
    <view></view>
  </nested-scroll-header>
  <nested-scroll-body>
    <swiper>
      <swiper-item>
        <scroll-view 
          type="list"
          associative-container="nested-scroll-view"
        >
          <view>a</view>
          <view>b</view>
        </scroll-view>
      </swiper-item>
      <swiper-item>...</swiper-item>
      <swiper-item>...</swiper-item>
    </swiper>
  </nested-scroll-body>
</scroll-view>

示例代码片段

在开发者工具中预览效果

可拖拽容器

页面内的半屏可拖拽容器是很常见的一种交互,用户可通过滚动扩大列表范围。以往开发者可通过手势协商的能力来实现,但较为繁琐。

框架提供了 draggable-sheet 组件,封装了这一能力,包括

  • 隐藏滚动条
  • 滚动回弹效果
  • 滚动到指定位置(snap 到关键点)
  • 滚动帧回调(实现滚动驱动动画)
<draggable-sheet
  class="sheet"
  initial-child-size="0.5"
  min-child-size="0.2"
  max-child-size="0.8"
  snap="{{true}}"
  snap-sizes="{{[0.4, 0.6]}}"
  worklet:onsizeupdate="onSizeUpdate"
>
  <scroll-view
    scroll-y="{{true}}"
    type="list"
    associative-container="draggable-sheet"
    bounces="{{true}}"
  />
</draggable-sheet>

在真机上预览效果

环境准备

Skyline 具体支持版本如下:

  • 微信安卓客户端 8.0.40 或以上版本(对应基础库为 3.0.2 或以上版本)
  • 微信 iOS 客户端 8.0.40 或以上版本(对应基础库为 3.0.2 或以上版本)
  • 微信 OHOS 客户端 1.0.10 或以上版本(对应基础库为 3.11.3 或以上版本)
  • 开发者工具 Stable 1.06.2307260 或以上版本(建议使用 Nightly 最新版)

扫码快速确认环境是否正确

使用开发者工具调试

开发者工具提供了对齐移动端的 Skyline 渲染引擎,支持 WXML 调试、 WXSS 样式错误提示、新增的特性等

按以下步骤切换到 Skyline 模式:

  1. 在 app.json 或 page.json 中配上 renderer: skyline,并按下一节添加好配置项,或者按开发者工具的提示逐个加上配置项
  2. 确保右上角 > 详情 > 本地设置里的 开启 Skyline 渲染调试 选项被勾选上
  3. 使用 worklet 动画特性时,确保右上角 > 详情 > 本地设置里的 编译 worklet 代码 选项被勾选上 (代码包体积会少量增加)
  4. 调试基础库切到 3.0.0 或以上版本

若切换期间出现报错、白屏等问题,可尝试重启开发者工具解决

已知问题:热重载暂未支持

此时,在模拟器左上角能够看到当前的 renderer 为 skyline,见下图

开始迁移

迁移到 Skyline,无需大动干弋,我们保持了上层框架的语法、接口基本不变,只需要做局部的调整,主要是加强了 WXSS 样式、内置组件及部分特性的约束,基本流程如下:

  1. app.json 加上如下必要配置项,若只想在某些页面开启,可将 renderer componentFramework 配置在页面 json 中
"lazyCodeLoading": "requiredComponents",
"renderer": "skyline",
"componentFramework": "glass-easel",
"rendererOptions": {
  "skyline": {
    "defaultDisplayBlock": true,
    "defaultContentBox": true,
    "tagNameStyleIsolation": "legacy",
    "enableScrollViewAutoSize": true,
    "keyframeStyleIsolation": "legacy"
  }
}
  1. 进行组件与 WXSS 适配,参考 Skyline 基础组件支持与差异、Skyline WXSS 样式支持与差异

参考代码模板

按照指引适配后,可以保证在微信低版本或 PC 端 fallback 到 WebView 渲染时,也能表现正确

更多详细指引参考 最佳实践 和 兼容建议

由于 Skyline 默认接入 We 分析的 AB 实验,未配置的情况下,页面渲染仍为 WebView 引擎,可通过以下方式正确切到 Skyline 渲染

  1. 配置 We 分析 AB 实验,加上白名单,操作步骤详见下节
  2. 关闭 We 分析 AB 实验,默认启用 Skyline 渲染,配置方式详见此处第 2 点
  3. 通过快捷切换入口,强切到 Skyline 渲染,操作步骤详见下节

配置 We 分析 AB 实验

迁移完 Skyline 之后,为了让开发者能够针对 Skyline 逐步灰度放量,并且与 WebView 对比性能表现,我们在 We 分析 提供了 AB 实验机制。

因此,需要在 We 分析 配置之后,微信小程序用户才可以命中 Skyline 渲染,需要注意的是,微信小程序开发者也会受 AB 实验影响。操作步骤如下:

首先,进入 We 分析,在 AB 实验 > 实验看板,点击“新建实验”

接着,实验类型选择 微信小程序基础库实验,然后按需选择实验层级并分配流量,如果是小范围调试,可分配 0% 流量,并在 Skyline 渲染 的实验分组里填上测试微信号

最后,创建实验即可生效。后续经 AB 实验验证稳定后,需在 We 分析上先关闭实验再选择 Skyline 全量

点击查看更多 We 分析 AB 实验相关内容

快捷切换入口

考虑到本地调试时,配置 AB 实验会稍微繁琐一些,并且也会需要对比 WebView 的表现,我们提供了快捷切换渲染引擎的入口。

该入口只对开发版/体验版微信小程序生效,入口为:微信小程序菜单 > 开发调试 > Switch Render,会出现三个选项,说明如下:

  • Auto :跟随 AB 实验,即对齐微信小程序正式用户的表现
  • WebView :强制切为 WebView 渲染。强切后,开发版、体验版、正式版均为 WebView 渲染,需手动切到 Auto 才能恢复
  • Skyline :若当前页面已迁移到 Skyline,则强制切为 Skyline 渲染。强切后,开发版、体验版、正式版均为 Skyline 渲染,需手动切到 Auto 才能恢复

如何识别当前页面是否使用 Skyline

  • 通过客户端菜单:

    打开开发版/体验版微信小程序,点击菜单即可查看当前页面是否使用 Skyline 渲染。

  • 通过 vConsole 按钮的右上角的红底文案识别

  • vConsole 的路由日志

    路由日志中会包含页面路由的目标页面、路由类型和目标页面的渲染后端。

    一个可能的日志形如:On app route: pages/index/index (navigateTo), renderer: skyline,代表通过 navigateTo 跳转到了 pages/index/index,渲染后端为 skyline

  • 通过接口判断

    页面和自定义组件示例上有属性 renderer,可以用于判断当前组件的实际渲染后端,如:

    Page({
      onLoad() {
        console.log(this.renderer)
      }
    })
    

最佳实践

按需注入

Skyline 依赖 按需注入 特性。按需注入特性开启后,微信小程序的部分表现会发生变化,有可能带来兼容问题(具体见按需注入特性文档);因此建议在开始适配 Skyline 前,先开启按需注入并妥善测试,以提前排除该特性带来的影响。

渐进式迁移

对于已有的项目,建议渐进式迁移,即逐个页面打开,推荐迁移使用该微信小程序的关键路径上的页面,以便让大多数用户获得更好的体验;对于新增页面,建议默认开启 Skyline;而对于全新项目,建议直接全局打开,除了有更好的体验外,也能使微信小程序的内存占用更低

使用局部滚动

在 WebView 下,页面全局默认是可以滚动的,因此大多数开发者会直接使用全局的滚动,这使得

  1. 无需滚动的元素使用 position: fixed 固定位置,如自定义导航栏,这是用全局滚动模拟了局部滚动,此时滚动条的显示位置会溢出
  2. 针对滚动的自定义功能只能通过配置或 API 的方式提供,如 Page.onPageScroll 等,也使得部分特性无法实现

因此,Skyline 不再提供全局滚动,在需要滚动的区域使用 scroll-view 实现,后续我们也能针对 scroll-view 组件提供更多扩展。

一般来说,界面布局大多数都是导航栏 + 滚动区域的形式,这里提供一种常规做法(兼容 WebView)

<navigation-bar></navigation-bar>
<!-- 通过使用 flex 布局,将 scroll-view 设置 flex:1 以占据页面剩余空间 -->
<scroll-view type="list" scroll-y style="display: flex; flex-direction: column; flex: 1; width: 100%; overflow: auto;">
  <view wx:for="{{items}}" list-item></view>
</scroll-view>

全局样式重置

Skyline 支持的 WXSS 是 WebView 的子集,未来可能会再支持一些必要的或常用的特性,但还是会一直保持 WebView 子集的状态。

因此,为了让 WebView 的兼容表现尽量对齐 Skyline,同时减少重复设置的代码,建议全启开启下述配置项:

rendererOptions: {
  "skyline": {
    "defaultDisplayBlock": true,
    "defaultContentBox": true,
    "tagNameStyleIsolation": "legacy",
    "enableScrollViewAutoSize": true,
  }
}

同时考虑全局或页面级应用如下 WXSS Reset:

page,
view,
text,
image,
button,
video,
map,
scroll-view,
swiper,
input,
textarea,
navigator {
  position: relative;
  background-origin: border-box;
  isolation: isolate;
}
page {
  height: 100%;
}

优化长列表性能

Skyline 下的 scroll-view 组件自带按需渲染的优化,这在很大程度上提升了长列表的渲染性能,这里是以 scroll-view 的直接子节点为粒度来按需渲染的,当其某个子节点接近 scroll-view 的 viewport 时就会被渲染,反之则会回收。

<!-- 以下 scroll-view 的直接子节点有 5 个 view,此时每个 view 都能按需渲染 -->
<scroll-view type="list" scroll-y>
    <view> a </view>
    <view> b </view>
    <view> c </view>
    <view> d </view>
    <view> e </view>
</scroll-view>
<!-- 以下 scroll-view 的直接子节点只有 1 个 view,按需渲染并不能发挥作用 -->
<scroll-view type="list" scroll-y>
    <view>
        <view> a </view>
        <view> b </view>
        <view> c </view>
        <view> d </view>
        <view> e </view>
    </view>
</scroll-view>

此外,长列表的每一项的样式基本是一样的,Skyline 也支持了相似节点的样式共享,使得样式只需要计算一次便能共享给其它相似节点,大大提升了样式计算的性能。一般来说,我们会用 WXML 模板语法 wx:for 来展开列表,因此只需要在列表项声明 list-item 就能启动样式共享(后续版本会识别 wx:for 而自动启用)

<scroll-view type="list" scroll-y>
    <view wx:for="" list-item> {{index}} </view>
</scroll-view>

预加载

微信小程序有个重要优化是会预加载环境,包括 WebView 环境、AppService 线程、提前注入基础库等,而由于目前微信小程序大多还是以 WebView 渲染,为了节省资源,微信客户端并不会自动预加载 Skyline 环境(后续根据实际情况不断优化策略),因此我们提供了 wx.preloadSkylineView 预加载 Skyline 环境的接口,开发者可以在可能跳转到 Skyline 页面的路径上手动调用该接口,建议在 onShow 生命周期里延迟一段时间后调用,使得 Skyline 页面被返回时能够重新预载

使用增强特性

为了使微信小程序的体验能够跟接近原生 App,Skyline 新增了若干个特性,包括 worklet 动画机制、手势系统、自定义路由、共享元素动画等,这些特性使得 Skyline 能够做出一些 WebView 下无法实现或实现效果不够流畅的交互动效。

考虑在 WebView 下都不支持,推荐以一种体验降级的方式去兼容。比如自定义路由,同样是以 wx.navigateTo 接口跳转页面,在 Skyline 下可以以自定义路由动画的方式跳转页面,以获得更好的体验,而 WebView 则 fallback 到朴素的从右到左的页面切换动画,同理,共享元素动画特性亦是如此,也无需额外的兼容代码。

兼容

Skyline 目前各端的支持情况见下表

平台 支持版本 备注
安卓 8.0.33+ 支持
iOS 8.0.34+ 支持
开发者工具 Stable 1.06.2307260+ 支持
Windows 未支持 规划中
Mac 未支持 规划中
企业微信 未支持 开发中

可以看出,微信小程序若不是只跑在最新版本的微信移动端,则需要关注兼容 WebView 的情况,这里我们整理了一些兼容方法及常见的兼容问题

兼容方法

样式兼容

Skyline 与 WebView 的主要差异在于样式支持度,因此大部分兼容工作主要集中在样式适配,这里可以利用开发者工具的 WXML 调试工具,通过定位到有问题的节点,分析对应的样式兼容性。

对于具体样式兼容的策略上,由于 Skyline 中部分样式的默认值与 web 不同,因使用默认值而省略的样式需要显示指定,如 flex-direction: row,但此处更推荐开启默认 Block 布局和默认 ContentBox 盒模型,默认值处理与 web 更接近,其它更多信息,详见 Skyline WXSS 样式支持与差异

根据不同 renderer 兼容

有时,单纯用 WXML 和 WXSS 无法做好兼容时,可以通过 JS 判断是否 Skyline 以使用不同的 WXML 或 WXSS 实现。我们在页面或组件实例增加了 renderer 成员,取值为 webviewskyline,参考以下代码

<view class="position {{renderer}}"></view>
.position {
    position: fixed;
}
.position.skyline {
    position: absolute;
}
Page({
    data: {
        renderer: 'webview'
    },
    onLoad() {
        this.setData({
            renderer: this.renderer,
        })
    },
})

常见的兼容问题

  • Skyline 一定需要应用到整个微信小程序吗?

    不需要,Skyline 支持按页面粒度或分包粒度开启,可渐进式迁移。

  • 开启 Skyline 后布局错乱

    一般是默认 flex 布局及 box-sizing 默认为 border-box 导致,推荐开发者开启默认 Block 布局、默认 ContentBox 盒模型

  • 切换 Skyline后,为什么顶部原生导航栏消失?

    不支持原生导航栏,需自行实现,或使用 weui 组件库。推荐页面配置加上 “navigationStyle”: “custom” 以保持与 WebView 兼容

  • 切换 Skyline 后,为什么 position: absolute 相对坐标不准确?

    在 Skyline 模式下,所有节点默认是 relative,可能导致 absolute 相对坐标不准。建议开发者修改节点 position 或者修改相对坐标。

  • 多段文本无法内联

    因不支持 inline 布局导致,需改成 flex 布局实现,或者使用 text 组件包裹多段文本,而不是用 view 组件包裹,也可以使用 span 组件包裹 text 和 image 混合内联。如 <span><image /></span><span><view style="width: 50px;"/></span>

  • 单行文本的省略样式失效

    text-overflow: ellipse 只在 text 组件上生效,不能应用在 view 组件上,同时需要声明 white-space: nowrap 以及 overflow: hidden,建议直接使用 <text overflow="ellipsis"/>

  • 多行文本的省略样式失效

    在单行文本省略的基础上,通过 text 组件的 max-lines 属性设置最长行数,即 <text max-lines="2"></text>

  • z-index 表现异常

    这是由于 Skyline 不支持 web 标准的层叠上下文所致,只有在同层级的节点之前应用 z-index 才有效,可根据实际情况调整取值

  • weui 扩展库无法使用

    平台正在支持扩展库,预计近期上线。建议开发者使用 npm 安装 weui 组件库 后,将 node_ modules/weui-miniprogram 下的miniprogram_ dist 替换为 链接 中的 miniprogram_dist,然后在微信开发中工具中构建 npm 即可。

  • 不支持组件 animate 动画接口

    暂不支持组件 animate 动画接口。如需实现相关效果,可使用 worklet 动画机制 实现

  • svg 渲染不正确

    Skyline 上的 SVG 不支持 选择器匹配,可自行转成内联的方式;不支持 rgba 格式,可使用 fill-opacity 替代;建议用 SVGO 在线工具优化

  • 自定义组件的样式表现不正确

    • 可留意是否存在跨自定义组件的样式匹配,Skyline 下 tag 和 id 选择器不支持跨自定义组件匹配,而 class 则遵循 组件样式隔离机制,可开启 tag 选择器全局匹配以保持与旧版行为对齐
  • WebView scroll-view 横向滚动不生效

    横向滚动需打开 enable-flex 以兼容 WebView,同时 scroll-view 添加样式 display: flex; flex-direction: row;,scroll-view 子节点添加样式 flex-shrink: 0;

  • 当 scroll-view 包含的内容较多时,为什么 boundingClientRect 无法执行?

    由于 scroll-view 的直接子节点(第一层节点)是按需渲染,即直接子节点不在屏时不会渲染,无法获取到节点尺寸,因此当 boundingClientRect 通过 query.selectAll 获取时,无法立即获取节点尺寸,只有在所有节点渲染才能获取。建议开发者尝试调整为逐个获取节点的 boundingClientRect。

  • 切换 Skyline 后,为什么 map / canvas / video / camera 在微信开发者工具渲染失败?

    在 Skyline 模式下,微信开发者工具暂未支持调试原生组件,建议开发者使用真机预览完成调试。

  • 在 Skyline 模式下,为什么微信开发者工具热重载无响应?

    目前 Skyline 模式暂不支持热重载,建议先关闭热重载,重新编译来预览渲染结果。后续平台将支持热重载能力。

发布上线

在考虑要上线发布到正式环境时,我们一般会关注版本覆盖稳定性问题,对于这两个问题,我们提供了完备的解决方案。

版本覆盖

由于 Skyline 是在微信较高版本支持,那么是否低版本就完全运行不了微信小程序了?答案是否定的。为了保证线上微信小程序能可靠运行,可任取以下其中一种策略

  1. 提高「基础库最低可用版本」,设置为 Skyline 所支持的版本,该策略意味着放弃低版本用户。

  2. 兼容好 WebView,我们会在不支持 Skyline 的版本自动降级为 WebView 渲染

由于 Skyline 所支持的 CSS 子集是遵循 Web 标准的,因此在样式方面切到 WebView 渲染也能正确渲染,此外对于 Skyline 新增的特性,与微信小程序其它新增的接口类似,低版本需做好兼容,但我们在部分特性针对 WebView 做了兼容处理,具体参考以下表格:

特性 WebView 兼容性 低版本兼容性
worklet 动画 已兼容 需自行做好兼容
手势系统 相当于空节点 需自行做好兼容
自定义路由 无需兼容(无动效) 无需兼容(无动效)
共享元素 无需兼容(无动效) 无需兼容(无动效)
scroll-view 按需渲染 无需兼容(无优化) 无需兼容(无优化)
scroll-view 新增属性和事件 不兼容 需自行做好兼容
grid-view 已兼容 需自行做好兼容
sticky-section/header 不兼容(可手动加上 position: sticky 兼容) 不兼容(可手动加上 position: sticky 兼容)

稳定性

一般而言,代码变更后需要上线发布时,为了保证线上的稳定性,我们都会选择灰度发布,对于新增 Skyline 相关代码的情况也不例外,因此我们提供了完备的灰度方案。

  1. 通过 We 分析 AB 实验进行灰度。

Skyline 默认是需要经过 We 分析的 AB 实验的,也就是微信小程序新版本发布后,默认还是以 WebView 运行,需要在 We 分析的 AB 实验的「微信小程序基础库实验」逐步放量。需要特别留意的是,当 AB 实验的流量分配到 100% 时,并不代表是全量,而是 Skyline 和 WebView 各 50%,若要全量的话,需要先结束实验再选择全量某一个实验组。

  1. 通过微信小程序版本管理中的发布灰度。

微信小程序已经过充分测试,无需再进行 AB 实验的话,我们也提供了以下配置项,可在 app.json 或 page.json 配置上,使 Skyline 不经 AB 实验而默认打开。一般来说,sdkVersioniosVersion+androidVersion 选其一填写即可。

"rendererOptions": {
  "skyline": {
    "disableABTest": true,
    "sdkVersionBegin": "3.0.1", // 基础库最低版本
    "sdkVersionEnd": "15.255.255", // 填最大值,否则之后的新版本会不生效
  }
}
"rendererOptions": {
  "skyline": {
    "disableABTest": true,
    "iosVersionBegin": "x.y.z", // iOS 微信最低版本
    "iosVersionEnd": "15.255.255", // 填最大值,否则之后的新版本会不生效
    "androidVersionBegin": "x.y.z", // 安卓微信最低版本
    "androidVersionEnd": "15.255.255", // 填最大值,否则之后的新版本会不生效
    "ohosVersionBegin": "1.0.5", //  HarmonyOS 微信最低版本
    "ohosVersionEnd": "15.255.255" // 填最大值,否则之后的新版本会不生效
  }
}

Skyline 迁移工具

为了方便开发者从 WebView 迁移到 Skyline,我们将一些最佳实践和常见的兼容问题都整理成一个检测工具 Skylint

Skylint 不仅会罗列出有兼容问题的具体代码行,对一些明确的兼容问题,也提供自动修改代码的操作,旨在最大程度降低迁移成本

更多说明和用法请前往 Github 查看

微信小程序性能调试工具入口

showPerformanceOverlay

显示 raster 线程和 ui(渲染)线程的使用情况,线程繁忙则显示为红色

  • raster线程:如果发现耗时很高的话,可能是绘制内容太复杂了,例如使用了大量的 backdrop-filter、overflow: hidden、opacity 这些属性会影响光栅化耗时,建议减少这些属性的使用。另外,还可以在频繁更新的节点上添加一个 will-change: contents 这个 wxss 属性来避免大范围的重绘(但这个属性也要避免过多使用,否则会有反效果)
  • ui线程:一般要看是不是没有用上 type=”list”,没用的话布局和 paint 耗时都会比较高
  • 线程相关参考

checkerboardRasterCacheImages

在屏幕上显示一个棋盘格,显示棋盘格的组件表示已经被缓存了

  • 如果发现棋盘格颜色改变,则表示该组件重新渲染
  • 如果滚动时且元素还在屏幕内的时候,颜色一直在变化的话,说明有问题,说明没有缓存,这时候会影响滚动性能。这时候可能是 list-view(type=list)没用对,也可以用 will-change: contents 来手动添加一个绘制边界
  • 不是所有的组件都会形成 RasterCache,需要结构复杂一些才会

Skills

Skyline Skills微信小程序 Skyline 渲染引擎的 Agent Skills 集合,可帮助你借助 AI 编码工具高效开发 Skyline 微信小程序。

安装

执行以下命令即可将 Skyline Skills 添加到你的项目中:

npx skills add wechat-miniprogram/skyline-skills

更新

如需将 Skyline Skills 更新至最新版本,请运行:

npx skills update wechat-miniprogram/skyline-skills

Skills 列表

Skill 描述 使用场景
skyline-overview Skyline 概览与迁移指南 初次了解 Skyline、评估迁移成本
skyline-config JSON 配置规范 创建项目、配置 app.json/页面 json
skyline-components 组件开发指南 scroll-view、swiper、表单、共享元素等组件
skyline-wxss WXSS 样式支持 CSS 属性兼容性查询、样式编写
skyline-worklet Worklet 动画系统 worklet 动画、SharedValue、timing/spring
skyline-route 自定义路由与转场 页面转场动画、半屏弹窗、返回手势
skyline-scroll-api 滚动控制 API ScrollViewContext、程序化刷新/滚动

Skyline 更新日志

Skyline 渲染引擎的版本号可通过 wx.getSkylineInfo 获取。

1.4.19 (2026-05-06)

  1. 修复了 word-break: all 导致的文本截断问题
  2. 修复了 video 周围出现黑线的问题
  3. 修复了微信小程序 wxss 动画中贝塞尔曲线表现错误的问题
  4. 修复了 conic-gradient 渐变的问题
  5. 修复了 scroll-view 下拉刷新影响无障碍功能的问题
  6. 修复了 scroll-view 自动撑高的问题
  7. 修复了 image 在页面退出后仍回调 onerror 事件的问题
  8. 修复了微信小程序 wxss animation 在无效输入下闪退的问题
  9. 修复了 input 在 setData 后 composition 状态丢失的问题

1.4.18 (2026-04-16)

  1. 更新了鸿蒙系统上 Skyline 的内存占用优化
  2. 更新了开发者工具 electron 版本支持 Skyline
  3. 更新了新增样式表动态更新接口以支持开发者工具热更新
  4. 更新了 scroll-view 的 anchoring 功能增强
  5. 更新了 setData 回调使用 Skyline 渲染回调
  6. 修复了 scroll-view 的并行布局问题

1.4.17 (2026-03-23)

  1. 优化了引擎内存占用,提升了整体性能
  2. 优化了大图加载时的内存消耗
  3. 修复了文本布局丢失或错位的问题
  4. 修复了 swiper 组件在 circular 模式下开启 cache-extent 后渲染错误的问题
  5. 修复了 IntersectionObserver 在特定条件下不触发回调的问题
  6. 修复了 scroll-view 的 scroll-top / scroll-left 属性,保证在之前提交的节点操作完成后才进行滚动

1.4.16 (2026-02-09)

  1. 新增了 CSS 支持 currentColor
  2. 新增了 text 组件支持自定义选区弹出菜单
  3. 新增了 iOS 端支持系统“粗体文本”配置
  4. 修复了自定义路由卡死问题
  5. 修复了 IntersectionObserver 未设置 thresholds 无法触发回调的问题
  6. 修复了 map 组件 custom callout id 溢出的问题
  7. 修复了 open-container 返回页面无法快速点击的问题
  8. 修复了文本意外换行的问题
  9. 修复了 scroll-view 滑动首次加载时跳动的问题
  10. 修复了 input 光标选区颜色显示错误的问题
  11. 修复了文本 text overflow 无法去除省略号的问题

1.4.15 (2026-01-09)

  1. 新增了 image 组件的 preload 属性,用于图片预加载
  2. 优化了当页面被遮挡时自动停止动画,减少资源消耗
  3. 修复了 iOS 上某个导致崩溃的问题
  4. 修复了鸿蒙平台无障碍功能导致的闪退
  5. 修复了 fixed 定位元素移动后未重新计算层级的问题
  6. 修复了 box-shadow 在 CSS 动画中不生效及导致的闪退问题
  7. 修复了 gif/apng 动图帧率错误的问题
  8. 修复了 swiper 组件在某些情况下未触发 change 事件的问题
  9. 修复了在 font 和 animation 简写属性中无法使用 CSS 变量的问题
  10. 修复了安卓平台无障碍功能导致的闪退
  11. 修复了图片预加载配置项不生效的问题
  12. 修复了 scroll-view 组件在首次加载时出现跳动的问题

1.4.14 (2025-12-18)

  1. 新增了 text 组件支持行内显示
  2. 新增了 image 组件支持 loadstart 事件
  3. 优化了 scroll-view 的滚动锚定行为,提升了内容变化时的稳定性
  4. 优化了 HTTP 客户端,移除了并发限制以提升网络请求性能
  5. 修复了 image 组件在特定模式下图片不显示的问题
  6. 修复了组件事件回调中潜在的崩溃问题
  7. 修复了 iOS 上 JavaScript 回调导致的崩溃
  8. 修复了文本节点更新时可能引发的死锁问题
  9. 修复了键盘高度变化事件输出错误值的问题
  10. 修复了 IntersectionObserver 在未设置 thresholds 时无法触发回调的问题
  11. 修复了移除子组件操作时可能发生的崩溃
  12. 修复了布局节点访问父节点时可能导致的崩溃
  13. 修复了无障碍功能在鸿蒙系统上的崩溃问题
  14. 修复了 swiper 组件应始终触发 change 事件
  15. 修复了 scroll-view 滑动时首次加载内容跳动的问题

1.4.13 (2025-11-25)

  1. 新增了支持 CSS :host 选择器
  2. 优化了 scroll-view 滚动性能,提升了渲染效率
  3. 修复了 gap 属性与 CSS 变量结合时失效的问题
  4. 修复了 flex 布局中使用 gap 导致元素展示不全的问题
  5. 修复了 snapshot 组件 pointer-events 属性不生效的问题
  6. 修复了图片在尺寸为零时渲染错误的问题
  7. 修复了 em 单位计算中基准 fontSize 错误的问题
  8. 修复了 Intersection Observer 在某些情况下崩溃的问题
  9. 修复了 svg 图片加载时可能出现的死循环问题
  10. 修复了使用 mask-image 展示 svg 图片时出现灰色边框的问题
  11. 修复了 open-container 组件纵向测量不准确的问题
  12. 修复了图片闪烁问题
  13. 修复了动图设置目标尺寸后显示异常的问题
  14. 修复了伪元素节点连接问题导致交互失效

1.4.12 (2025-10-31)

  1. 新增了 layout paragraph 支持无障碍功能
  2. 优化了文本空白字符处理流程
  3. 修复了 grid-view 布局异常
  4. 修复了 IntersectionObserver attached 时机失效
  5. 修复了 scroll-view 下拉刷新动画异常
  6. 修复了 iOS 平台原生视图异常消失
  7. 修复了横向手势返回操作异常
  8. 修复了 IntersectionObserver target 节点异常时的崩溃

1.4.11 (2025-09-15)

  1. 修复了文本末行换行符溢出仍出省略号的问题
  2. 修复了 input 取消 composite 后草稿字符丢失的问题
  3. 修复了 scrol-view scroll-anchoring 偶现意外跳动的问题
  4. 修复了 swiper 开启循环显示后 animateTo 动画错误的问题
  5. 修复了 scroll-view 自动撑高的问题
  6. 修复了自定义路由 barrierDismissible 两次返回的问题
  7. 修复了伪元素节点消失仍在播放 css animation 的问题
  8. 修复了文本中 span 意外换行的问题
  9. 修复了 scroll-view 不足一屏时不触发 lower / upper 事件的问题
  10. 修复了 input / textarea maxlength 输入 emoji 闪退的问题

1.4.10 (2025-08-28)

  1. 新增了 text 增加 trailing-spaces 属性支持多行文本末行末尾预留空间
  2. 新增了 IntersectionObserver 支持多次监听
  3. 新增了 open-container 支持通过接口方式触发打开
  4. 优化了 css animation 在节点不可见时停止动画
  5. 优化了 scroll-view scroll-anchoring 支持度优化
  6. 优化了 open-container 手势返回时支持上下拖动页面
  7. 修复了 swiper 开启自动播放后,隐藏 & 显示会失效的问题
  8. 修复了 image gif 动画修改 src 后动画速度异常的问题
  9. 修复了 word-break: break-all 需要断开数字、英文、符号的问题
  10. 更新了 grid-view 增加子节点后白屏的问题
  11. 修复了 swiper 更新高度后动画失效的问题
  12. 修复了 scroll-view 嵌套 swiper 时可能导致切换无动画的问题
  13. 修复了图片渲染变形的问题
  14. 修复了 open-container 手势返回动画消失的问题
  15. 修复了键盘上推后无法恢复的问题

1.4.9 (2025-08-06)

  1. 新增了 large-image 支持大图渲染
  2. 优化了 css animation 无限循环动画自动开启 repaint boundary 避免大面积重绘
  3. 优化了 text 绘制性能
  4. 优化了 image 对 svg 格式的判断
  5. 优化了渲染树结构优化
  6. 修复了 span 丢失问题
  7. 修复了 sticky-header 动态增加内容崩溃的问题
  8. 修复了 gif 动画消失的问题
  9. 修复了 swiper animation 被打断时 bind:change 和 bind:animationfinished 没有回调的问题
  10. 修复了 grid-view 删除并交换元素后布局错位的问题
  11. 修复了 css 文本 baseline shortcut 问题
  12. 修复了 line-height 无法更新回 normal 值的问题
  13. 修复了 swiper current 更新问题
  14. 修复了 picker-view indicator-style 闪退的问题
  15. 修复了 iOS input 失焦的同时无法 focus 的问题
  16. 修复了某些白屏及 crash 问题

1.4.8 (2025-05-27)

  1. 优化了文本测量优化
  2. 修复了 listView 直接子节点带 margin 时 getBoundingClientRect 获取错误的问题
  3. 修复了 input 失焦后无 blur 事件的问题
  4. 修复了 intersection observer 添加对 list-view 处理的问题
  5. 修复了 gif 动画频率错误的问题
  6. 修复了 list-builder 偶现无法回滚的问题
  7. 修复了 input selection style 不符合预期的问题

1.4.7 (2025-04-29)

  1. 新增了 text 组件支持 space / decode 属性
  2. 新增了 HarmonyOS 下支持暗黑模式
  3. 修复了 textarea 在键盘收起来时都没有给 onKeyboardHeightChange 事件的问题
  4. 修复了 attached 时机创建 intersecton observer root 失效的问题
  5. 修复了 intersection observer target 离开视窗后 root-margin 未生效的问题
  6. 修复了 swiper next-margin 空出的区域无法点击的问题
  7. 修复了 swiper 嵌套 grid-view 无法恢复滚动位置的问题
  8. 修复了切换底部 tab 页面闪退的问题
  9. 修复了设置 word-break 无法点击的问题
  10. 修复了 text max-lines 字符串解析失败会导致闪退的问题
  11. 修复 input / text 在 keyboardHeight 发生变化时,blur 事件不触发
  12. 修复 图片解码时出现死循环
  13. 修复 touch 事件偶发导致程序崩溃

1.4.6 (2025-04-08)

  1. 新增 支持 HarmonyOS 系统
  2. 优化 自定义字体隔离功能
  3. 优化 开发者工具内核升级
  4. 修复 两个 sticky-section 滚动速度不一致的问题
  5. 修复 调整文字选区的默认背景色
  6. 修复 若干 IntersectionListener 相关接口表现异常及程序崩溃问题
  7. 修复 picker-view 设置非法值时出现滚动
  8. 修复 swiper 的 animationfinish 事件返回的 current 参数不正确
  9. 修复 input 字体样式错误
  10. 修复 picker-view-column 没有子项时崩溃
  11. 修复 循环动画时无法触发 scroll-into-view
  12. 修复 swiper 更新高度后动画失效

1.4.5 (2025-03-19)

  1. 新增 css 支持 word-break: break-all 属性
  2. 新增 IntersectionObserver 支持对同一个节点进行多个监听、指定 margins 参数、以及 relativeTo 特定 scroll-view 节点
  3. 新增 @keyframes 样式可全局共享(由 rendererOptions.skyline.keyframeStyleIsolation 控制)
  4. 优化 swiper 组件切换动画曲线,改进与 scroll-view 组合使用时的体验
  5. 优化 卡顿率计算
  6. 优化 worklet 键盘跟随动画不贴合键盘的问题
  7. 修复 image 内存泄漏
  8. 修复 input 的 placeholder-style 使用 var 会导致程序崩溃
  9. 修复 swiper 设置 current 失效
  10. 修复 swiper 开启 circular 之后首次可能会访问到最后一个元素,并且 circular 特性失效
  11. 修复 swiper 的 current 和 bindchange 事件失效
  12. 修复 有 overflow hidden 时可能导致 IntersectionObserver 失效
  13. 修复 键盘上推后页面未恢复到原位
  14. 修复 节点的 inline style 更新时会覆盖通过 applyAnimatedStyle 绑定的动画
  15. 修复 安卓原生组件存在内存泄漏
  16. 修复 sticky-header 仅第一个元素支持 offset-top 且不支持负值
  17. 修复 css transition 的 box-shadow 导致闪退
  18. 修复 image 组件切换 src 后,长按识别二维码不生效,且 bind:load 事件未触发
  19. 修复 css variable 处理未定义的变量
  20. 修复 iOS 上 input 的 focus 失败
  21. 修复 iOS 图片可能存在模糊
  22. 修复 scroll-view 组件的 scroll-into-view 在某些情况下失效

1.4.4 (2024-12-23)

  1. 新增 rich-text 支持 mode=web-static 模式,优化渲染性能(基础库 3.7.7)
  2. 优化 伪元素文本布局优化
  3. 修复 scroll-view 组件 scroll-anchoring 引发额外动画
  4. 修复 scroll-view 组件在 nested scroll 下 bind:refresherpulling 事件不断触发
  5. 修复 文本在某些情况下未能正确换行
  6. 修复 在手势操作过程中改变 opacity 会使手势被打断
  7. 修复 IntersectionObserver 重新绑定无法触发回调
  8. 修复 文本点击引起的 tap 事件失效问题
  9. 修复 image 组件支持 padding 和 border 属性
  10. 修复 地图在手势过程中,可能出现只能放大无法拖动的情况
  11. 修复 键盘上推异常
  12. 修复 若干程序崩溃问题

1.4.3 (2024-12-02)

  1. 新增 WXML 真机调试选择节点时支持 overlay 展示
  2. 新增 swiper 组件 previous-margin 和 next-margin 添加 rpx 支持(基础库 3.7.6)
  3. 新增 scroll-view 返回触顶速度及设置初速度(scroll 事件返回 boundaryVelocity 字段及 worklet.scrollViewContext.scrollTo)
  4. 优化 样式匹配流程性能优化
  5. 优化 样式应用流程性能优化
  6. 优化 文本布局性能优化
  7. 修复 picker-view 组件 bind:change / bind:pickstart / bind:pickend 事件多次触发
  8. 修复 swiper 组件 display-multiple-items 滑动元素问题
  9. 修复 scroll-view 组件去掉 overscroll indicator
  10. 修复 css mask 设置为 none 导致背景图无法绘制
  11. 修复 scroll-view 组件 nested scroll 滚动衔接问题
  12. 修复 css background gradient 渲染异常问题
  13. 修复 离屏删除节点存在内存泄漏
  14. 修复 webview 页面跳转到 skyline 页面再返回时存在内存泄漏
  15. 修复 text 节点设置 pointer events 后仍可点击
  16. 修复 若干程序崩溃问题

1.4.2 (2024-11-19)

  1. 新增 scroll-view 组件支持由子节点撑开(在 rendererOptions 配置中指定 enableScrollViewAutoSize)(基础库 3.7.1)
  2. 新增 首屏图片缓存优化
  3. 修复 nested scroll-view 外层未实际发生滚动而引起内层滚动
  4. 修复 设置 box-shadow inset + border 时,周围有一圈留白
  5. 修复 图片导致程序崩溃

1.4.1 (2024-10-16)

  1. 新增 flex 布局支持 gap 属性
  2. 新增 worklet 中 scroll-view 的 scrollTo 方法支持传递 velocity 参数,以指定初速度滚动(基础库 3.7.0)
  3. 优化 jsbinding 调用耗时
  4. 优化 swiper 内嵌 scroll-view 滚动切换体验问题
  5. 修复 css transition delay 动画闪烁问题
  6. 修复 swiper 设置 next margin 和 snap-to-edge 后,隐藏再显示时会消失
  7. 修复 swiper 开启自动播放后,隐藏再显示会失效
  8. 修复 picker-view 样式设置失败
  9. 修复 键盘上推后无法恢复
  10. 修复 z-index 容器删除子节点的同时,将祖先节点的 opacity 设置为 0,会导致删除的子节点仍可点击
  11. 修复 调试面板闪烁
  12. 修复 安卓下 map 组件宽高变化后展示异常
  13. 修复 list-view、swiper 点停滚动时会触发点按事件
  14. 修复 scroll-view 自定义下拉刷新的 bind:refresherpulling 事件在上滑时也会触发
  15. 修复 input 组件在键盘失焦时变更 value 可能无法更新
  16. 修复 因精度问题导致 flex 布局出现换行
  17. 修复 swiper 组件 previous-margin + snap-to-edge 搭配使用时,滑动到最后一个还可以继续滑动,看到空白卡片
  18. 修复 父节点有 border 时,absolute 子节点的 size 不对
  19. 修复 手势协商导致无法滚动
  20. 修复 空白 text 组件高度应为 0
  21. 修复 图片、picker-view、IntersectionObserver 若干程序崩溃问题

1.4.0 (2024-09-06)

  1. 新增 sticky-header 支持吸顶与否的状态回调 详情
  2. 新增 scroll-view 支持 scroll-anchoring,增删列表项时保持滚动位置稳定
  3. 新增 list-view / *-builder 支持设置 background-color
  4. 新增 swiper 支持 snap-to-edge
  5. 优化 图片的布局尺寸发生变化时,使用布局尺寸而非图片原始尺寸渲染
  6. 优化 图片在弱网或不稳定网络下无法正常显示
  7. 优化 内存释放优化
  8. 优化 布局节点内存大小、提高缓存性能
  9. 优化 布局精度
  10. 修复 iOS 在无网络环境下,图片无法加载磁盘缓存
  11. 修复 swiper 组件只有 1 个 item 时,滑动跳动不止
  12. 修复 swiper 组件设置 display-multiple-items 后,最右侧 item 动画终止时没有右对齐
  13. 修复 image 组件 src 无法更新
  14. 修复 map 组件 custom callout 偶现不可见
  15. 修复 open-container 组件动画首帧闪白
  16. 修复 svg image 解码存在死循环
  17. 修复 background-image 里使用 base64 svg 引起 mask-image 闪烁
  18. 修复 兄弟节点选择器无法标脏
  19. 修复 block 布局 margin 相关行为对齐 webview
  20. 修复 inline-block 布局 padding 与 margin 行为对齐 webview
  21. 修复 特殊定位节点布局大小异常问题
  22. 修复 webview 跳转到 skyline 有少量内存泄漏
  23. 修复 iOS 从 WebView 跳转到 Skyline 多次往返可能出现程序崩溃
  24. 修复 图片回调导致程序崩溃
  25. 修复 取消图片请求时引发的程序崩溃
  26. 修复 v8 jsbinding 程序崩溃

1.3.4 (2024-07-11)

  1. 新增 tag 选择器增加 legacy 选项以兼容 WebView(不受组件隔离限制) 详情
  2. 新增 grid-view 支持设置背景色
  3. 优化 图片在快速滚动场景加载阻塞
  4. 优化 内存占用优化
  5. 优化 css var() 性能优化
  6. 修复 单页路由后退偶现白屏
  7. 修复 text 组件 user-select 异常 详情
  8. 修复 scroll-view 组件 scroll-top 没有过滤非法值
  9. 修复 scroll-view 组件中 wx:if + scroll-into-view 不生效
  10. 修复 picker-view wx:key 更新渲染错误
  11. 修复 键盘上推后页面无法恢复
  12. 修复 fixed 节点里的 input 无法上推页面
  13. 修复 css transition 中使用 calc() 失效
  14. 修复 偶现 svg 模糊
  15. 修复 GetBoundingClientRect 导致程序崩溃
  16. 修复 list-builder 回收导致程序崩溃

1.3.3 (2024-06-14)

  1. 新增 支持 css background conic-gradient
  2. 新增 支持 CSS :nth-child 伪类
  3. 新增 scroll-view 组件 nested 模式的 nested-scroll-body 支持 offset-top 属性 详情
  4. 新增 swiper 组件支持 next-margin
  5. 新增 组件样式隔离选项支持从 Component options 传入,与 WebView 完全兼容(基础库 3.6.2)
  6. 优化 GIF 图片加上 willChangeHint 避免生成 raster cache
  7. 优化 图片提前加载
  8. 优化 scroll-view 组件不再限制 type 必填(默认性能较差)
  9. 修复 image 组件相关 crash
  10. 修复 image 组件渲染 GIF 时,通过 setData 更新后,渲染异常,页面白屏
  11. 修复 scroll-view 组件 builder 模式下 GIF 背景图片闪烁
  12. 修复 scroll-view 组件 lazy mount 机制导致节点不渲染
  13. 修复 textarea 组件设置不了行间距
  14. 修复 input 组件 bindfocus 不触发
  15. 修复 input 组件 placeholder 不居中
  16. 修复 input 组件应用 text-align center 时未完全居中
  17. 修复 picker-view 组件滑动几次之后不能触发 bindtap
  18. 修复 CSS transition / animation background-position 动画失效
  19. 修复 开启 defaultContentBox 选项后,image 带有 padding 时尺寸计算错误
  20. 修复 CSS line-height 细节对齐
  21. 修复 rpx 精度问题
  22. 修复 root-font-size 变化后子节点 calc rem 不更新
  23. 修复 后代选择器 + :not 解析失效
  24. 修复 CSS animation keyframes 无法使用 var
  25. 修复 从 WebView 页面跳转 Skyline 页面时,图片无法加载,需等待
  26. 修复 CSS mask-image 渲染闪烁
  27. 修复 CSS short hand variable 不生效
  28. 修复 列表滚动卡死
  29. 修复 若干 crash 及优化

1.3.0 (2024-04-19)

  1. 新增 支持一般兄弟节点选择器(a ~ b {})
  2. 新增 支持紧邻兄弟节点选择器(a + b {})
  3. 新增 支持 CSS :not() 伪类
  4. 新增 支持 CSS :only-child() 伪类
  5. 新增 支持 CSS :empty() 伪类
  6. 新增 支持 CSS inline-flex 布局
  7. 新增 开发者工具支持 DarkMode 调试
  8. 优化 position 布局增加 cache
  9. 优化 wxss 解析耗时
  10. 优化 transform paint 耗时
  11. 优化 transition / animation 事件派发机制
  12. 优化 字体模块预热
  13. 优化 内存占用
  14. 修复 样式在特殊情况下无法更新
  15. 修复 transition 属性 var 支持问题
  16. 修复 先设置 transform-origin 再设置 transform 无效
  17. 修复 flex align-items 不居中
  18. 修复 font-size calc 支持 bug
  19. 修复 fixed 节点 z-index 相同时节点层级不对
  20. 修复 input 长按不出菜单栏
  21. 修复 input bindfocus 返回值 height 始终为 0
  22. 修复 map Custom Callout 更新不及时
  23. 修复 scroll-view 横向滚动时触边事件不触发
  24. 修复 canvas touch event 返回 x / y 属性
  25. 修复 若干 crash

1.2.5 (2024-03-18)

  1. 新增 支持 CSS border-style
  2. 新增 支持 CSS font-feature-settings,用于中文标点符号宽度调整
  3. 新增 支持 CSS letter-spacing
  4. 新增 页面返回手势机制
  5. 新增 容器转场动画
  6. 新增 list-builder 组件支持不定高模式
  7. 新增 支持 grid-builder 组件
  8. 新增 input 组件的 placeholder-style 支持传样式字样串
  9. 优化 worklet function 执行耗时
  10. 优化 布局阶段性能
  11. 优化 节点占用内存
  12. 修复 地图组件双指操作异常
  13. 修复 position fixed z-index 小于 0 不生效
  14. 修复 单边 border-width + border-radius 不生效
  15. 修复 inline 布局下 text-align 属性不生效
  16. 修复 linear-gradient transparent 渲染出灰色
  17. 修复 page 节点 font-size 使用 var() crash 问题
  18. 修复 backdrop-filter var() 失效
  19. 修复 align-items baseline 对齐时 margin 偏移问题
  20. 修复 外层 transform: scale 无法作用到 mask-image 所在节点上
  21. 修复 text 中 view 节点设置 margin 会导致后续文本被截断
  22. 修复 input 组件 value 和 placeholder 重叠问题
  23. 修复 input 组件长按不出菜单栏
  24. 更新 input 组件键盘高度 worklet 回调缺少页面上推高度
  25. 修复 scroll-view 组件的 refresher-background 默认值不生效
  26. 修复 grid-view 组件 aligned 模式下点击 navigator 子节点重排消失
  27. 修复 iOS 自定义 tabbar 首次扫码进入白屏
  28. 修复 APNG 动图渲染不了
  29. 修复 安卓 shared value crash 问题
  30. 修复 开发者工具上 input 默认字体是斜体
  31. 修复 开发者工具 WXML 伪元素选中样式不匹配
  32. 修复 偶现白屏现象
  33. 修复 HTTP 资源请求若干 crash
  34. 修复 若干内存泄漏、crash

1.2.0(2024-01-08)

  1. 新增 开发者工具支持真机调试
  2. 新增 CSS 支持 flex order 详情
  3. 新增 CSS 支持 will-change: contents,用于声明绘制边界 详情
  4. 新增 支持全局跨页面组件 详情
  5. 新增 支持 APNG 动图
  6. 新增 scroll-view 组件支持 builder 模式,用于按需构建在屏节点 详情
  7. 新增 picker-view 组件支持 indicator-style 属性
  8. 新增 input 键盘动画提供 worklet 回调,用于实现键盘跟随动画 详情
  9. 新增 textarea 组件支持 linechange 事件
  10. 新增 worklet 增加 ref 机制,用于在 UI 线程操作节点 详情
  11. 新增 worklet 支持 scrollTo 接口 详情
  12. 优化 渲染性能
  13. 优化 事件派发内部出现异常导致的性能损耗
  14. 优化 CSS background linear-gradient 支持 px 单位
  15. 优化 CSS line-height calc 混合单位支持
  16. 修复 position fixed 若干稳定性问题
  17. 修复 background-image PNG 图片模糊
  18. 修复 热启动到不同 path 时会先出现上一页面内容
  19. 修复 id / class 传入非 ASCII 编码字符串闪退
  20. 修复 动态插入的 list-view / grid-view 无法开启 prelayout
  21. 修复 nested-scroll-header / nested-scroll-body 的直接子节点无法更新
  22. 修复 input 光标不居中
  23. 修复 暗黑模式可能显示不对的问题
  24. 修复 tab 页 handlePreviousPageAnimation 无效
  25. 修复 图片偶现渲染异常
  26. 修复 共享元素动画失效
  27. 修复 touchend 触发可能早于 touchmove
  28. 修复 CSS background linear-gradient 在宽高为 0 时异常
  29. 修复 picker-view 初始背景色错误
  30. 修复 swiper 单个子节点下滚动对齐 WebView
  31. 修复 mask-image 与 image 搭配使用时闪烁问题
  32. 修复 box-shadow none + border-radius 会出现边缘黑线
  33. 修复 line-through 无法去掉
  34. 修复 inline 布局下 text-align 属性失效
  35. 修复 absolute 节点 top 未指定时表现异常
  36. 修复 input 的 value 与 placeholder 重叠
  37. 修复 地图组件双指操作失效
  38. 修复 snapshot 某些情况下渲染异常问题
  39. 修复 开发者工具若干 crash
  40. 修复 若干闪退、白屏、内存泄漏问题

1.1.0(2023-11-06)

  1. 新增 CSS 支持 position fixed
  2. 新增 span/text 组件里的布局节点支持 display inline-block
  3. 新增 draggable-sheet 滚动容器组件,用于快速实现半屏交互
  4. 新增 swiper 组件支持一批新的交互动画类型,用于实现常见的原生交互效果
  5. 新增 scroll-view 组件支持 type=”nested”,用于处理 scroll-view 嵌套的场景
  6. 新增 input 组件支持 cursor-color 属性,可自定义光标颜色
  7. 新增 input 组件支持 compositionstart / compositionupdate / compositionend 事件,用于感知输入草稿状态
  8. 新增 input 组件支持 selectionchange 事件,用于感知光标位置变化
  9. 新增 input 组件支持 hold-keyboard 属性,对齐 WebView
  10. 新增 textarea 组件支持 confirm-hold 属性,对齐 WebView
  11. 新增 wx.preloadAssets 接口,对齐 WebView
  12. 新增 自定义路由增加 fullscreenDrag 配置项,使得全屏范围内都可以右滑返回
  13. 新增 支持页面级别配置 rendererOptions
  14. 优化 自定义组件节点 display 默认值调整为 inline,解决布局错乱问题
  15. 优化 scroll-view 组件 type=”list” 来回滚动时会频繁发生重布局导致滚动掉帧
  16. 优化 CSS animation 在节点移除之后还会不断刷新,造成不必要的性能消耗
  17. 优化 WebP 动图播放卡顿
  18. 优化 iOS video 组件渲染卡顿、发热问题
  19. 优化 文本测量加上缓存
  20. 优化 底层 JSBinding 通信机制若干性能优化
  21. 修复 video 组件反复点击静音按钮导致视频比例异常
  22. 修复 sticky-header 点击会透传到背后文字
  23. 修复 多个 input 切换时 keyboardheightchang 事件返回的 detail.height 为 0
  24. 修复 input 键盘高度变化后导致输入框上推异常
  25. 修复 input 组件在失去焦点后不能再次输入
  26. 修复 input 输入框上推偶现失败
  27. 修复 input / textarea 未进行 measure 导致设置 font-size 时无法撑开布局
  28. 修复 textarea 未进行 measure 导致 auto-height 失效
  29. 修复 textarea 组件不能换行(换行失焦)
  30. 修复 textarea 组件光标不能移动
  31. 修复 sticky-section 嵌套 template 视图无法更新
  32. 修复 video object-fit 属性不生效,竖屏视频会填充容器
  33. 修复 伪元素上的 css animation 不生效
  34. 修复 图片渲染重复
  35. 修复 component placeholder 渲染异常
  36. 修复 picker view 若干更新异常
  37. 修复 在某些情况下改变 padding 后布局错误
  38. 修复 swiper 设置 current 之后 change 事件未对齐 webview
  39. 修复 sticky-header 下 scroll-into-view 失效
  40. 修复 加载 302 跳转的网络图片失败
  41. 修复 安卓下 svg 图片加上 mode=”widthFix” 出现图片模糊现象
  42. 修复 min/max-height/width auto 设置失效
  43. 修复 inline style 动态设置 custom property 失败
  44. 修复 在 transition 和 worklet 动画使用 border-width & border-color 失效
  45. 修复 calc() 嵌套用法出现卡死
  46. 修复 非法 utf16 字符导致 ui 异常卡死
  47. 修复 text 组件 overflow 属性未传值时导致 crash
  48. 修复 text/span 套 image 时某些情况下会 crash
  49. 修复 若干闪退问题

1.0.12(2023-09-06)

  1. 新增 支持 box-sizing: content-box
  2. 新增 支持 NodesRef.scrollOffset
  3. 新增 支持 scroll-view 组件 scroll-into-view-offset 属性(基础库 3.1.0)
  4. 新增 支持 text rich-text 组件 user-select 属性
  5. 新增 支持 map 组件 custom callout 特性
  6. 优化 Skyline 首次渲染性能
  7. 优化 snapshot 组件支持导出长图
  8. 优化 利用 snapshot 优化 scale 动画性能(基础库 3.1.0)
  9. 优化 安卓下图片请求缓存机制
  10. 优化 事件派发性能
  11. 优化 font-face 字体未加载时显示为空,避免出现乱码
  12. 修复 图片请求带上 UA 和 referrer
  13. 修复 横向 scorll-view 直接子节点 margin 失效
  14. 修复 filter & backdrop-filter transition 动画不生效
  15. 修复 background: url(//xxxxx) 写法不生效
  16. 更新 background-image 采用 svg UrlData 格式时无法渲染
  17. 修复 scroll-view scroll-x scroll-y 置为 false 无效
  18. 修复 span 子节点同时更新闪退
  19. 修复 scroll-view 动态增加子节点,子节点百分比尺寸失效
  20. 修复 css var shorthand 不生效问题
  21. 修复 flex item margin 塌陷问题
  22. 修复 svg 使用 utf8 格式(正常是 charset=utf8)无法显示
  23. 修复 calc 表达式使用 em 引起 crash
  24. 修复 backdrop-filter 节点做 opacity 动画卡死
  25. 修复 scroll-view refresher restore 之后不应该触发 pulling 事件
  26. 修复 CSS flex-basis 某些情况下导致界面卡死
  27. 修复 swiper 只有一个 swiper-item 时,autoplay 动画应关闭
  28. 修复 scroll-into-view 跳转至 virtualHost 节点会 crash
  29. 修复 scroll-view 下嵌套 swiper 时,scroll-view 滚动会影响 swiper 状态
  30. 修复 更新 list-view 里的数据后,页面高度过高且出现灰色块
  31. 修复 background-image repeat 在滚动时因精度计算问题出现抖动
  32. 修复 intersectionObserver 接口对齐
  33. 修复 getBoundingClientRect 未计入 transform
  34. 修复 微信小程序横屏时 scroll-view 滚动条位置异常
  35. 修复 地图改变高度时发生形变
  36. 修复 开发者工具在 windows 平台下若干 crash
  37. 修复 若干闪退、线程安全问题

1.0.5(2023-06-30)

  1. 新增 CSS 支持 animation 属性 详情
  2. 新增 scroll-view 组件支持下拉二楼交互
  3. 新增 snapshot 截图组件,用于将组件内的 WXML 内容导出图片
  4. 新增 sticky-header 组件支持 offset-top 属性,用于设置顶部偏移
  5. 新增 text 组件支持 overflow 属性,用于对齐文本省略特性
  6. 新增 scroll-view 组件下的直接子节点 height 支持 % 单位
  7. 新增 开发者工具上支持 backgroundColorContent 配置项 详情
  8. 新增 开发者工具上支持 getSkylineInfo 接口
  9. 优化 自定义路由中频繁修改 opacity / transform 的性能问题
  10. 优化 进行渲染预热以降低 iOS 首次光栅化的耗时
  11. 优化 优化字符串创建减少 JSBinding 通信开销
  12. 优化 路由动画时长改为默认 400 ms
  13. 优化 调整 image 组件 onload 的触发时机,并保证动画中缓存不会失效
  14. 修复 block 布局下 scroll-view 子元素 margin 偏移问题
  15. 修复 block 布局下图片 margin 不生效
  16. 修复 block 布局下 scroll-view 子节点在某些情况下无法撑满父节点的宽度
  17. 修复 block 布局下若父子节点之间有 border、padding 时 margin 将不做合并
  18. 修复 position absolute 下 margin 定位不准确
  19. 修复 picker-view 组件在 value 越界时不显示最后一个 value
  20. 修复 多个节点手势协商失效
  21. 修复 伪元素事件响应问题
  22. 修复 伪类选择器优先级错误
  23. 修复 scroll-view 触底加载更多回弹动画问题
  24. 修复 swiper-item 中包含较多图片时无法及时被释放
  25. 修复 text 节点内容从无到有时,无法点击
  26. 修复 text 节点在点击后移动时,事件无法再派发
  27. 修复 css 动画过程中移除 transtion 属性应中断动画
  28. 修复 sticky 设置 padding 后 scroll-into-view 失效
  29. 修复 root-portal 内的元素无法改变高度
  30. 修复 list-view 子节点在某些情况下无法正常渲染出来
  31. 修复 地图组件初始化时闪黑
  32. 修复 scroll-view 组件 enable-back-to-top 滚动动画失效
  33. 修复 带有伪类选择器时 style sharing 匹配错误
  34. 修复 scroll-view 或 root-portal 组件的子节点在某些情况下无法重新布局
  35. 修复 image 组件 mode=heightFix 失效
  36. 修复 文本复用时,未能重新布局导致渲染问题
  37. 修复 开发者工具 safe-area-inset-* 不生效
  38. 修复 开发者工具 mac 端默认变为斜体
  39. 修复 开发者工具页面切换时若操作上一页面会出现 crash
  40. 修复 若干闪退、ANR 问题

1.0.0(2023-05-11)

  1. 新增 CSS 支持 calc 函数 详情
  2. 新增 CSS 支持伪元素 before 和 after 详情
  3. 新增 CSS 支持 var 函数 详情
  4. 新增 CSS 支持 mask-image 属性 详情
  5. 新增 支持 picker-view 组件
  6. 新增 scroll-view 组件支持 clip 属性,可显示溢出内容
  7. 新增 scroll-view / grid-view / list-view / sticky-header / sticky-section 组件支持 padding 属性,设置组件内部的内边距
  8. 新增 scroll-view 组件直接子节点支持 CSS margin
  9. 新增 scroll-view 组件支持 min-drag-distance 属性,设置起始滚动阈值
  10. 新增 text / span 组件支持内联 view 等普通节点
  11. 新增 支持新版本组件框架 glass-easel 详情
  12. 优化 完善 SVG 支持度
  13. 优化 自定义路由接口设计,以及启动页无法绑定自定义路由 详情
  14. 优化 图片渲染性能、CSS 动画时的性能、动图刷新率问题
  15. 优化 首屏渲染性能
  16. 优化 share-element key 重复时给予提示
  17. 修复 连续调用 didPop 页面白屏
  18. 修复 background-image 在某些路径下消失问题
  19. 修复 图片 UrlData 格式不标准时解析 crash
  20. 修复 text (span) 嵌套 text (navigator) 无法点击
  21. 修复 block 布局下 margin 合并正负值 bug
  22. 修复 iOS input 组件 digit 键盘样式错误
  23. 修复 设置 border-style 并指定其中一边宽时,剩余其他边宽应为默认值
  24. 修复 sticky-section 子节点不会重计算样式
  25. 修复 scroll-view 组件 bounces 和 refresher 冲突
  26. 修复 scroll-view 组件触底加载更多回弹动画曲线异常
  27. 修复 scroll-view 组件快速滚动时无法加载更多节点
  28. 修复 grid-view 部分属性更新失效
  29. 修复 iOS 暗黑模式从后台切前台会突变一下的问题
  30. 修复 swiper 组件 circular & autoplay 动态切换时表现异常
  31. 修复 swiper 组件循环模式下 cache-extent 异常
  32. 修复 line-height 数值类型直接继承
  33. 修复 video 组件在 scroll-view 下滚动出去再回来时消失
  34. 修复 超出 share-element 的节点无法响应点击
  35. 修复 页面背景色默认透明
  36. 修复 若干闪退、ANR 问题

0.10.1(2023-03-23)

  1. 新增 CSS 支持 block 布局 详情
  2. 新增 share-element on-frame 支持返回自定义 rect
  3. 新增 开发者工具支持 CSS env safe-area-inset-*
  4. 优化 使 scroll-view 组件在内容未溢出时也能够滚动
  5. 优化 对字体模块预热,减少字体测量的耗时
  6. 优化 image 本地缓存读取性能
  7. 优化 对 JS 线程部分任务提高优先级
  8. 修复 文本字号不受系统字体配置影响
  9. 修复 scroll-view 组件下使用 image 组件的 fade-in 属性时布局异常的问题
  10. 修复 自定义路由连续调用 didPop 接口页面白屏问题
  11. 修复 share-element 组件能够根据子节点自动撑高
  12. 修复 share-element on-frame 回调在动画完成时未触发的问题
  13. 修复 开发者工具下自定义字体不生效的问题
  14. 修复 CSS transition 在 bottom 变化时未触发动画
  15. 修复 CSS background-image 无法移除
  16. 修复 image 组件在某些情况下出现闪烁的问题
  17. 修复 在自定义路由下,页面的 input 组件聚集时上推距离过小
  18. 修复 input 组件上推页面后输入抖动的问题
  19. 修复 scroll-view 组件 custom 模式下无法下拉刷新
  20. 修复 scroll-view 组件 bindscrolltolower 和 bindscrolltoupper 多次触发问题
  21. 修复 darkmode 偶现不生效的问题
  22. 修复 text 组件设置 max-lines=”2″ 闪退问题
  23. 修复 在 ui 线程 setTimeout 闪退问题
  24. 修复 开发者工具 JS 线程死锁的问题
  25. 修复 若干闪退、线程安全、内存泄漏问题

0.9.15(2023-01-16)

  1. 新增 支持 grid-view 以实现网络布局、瀑布流布局等 详情
  2. 新增 支持 share-element 更多自定义特性 详情
  3. 新增 完善 swiper 特性支持(bindtransition、bindanimationfinish、display-multiple-items) 详情
  4. 新增 swiper 组件支持手势协商 详情
  5. 新增 swiper 支持 scroll-with-animation 及 cache-extent 属性 详情
  6. 新增 支持解析 CSS text-shadow
  7. 新增 与 applyAnimatedStyle 配套使用的 clearAnimatedStyle 接口
  8. 新增 doubletap 手势返回坐标信息 详情
  9. 优化 统一 skyline 的释放流程
  10. 优化 font-face 增加本地缓存
  11. 优化 image 组件重新渲染相关逻辑
  12. 优化 样式解析和计算的性能
  13. 优化 input 输入框弹起键盘时上推到可视区域
  14. 优化 background-image 渲染图片的性能
  15. 修复 背景渐变失效
  16. 修复 自定义路由偶现 crash
  17. 修复 share-element/scroll-view 的子节点通过 absolute 超出父容器时能够响应事件
  18. 修复 worklet 在某些条件下出现死锁问题
  19. 修复 css env 常量的取值正确性
  20. 修复 嵌套 scroll-view 事件不应传递到最外层 scroll-view
  21. 修复 开发者工具 v8 engine 初始化问题
  22. 修复 scroll-view 插入子节点重复 layout & paint 问题
  23. 修复 applyAnimatedStyle 释放逻辑
  24. 修复 较早时机修改 sharedValue 无法同步到 animatedStyle
  25. 修复 shared value 保证同步写完后能同步读取到
  26. 修复 自定义路由 secondaryAnimation 不生效
  27. 修复 share-element 在 tab 页下 tag 重复导致动效失效的问题
  28. 修复 scroll-view 初始 scroll-left 无效
  29. 修复 swiper 纵向滚动时指示条位置错误
  30. 修复 worklet animatedStyle 优先级应比 WXSS 高
  31. 修复 tab 页切换后 swiper 滚动位置被重置的问题
  32. 修复 嵌套 scroll-view lazy mount 异常问题
  33. 修复 sticky-header 嵌套关系异常时出现的 crash
  34. 修复 启动立即 redirectTo 到新页面可能出现白屏的问题
  35. 修复 若干闪退、线程安全、内存漏洞、ANR 等问题

0.9.10(2022-11-23)

  1. 新增 支持 sticky 吸顶机制 详情
  2. 新增 支持无障碍访问 详情
  3. 新增 支持 rem 单位
  4. 新增 scroll-view 支持 custom type 详情
  5. 新增 scroll-view 下拉刷新增加 willRefresh 事件和 bounce 优化 详情
  6. 新增 scroll-view 支持 scrollend 事件和 scrolling reason 详情
  7. 新增 scroll-view 增加 scroll-into-view-alignment / scroll-into-view-within-extent 属性 详情
  8. 新增 scroll-view 增加 cache-extent 属性 详情
  9. 新增 微信小程序页面背景颜色支持
  10. 优化 图片缓存内存占用
  11. 优化 skyline 释放流程
  12. 优化 抛出 worklet 函数异常信息
  13. 优化 简化页面栈结构
  14. 优化 若干项稳定性改造
  15. 修复 键盘上推 input 失效
  16. 修复 tap 手势丢失坐标信息
  17. 修复 scroll-view 子节点使用 wx:key 时更新错误
  18. 修复 input maxlength 参数初始化时不生效
  19. 修复 自定义路由点击遮罩层返回页面栈错乱
  20. 修复 自定义路由跳转页面部分异常报错问题
  21. 修复 安卓 router push crash
  22. 修复 某些情况下应用样式导致 crash
  23. 修复 文本节点无法标脏
  24. 修复 字体缩放比例不统一
  25. 修复 worklet 模块存在 UAF 问题
  26. 修复 canvas 布局完成回调未触发
  27. 修复 路由过程中手势返回后事件不响应
  28. 修复 image onload 类型转换异常
  29. 修复 在某些情况下手势出现报错
  30. 修复 部分线程安全问题
  31. 修复 viewport 信息同步时序问题
  32. 修复 background 相关属性 crash
  33. 修复 darkmode 首次进入页面闪白屏后变黑
  34. 修复 input 选区样式区分平台及支持国际化
  35. 修复 若干项 crash 问题

0.9.8(2022-10-11)

  1. 新增 darkmode 支持 详情
  2. 新增 span 组件,用于图片与文本内联布局 详情
  3. 新增 scroll-view reverse 属性,支持反向滚动 详情
  4. 新增 CSS 支持 first-child / last-child 伪类 skyline wxss 样式支持与差异
  5. 新增 scale 手势回调返回更多信息
  6. 新增 background-image 支持混合图片和渐变
  7. 优化 filter / backdrop-filter none 时的渲染性能
  8. 优化 图片内存占用回收不及时
  9. 优化 手势节点按需插入
  10. 优化 图片预解码
  11. 修复 更新 opacity 后 z-index 失效
  12. 修复 scroll-view 动态更新时手势绑定失败
  13. 修复 JSCore 用法错误导致 iOS 下闪退
  14. 修复 inline style 被 worklet 设置的样式所覆盖
  15. 修复 scrollIntoView 失效与报错
  16. 修复 SelectorQuery 查找 display none 的 Canvas Node 未触发回调
  17. 修复 嵌套 text 组件闪退
  18. 修复 共享页面元素和单页面路由黑屏
  19. 修复 iOS 下偶现 crash
  20. 修复 页面手势返回通知时机错误
  21. 修复 页面推入过程中 getBoundingClientRect 读取错误
  22. 修复 Touch 事件存在内存泄漏
  23. 修复 手势返回页面后,短暂时间无法响应点击
  24. 修复 iOS 系统输入法无法输入中文
  25. 修复 CSS Length 单位计算错误
  26. 修复 image / video / canvas 等叶子结点插入节点会闪退
  27. 修复 微信小程序跳微信小程序 worklet 闪退
  28. 修复 input 无法垂直居中
  29. 修复 input 光标错位 & focus 为 false 不收键盘 & 点击空白处未失焦收键盘
  30. 修复 textarea 长文本出现半截字
  31. 修复 iOS main JSContext 内存泄漏