提升Unity WebGL游戏启动速度

news2024/10/7 2:28:16

一、查看启动耗时

通过修改unity-namespace.js中hideTimeLogModal为false,显示timelog开发者可以看到小游戏目前的启动首屏时长:

将其设置为false后,启动小程序后就会显示启动耗时

要知道各个阶段的含义,我们必要理解启动流程。

其中关键过程:

启动准备阶段有两个处理分支:资源与代码分包处理,两者并行。

资源(data)处理:下载、解压并保持在内存,资源包括:构建场景及依赖、Resource目录所有资源、Unity默认内建资源。

代码分包(wasm.code.br)处理:下载代码分包,解压到内存、编译与实例化。

完成准备阶段后进入Unity引擎初始化与首场景加载。

然而小游戏启动主要由三部分影响:

首包资源下载

WASM代码下载和编译

引擎初始化与开发者首帧逻辑

因此可以从三个方面来优化启动时间

1.首资源包下载与体积

首包资源(webgl/Build目录下的data文件)主要有以下组成:

unity default resources文件,引擎默认资源,如Arial字体,默认mesh,纹理等。

il2cppmetadata, C#代码使用il2Cpp生成cpp代码时,生成的类,方法等信息。

unity builtin_extra, always include的shader。

BuildSettings中所有active的场景。

Resources文件夹中的资源,以及其中的资源引用到的其他资源。

全局设置及引用到的资源,如splash图片等。

首次下载或更新首资源包时,需要在小游戏的启动前期下载,因此文件大小极为影响游戏的启动速度。

因此要对首资源包进行压缩传输,使用微信开发者工具的network标签确认传输量,网络传输大小应控制在3~5MB。

2.WASM代码下载和编译

WASM分包的大小会直接影响代码下载时长以及程序初始化编译的时间,关于WASM代码对启动速度的影响,需要注意以下几个方面:

转换工具会将Unity WebGL包自动进行br压缩(压缩至原code包的20%)。

WASM代码下载与首包资源并行下载,因此占用下载带宽。

WASM编译需要CPU资源,对于低端机来说时间依然可观。

因此原始代码包(webgl/Build目录下的code文件)不超过30MB, 建议开发者勾选"Strip Engine Code"并设置"Managed Stripping Level"为High。同时,可以使用代码分包工具将代码包减少到原始尺寸的到1/3。

勾选"Strip Engine Code":

这个选项的作用是去除Unity引擎中未使用的代码,从而减少最终构建的代码包大小。

设置"Managed Stripping Level"为High:

用于控制对C#脚本的代码剥离级别。设置为"High"意味着Unity将更积极地去除未使用的代码和资源,进一步减小包大小。

步骤如下:

打开Unity编辑器。

选择"Edit"(编辑)菜单,然后选择"Project Settings"(项目设置)。

在弹出的窗口中,选择"Player"(玩家)。

在"Player Settings"窗口中,找到"Other Settings"(其他设置)部分。

勾选"Strip Engine Code"选项。

在"Managed Stripping Level"下拉菜单中选择"High"。

3.引擎初始化与开发者首帧逻辑

在timelog中呈现的首场景耗时即为引擎初始化与开发者首帧逻辑,关于该阶段耗时,需要注意的是:

MonoBehaviour脚本的首帧Start/Awake应足够少逻辑,以避免增加首帧的加载时间,优先将画面呈现。

初始场景应该尽量简单,通常是一个Splash屏幕(启动画面),这样可以快速加载,减少用户的等待时间。

初始场景中需要后续主场景或配置加载时可采取分帧策略,避免在Start或Awake方法中执行长时间的操作或阻塞调用,因为这会延长首帧的执行时间,影响用户体验。

可以使用预下载功能,该功能可以利用此阶段的网络空闲期进行资源下载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1890461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CDC模型

引言 聚类是一种强大的机器学习方法,用于根据特征空间中元素的接近程度发现相似的模式。它广泛用于计算机科学、生物科学、地球科学和经济学。尽管已经开发了最先进的基于分区和基于连接的聚类方法,但数据中的弱连接性和异构密度阻碍了其有效性。在这项…

基于Java英语学习网站设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

玩玩快速冥(LeetCode50题与70题以及联系斐波那契)

一.算法快速幂 今天刷到两个题,比较有意思,还是记录一下. 先来讲讲50题. LeetCode50(Pow(x,n)) 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 这道题一看很平常啊,不就一直乘嘛,循环走一次就够了.但是很抱歉,单纯的想…

计算机网络知识普及之四元组

在涉及到TCP/UDP等IP类通信协议时,存在四元组概念 这里只是普及使用 先来一些前置知识,什么是IP协议? IP协议全称为互联网协议,处于网络层中,主要作用是标识网络中的设备,每个设备的IP地址是唯一的。 在网…

ASO优化:如何提高应用的可见性

在竞争激烈的应用市场中ASO优化成为了提高应用可见性的重要手段。以下是一些提高应用可见性的方法: 1. 选择合适的关键词 找出和您应用高度相关并且具有一定搜索量的关键词,确保关键词与应用的核心功能和用户搜索意图匹配。比如:当您的应用是…

【Rust入门】生成随机数

