微信小程序skyline渲染引擎尝鲜

这篇具有很好参考价值的文章主要介绍了微信小程序skyline渲染引擎尝鲜。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述
官方描述

当小程序基于 WebView 环境下时,WebView 的 JS 逻辑、DOM 树创建、CSS 解析、样式计算、Layout、Paint (Composite) 都发生在同一线程,在 WebView 上执行过多的 JS 逻辑可能阻塞渲染,导致界面卡顿。以此为前提,小程序同时考虑了性能与安全,采用了目前称为「双线程模型」的架构。

在 Skyline 环境下,我们尝试改变这一情况:Skyline 创建了一条渲染线程来负责 Layout, Composite 和 Paint 等渲染任务,并在 AppService 中划出一个独立的上下文,来运行之前 WebView 承担的 JS 逻辑、DOM 树创建等逻辑。这种新的架构相比原有的 WebView 架构,有以下特点:

  • 界面更不容易被逻辑阻塞,进一步减少卡顿
  • 无需为每个页面新建一个 JS 引擎实例(WebView),减少了内存、时间开销
  • 框架可以在页面之间共享更多的资源,进一步减少运行时内存、时间开销
  • 框架的代码之间无需再通过 JSBridge 进行数据交换,减少了大量通信时间开销
思考

新的skyline渲染引擎能提升性能,减少卡顿,接下来编写长列表代码来测试新引擎的实际性能表现如何。

一、环境准备

在hbuderx中创建项目,选择默认模板,生成基础代码。
文件结构如图。

skyline 渲染模式在 2.29.2 及以上基础库支持。 当前小程序未设置线上最低基础库,微信小程序,uni-app,vue

运行项目后查看详情-本地设置,确保基础库版本在2.30.4以上

skyline 渲染模式在 2.29.2 及以上基础库支持。 当前小程序未设置线上最低基础库,微信小程序,uni-app,vue
manifest.json 文件配置

在mp-weixin 对象内增加如下lazyCodeLoading、rendererOptions 的配置信息,完整配置如下。

{
	"mp-weixin" : {
        "appid" : "",
        "setting" : {
            "urlCheck" : false
        },
        "usingComponents" : true,
        "lazyCodeLoading": "requiredComponents",
        "rendererOptions": { 
            "skyline": { 
                "defaultDisplayBlock": true 
            } 
        }
    }
}

pages.json 文件配置

在需要Skyline渲染的页面增加renderer、navigationStyle、componentFramework 三个配置项,完整配置如下

{
    "pages": [
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "uni-app",
                "renderer": "skyline",
                "navigationStyle": "custom",
                "componentFramework": "glass-easel"
            }
        }
    ]
}

配置完成重新启动项目会提示切换Skyline调试模式,直接切换。

skyline 渲染模式在 2.29.2 及以上基础库支持。 当前小程序未设置线上最低基础库,微信小程序,uni-app,vue
二、长列表实现

html

<template>
	<view class="navBar"></view>
	<view class="content">
		<view class="title"> 
			<text>姓名</text>
			<text>学校</text>
			<text>班级</text>
			<text>语文</text>
			<text>数学</text>
			<text>英语</text>
		</view>

		<scroll-view type="list" :scroll-y="true" class="list">
			<view class="item" v-for="item in list" :key="item.key1">
				<text>{{ item.key1 }}</text>
				<text>{{ item.key2 }}</text>
				<text>{{ item.key3 }}</text>
				<text>{{ item.key4 }}</text>
				<text>{{ item.key5 }}</text>
				<text>{{ item.key6 }}</text>
				<text>{{ item.key7 }}</text>
			</view>

			<view class="more" @tap="page++">查看更多~</view>
		</scroll-view>
	</view>
</template>

javascript

export default {
    data () {
        return {
            showPage: 1,
            list: [],
            page: 1,
            size: 200
        }
    },
    onLoad() {
        this.getList()
    },
    methods: {
        getList () {
        let len = this.list.length
            for (let i=1; i <= this.size; i++) {
                this.list.push({
                    key1: len + i,
                    key2: '张三',
                    key3: '1中',
                    key4: '3班',
                    key5: '100分',
                    key6: '90分',
                    key7: '87分',
                })
            }
        }
    },
    watch: {
        'page' () {
            console.log('页码改变了---', value);
            this.getList()
        }
    }
}

