UI性能优化
我的思路
在移动设备上打开UI界面卡顿,等待时间长,页面白块,等等体验是很不好的。本文记录我在工作中解决UI卡顿的方法。
我主要从以下方面入手
资源量
界面打开做的操作
界面自身的逻辑
IO的读写(包括收到的网络协议数据量)
我的环境
项目类型:大型3DMMOARPG
Unity3D 5.3.7 基于UGUI,UI基础框架使用KSFramework:https://github.com/mr-kelly/KSFramework
客户端配置文件通过sqlite存储(在Lua中读取数据)
测试机型:
OPPOA57 中端机器 ,3G内存
详细参数:http://detail.zol.com.cn/1161/1160598/param.shtml
优化目标
打开界面的瞬间,就能得到反馈,等待时间在0.2s之内。
页面的内容可以是逐步显示,但不希望出现卡住的现象。
UI的Assetbundle大小
建议一个UI界面的的Assetbundle文件大小在1mb以内,且依赖关系不要超过三个,在打包出来的*.manifest文件中(Dependencies节点)可以看到资源依赖关系。
如果一个界面的图片量过多,美术可以考虑在设计上精简图集,重复利用,九宫格,抽离大的背景图等方法,减少资源量。
建议:一个界面使用一个图集,减少图集间的交叉引用。
UI图占用的内存
查看单个界面的资源占用内存大小
1、点击 Window - 点击Profiler ,打开Profiler ,切换到 Memory页签
2、点击 Detaild - 点击 Take Sample ,选择 Assets/Texture2D,查看每张图片占用的内存
建议:单个界面图集的内存占用控制在1~2M之内,其它特殊情况,可以考虑做成大图加载
整个UI界面的Gameobject数量
如果UI界面中Gameobject的数量过多,在加载Assetbundle实例化Gameobject时,耗时会更长。
我的例子:
(1个道具Prefab的Gameobject数量在10个左右)
统计UI界面的gameobject数量脚本
[MenuItem("UI/统计当前场景的Gameobject数量")]
public static void MenuGameobjectCount()
{
var obj = GameObject.FindObjectOfType<UIWindowAsset>();
if (obj)
{
var graphics = obj.GetComponentsInChildren<Transform>(true);
Debug.LogFormat("当前场景的Gameobject数量:{0}",graphics.Length);
}
}
建议:单个界面的gameobject数量控制在100以内
打开界面做的操作
减少在UI打开瞬间做的操作,耗时的计算或者操作可以延时处理。
每帧生成Gameobject
如果列表的数量过多,建议每帧或者间隔多少帧进行Instantiate操作。
示例代码:
function UIRewardMonthly:Update()
if self.index and self.index <= self.maxCell then
local item = GameObject.Instantiate(self.itemCell.gameObject)
item.transform:SetParent(self.scrollContent.transform, false)
self:DoRenderItem(self.index, item.transform, self.uiCache[self.index])
if self.index == self.maxCell then
--print("全部格子生成完成")
end
self.index = self.index + 1
end
end
IO的读取
在移动端的IO操作是很耗时的,比如读写配置文件。
解析网络数据也是一种IO的操作,如果网络数据量大,解析也是较耗时的。
建议:
1、尽量减少在打开界面时做IO的操作。
2、对需要的数据提前处理,数量很多的网络数据可以进行分页。
3、对于本地数据可以进行缓存,避免在循环中进行查询或文件读写。
UI性能优化的更多相关文章
- Android UI性能优化详解
设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI.UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计.无论你的ap ...
- Unity UI性能优化技巧
本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划 ...
- Android UI性能优化实战, 识别View中的性能问题
出自:[张鸿洋的博客]来源:http://blog.csdn.net/lmj623565791/article/details/45556391 1.概述 2015年初google发布了Android ...
- Android UI性能优化实战 识别绘制中的性能问题
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45556391: 本文出自:[张鸿洋的博客] 1.概述 2015年初google ...
- [看图说话] 基于Spark UI性能优化与调试——初级篇
Spark有几种部署的模式,单机版.集群版等等,平时单机版在数据量不大的时候可以跟传统的java程序一样进行断电调试.但是在集群上调试就比较麻烦了...远程断点不太方便,只能通过Log的形式,进行分析 ...
- Feathers UI 性能优化
Feathers UI作者写的 http://joshblog.net/2013/feathers-performance-tips/
- 关于UI性能优化
1.使用已经有的VIEW,而不是每次都去新生成一个 2.创建自定义类来进行组件和数据的缓存,在下一次调用的时候直接从FLAG中取出 3.分页,预加载 使用VIEWSTUB进行调用时加载 VIEWSTU ...
- android app性能优化大汇总(UI渲染性能优化)
UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交互心理学的角度来考虑 ...
- Android应用性能优化(转)
人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...
随机推荐
- [深度学习]实现一个博弈型的AI,从五子棋开始(1)
好久没有写过博客了,多久,大概8年???最近重新把写作这事儿捡起来……最近在折腾AI,写个AI相关的给团队的小伙伴们看吧. 搞了这么多年的机器学习,从分类到聚类,从朴素贝叶斯到SVM,从神经网络到深度 ...
- HTML+CSS+js常见知识点
一.HTML.CSS常见知识点 1.垂直居中盒子 /* 方法一 */ html, body { width: 100%; height: 100%; padding: 0; margin: 0; } ...
- 清理win10过期补丁的命令
作用是删除已经被新版本取代的旧系统文件 DISM.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase 注1: 执行后, 补丁就无法 ...
- Excel、Exchange 和 C# (摘要)
Excel.Exchange 和 C#Eric GunnersonMicrosoft Corporation 2003年4月21日 摘要:Eric Gunnerson 将向您介绍如何使用 Outloo ...
- SSM :MyBatis与Spring的整合
MyBatis与Spring的整合 一:Spring整合MyBatis的准备工作: (1.)在项目中加入Spring,ByBatis及整合相关的jar文件 (2.)建立开发目录结构,创建实体类 (3. ...
- React+Redux实现追书神器网页版
引言 由于现在做的react-native项目没有使用到redux等框架,写了一段时间想深入学习react,有个想法想做个demo练手下,那时候其实还没想好要做哪一个类型的,也看了些动漫的,小说阅读, ...
- PAM - 可插拔认证模块
1.为什么要使用PAM 为了让用户更合理地使用系统,应用程序或服务(如sshd.login.su.password.ftp等)不可避免地需要对用户进行安全认证,若按照各自的规则去配置非常耗费时间和精力 ...
- JS构造函数模式
构造函数是可以创建特定类型对象的函数,可以接受参数定义函数成员.如果之前做过java比较好理解,举个例子: function exampleFunction(arg1, arg2, arg3){ th ...
- java八大基本数据类型
java中八大数据类型的储存空间以及使用场景表示如下 )1.int:4字节,可以表示的数为-2^31 - 2^31-1.整数的默认类型.封装类也如此 .整数相除的时候,会舍弃小数部分.结果也是整数,例 ...
- 在Github发布自己的compile包
Android入门到转行做服务员--在Github发布自己的compile包 2017-12-05 15:27:10 这是一粒代码发布的第一篇博客,一粒代码从事android开发,近期打算开始搞搞博客 ...