文章目录 前言随机数库rand添加rand库到我们的工程生成一个随机数示例代码 总结 前言 在编程中,生成随机数是一种常见的需求,无论是用于数据分析、游戏开发还是模拟实验。Rust提供了强大的库来帮助我们生成随机数。在这篇文章中,我们将通过一…

1.4 ROS2集成开发环境搭建

1.4.1 安装VSCode VSCode全称Visual Studio Code,是微软推出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、GIT 等特性,支持插件…

谈谈浏览器的事件机制:捕获、冒泡

浏览器事件的传播有三个阶段:捕获阶段,目标阶段,冒泡阶段 第一部分称为捕获阶段,该阶段包括从舞台到目标节点的父节点范围内的所有节点。第二部分称为目标阶段,该阶段仅包括目标节点。第三部分称为冒泡阶段。冒泡阶段包…

安装Gitlab+Jenkins

GItlab概述 GitLab概述: 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。 GitLab拥有与…

工业一体机根据软件应用需求灵活选配

在当今工业领域,数字化、智能化的发展趋势愈发明显,工业一体机作为关键的设备,其重要性日益凸显。而能够根据软件应用需求进行灵活选配的工业一体机,更是为企业提供了高效、定制化的解决方案。 一、工业一体机的全封闭无风扇散热功…

【软件测试】性能测试 | 概念 | 常见术语 | 性能指标 | 分类 | 流程

性能测试 文章目录 性能测试一、什么是性能测试1.生活中遇到的软件的性能问题2.性能测试定义3.性能测试和功能测试有什么区别4.什么样的表现属于软件性能好、什么样的表现不好5.影响一个软件性能因素有哪些 二、为什么进行性能测试三、性能测试的常见术语以及性能测试的衡量指标…

深入了解自动化:聊聊什么项目适合做自动化测试?

自动化测试 什么是自动化测 什么是自动化测试? 随着软件产业的不断发展,市场对软件周期的要求越来越高,于是催生了各种开发模式,如大家熟知的敏捷开发,从而对测试提出了更高的要求。此时,产生了自动化测试…

双指针系列第 8 篇:盛水最多的容器。几句话讲明白!

Leetcode 题目链接 思路 取首尾双指针和水量如下所示&#xff0c;设高度函数为 h ( i ) h(i) h(i)&#xff0c;在下图中 h ( l ) < h ( r ) h(l) < h(r) h(l)<h(r)。 观察以 l l l 为左边界所能构成的其他水量&#xff0c;与矮的右边界搭配结果如下。 与高的…

LLM大模型中LoRA是什么?面试经验回答汇总(2024.7月最新)

目录 1 什么是 LoRA&#xff1f; 2 LoRA 的思路是什么&#xff1f; 3 LoRA 的特点是什么&#xff1f; 4 简单描述一下 LoRA? 5 QLoRA 的思路是怎么样的&#xff1f; 6 QLoRA 的特点是什么&#xff1f; 7 AdaLoRA 的思路是怎么样的&#xff1f; 8 LoRA权重是否可以合入…

乘用车副水箱浮球式液位计传感器

浮球式液位计概述 浮球式液位计是一种利用浮球在液体中浮动的原理来测量液位的设备&#xff0c;广泛应用于各种工业自动化控制系统中&#xff0c;如石油化工、水处理、食品饮料等行业。它通过浮球的上下运动来测量液位的高低&#xff0c;具有结构简单、安装方便、测量范围广、…

02:vim的使用和权限管控

vim的使用 1、vim基础使用1.1、vim pathname 2、vim高级用法2.1、查找2.2、设置显示行号2.3、快速切换行2.4、 行删除2.5、行复制粘贴 3、权限管理3.1、普通用户和特权用户3.2、文件权限表示 vim是Linux中的一种编辑器&#xff0c;类似于window中的记事本&#xff0c;可以对创建…

[工业网络] 模型建立

普渡大学ICS参考模型 普渡企业参考架构&#xff08;PERA&#xff09;是由西奥多J威廉姆斯&#xff08;Theodore J. Williams&#xff09;和普渡大学计算机集成制造工业大学联盟的成员在1990年代开发的企业架构参考模型。该模型被ISA-99&#xff08;现为ISA/IEC 62443&#xff…

开发者聊科学作息时间表

非常有幸对科学作息时间表app的开发者做一次采访。 问&#xff1a;你对科学作息时间表app满意么&#xff1f; 答&#xff1a;非常不满意&#xff0c;我们的设想是让他更智能&#xff0c;更多的提醒方式&#xff0c;更好的交互体验。如果作为一个闹钟他是非常不合格的&#xff0…

自然语言处理学习(2)基本知识 文本预处理+文本数据分析+文本增强

conda activate DL conda deactivate课程链接 一 一些包的安装 1 stanfordcorenlp 在anoconda prompt 里面&#xff1a;进入自己的conda环境&#xff0c;pip install stanfordcorenlp 进入方式 相关包下载&#xff0c;Jar包我没有下载下来&#xff0c;太慢了&#xff0c;这个…

昇思25天学习打卡营第6天|数据变换 Transforms

学习目标&#xff1a;熟练掌握数据变换操作 熟悉mindspore.dataset.transforms接口 实践掌握常用变换 昇思大模型平台学习心得记录&#xff1a; 一、关于mindspore.dataset.transforms 1.1 变换 mindspore.dataset.transforms.Compose将多个数据增强操作组合使用。 mindspo…