css

.navBar {
    height: var(--status-bar-height);
    background-color: red;
    position: fixed;
    top: 0;
    z-index: 9999;
}
.content {
    font-size: 14px;
}
.title {
    height: 40px;
    width: 100%;
    display: flex;
    justify-content: space-around;
    background: #4381ff;
}
.title text {
    width: 100rpx;
    color: #fff;
    line-height: 40px;
    text-align: center;
}

.list {
    height: calc(100vh - var(--status-bar-height) - 40px);
}

.item {
    height: 40px;
    width: 100%;
    display: flex;
    justify-content: space-around;
    border-bottom: solid 1px rgba(0, 0, 0, 0.068);
}
.item text {
    width: 100rpx;
    line-height: 40px;
    text-align: center;
}

.more {
    height: 40px;
    width: 100%;
    text-align: center;
    line-height: 40px;
    color: #4381ff;
}

界面展示如图,点击查看更多一次,多展示一页的数据。

skyline 渲染模式在 2.29.2 及以上基础库支持。 当前小程序未设置线上最低基础库,微信小程序,uni-app,vue
三、性能对比测试
1. 测试说明

复制长列表页面,把pages.json 内两个页面的配置改为普通渲染(webview)。这样子就有了所有条件都一致、渲染方式不同的两个页面,通过查看更多按钮增加列表渲染数量,在不卡顿的前提下数据渲染的条数越多,性能越好,反之越差。

文件结构如图
skyline 渲染模式在 2.29.2 及以上基础库支持。 当前小程序未设置线上最低基础库,微信小程序,uni-app,vue

pages.json 配置如下

{
	"path": "pages/index/skyline",
    "style": {
        "navigationBarTitleText": "skyline",
        "renderer": "skyline",
        "navigationStyle": "custom",
        "componentFramework": "glass-easel"
    }
},
{
	"path": "pages/index/webview",
    "style": {
        "navigationBarTitleText": "webview",
        "navigationStyle": "custom"
    }
}
2. webview渲染
skyline 渲染模式在 2.29.2 及以上基础库支持。 当前小程序未设置线上最低基础库,微信小程序,uni-app,vue

演示视频地址: https://markdownimg-1313808923.cos.ap-chengdu.myqcloud.com/skyline%2F888.mp4

普通的渲染模式(webview)在渲染第2000条数据时,界面卡死,操作无反应。

3. skyline渲染
skyline 渲染模式在 2.29.2 及以上基础库支持。 当前小程序未设置线上最低基础库,微信小程序,uni-app,vue

演示视频地址: https://markdownimg-1313808923.cos.ap-chengdu.myqcloud.com/skyline%2F999.mp4

skyline渲染模式在渲染第7000条数据时,界面卡死,操作无反应

4. 打包uni-小程序

通过hbuderX 发行为小程序包,在iphone5 上运行测试:

  • 未使用skyline配置: 页面渲染10000条数据是出现明显卡顿,点击按钮无反应

  • 使用skyline配置: 页面渲染8500条数据是出现明显卡顿,点击按钮无反应

四、总结
1. 性能

在性能的表现上官方给出的首屏渲染速度数据如图

skyline 渲染模式在 2.29.2 及以上基础库支持。 当前小程序未设置线上最低基础库,微信小程序,uni-app,vue

我们用长列表的渲染数据量对比的结果 2000( webview ) / 7000(skyline) 和官方标定的性能对比图类似,使用skyline引擎渲染的界面确实速度有质的飞跃(至少在长列表渲染场景中)。文章来源地址https://www.toymoban.com/news/detail-760805.html

2. 遇到的问题
  • 使用skyline渲染模式无法实现整页滚动,必须借助scoroll-view 组件,并指定"type: list"
  • 使用skyline渲染模式必须使用自定义导航栏
  • 开发工具在使用skyline模式时不会热更新
  • 使用hbuderx打包uni-小程序时skyline引擎是不生效的

到了这里,关于微信小程序skyline渲染引擎尝鲜的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序Skyline模式自定义tab组件胶囊与原生胶囊平齐,安卓和ios均自适应

    进入下面小程序可以体验效果 :   至于原理的话,解释起来毕竟麻烦,各位可以看源码自己分析。其实很简单,就算计算布局。很多网上公布的布局,都不能正常自适应。在下这个是完美可以的 

    2024年03月21日
    浏览(32)
  • Taro 小程序开发大型实战(七):尝鲜微信小程序云(下篇)

    欢迎继续阅读《Taro 小程序开发大型实战》系列,前情回顾: 熟悉的 React,熟悉的 Hooks:我们用 React 和 Hooks 实现了一个非常简单的添加帖子的原型 多页面跳转和 Taro UI 组件库:我们用 Taro 自带的路由功能实现了多页面跳转,并用 Taro UI 组件库升级了应用界面 实现微信和支付

    2024年03月10日
    浏览(39)
  • 微信小程序基础面试题【29道】

    wxml 是微信小程序的一种页面渲染语言,类似于 HTML,但也有一些不同之处。 以下是 wxml 与标准的 HTML 的异同: 相同点: 两者都是页面渲染语言,用于描述网页的结构和内容。 两者都使用标签来组织内容。 两者都支持使用 CSS 样式表来控制页面的外观和布局。 两者都支持事

    2024年02月16日
    浏览(30)
  • 微信小程序渲染出错

    第一个错误渲染出错: [渲染层错误] Uncaught (in promise) [object DOMException](env: Windows,mp,1.06.2306020; lib: 2.19.2) 第二错误method值为空TypeError: Cannot read property \\\'method\\\' of undefined     at Vi.playdate (play.js? [sm]:51)     at Object.i.safeCallback (WASubContext.js?t=wechats=1687920555309v=2.19.2:2)     at WASubContex

    2024年02月10日
    浏览(39)
  • 微信小程序渲染实时时间

    总结一下自己怎么用JS初级的内容来写一个页面实时渲染时间的方法。 util.js文件代码如下: 例如,我要在index.js中引用util.js中的模块formatTime。那么,首先在index.js中定义变量util,使用require函数加载util.js文件。这里必须使用相对路径。 调用函数时,传入new Date()参数,返回值

    2024年02月11日
    浏览(38)
  • 微信小程序------WXML模板语法之条件渲染和列表渲染

    目录 前言 一、条件渲染 1.wx:if 2. 结合 使用 wx:if 3. hidden 4. wx:if 与 hidden 的对比 二、列表渲染 1. wx:for 2. 手动指定索引和当前项的变量名* 3. wx:key 的使用         上一期我们讲解wxml模版语法中的数据绑定和事件绑定(上一期链接:微信小程序-----WXML模板语法之数据绑定与事件

    2024年01月16日
    浏览(41)
  • 微信小程序之数据的同步渲染

    结论: 微信小程序通过setData方法实现数据的同步渲染,直接修改data无法实现同步渲染。 小程序分为逻辑层和渲染层,而每次逻辑层改变了,要借用Native运行。小程序的渲染层和逻辑层由两个线程管理:渲染层的界面使用了 WebView 进行渲染;逻辑层采用 JsCore 线程运行 JS 脚本

    2024年02月11日
    浏览(42)
  • 微信小程序iconfont真机渲染失败

    解决方法: 1.将下载的.woff文件在transfonter转为base64, 2.打开网站,导入文件,开启base64按钮,下载转换后的文件 3. 在下载解压后的文件夹中找到stylesheet.css,并复制其中的base64 4. 修改index.wxss文件,将url中的本地地址替换为base64

    2024年02月13日
    浏览(27)
  • 微信小程序基础使用-请求数据并渲染

    小程序模板语法-数据绑定 在js中定义数据 小程序的data是一个对象,不同于vue的data是一个函数 在模块中获取使用数据 小程序中使用 {{}} 实现数据与模板的绑定 内容绑定: view{{ 属性名 }}/view 属性绑定: input value=\\\"{{属性名}}\\\" / {{}} 内写的是表达式 简易双向绑定 小程序中提供了

    2024年02月08日
    浏览(76)
  • 【微信小程序】列表渲染wx:for

    🏆今日学习目标:第十二期——列表渲染wx:for 😃创作者:颜颜yan_ ✨个人主页:颜颜yan_的个人主页 ⏰预计时间:20分钟 🎉专栏系列:我的第一个微信小程序 哈喽大家好,本期是微信小程序专栏第十二期,本期我们将学习列表渲染wx:for。 注意:每期内容是连载呢,建议大家

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包