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索性就把达到这 ...
随机推荐
- 不想再被鄙视?那就看进来! 一文搞懂Python2字符编码
程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广,作为一个Python程序员,自然最关心的是下面这幅图啦 我们项目组一值使用 ...
- C#中抽象类与接口的区别
1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分.或者说,它是面向对象 ...
- DevExpress.XtraEditors.TextEdit 设为密码输入框
DevExpress.XtraEditors.TextEdit 设为密码输入框,解决办法: 设计窗口-->属性Properties-->Mask节点-->PasswordChar输入 ...
- 《Linux命令行与shell脚本编程大全》第十二章 使用结构化命令
许多程序要就对shell脚本中的命令施加一些逻辑控制流程. 结构化命令允许你改变程序执行的顺序.不一定是依次进行的 12.1 使用if-then语句 如下格式: if command then ...
- JSF页面中使用js函数回调后台action方法
最近遇到了一个问题就是在JSF页面中嵌入html页面,这个html页面中很多功能是使用js动态生成的,现在需要在js函数里想去调用JSF中action类method()方法并动态传送数据给后台进行处理 ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记02
day2课程目录: 操作系统的历史 二进制运算 字符编码与计算机容量 编程语言介绍 开发语言分类 演讲能力锻炼 day2课程内容梳理: 操作系统发展史: Unix系统 极其稳定 现在很多银行还在用 L ...
- 用python实现一个简单的词云
对于在windows(Pycharm工具)里实现一个简单的词云还是经过了几步小挫折,跟大家分享下,如果遇到类似问题可以参考: 1. 导入wordcloud包时候报错,当然很明显没有安装此包. 2. 安 ...
- Office 365系列 (1)概览:完整的云中Office
Office365(以下简称O365)是一个集Office,企业邮箱,日历,日程管理,音视频会议 ,企业网盘 ,企业协作平台为一体的,旨在提高团队办公效率,减少基础设施投资和IT运维压力的解决方案.在 ...
- Mariadb Galera Cluster 群集 安装部署
#Mariadb Galera Cluster 群集 安装部署 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...
- video字幕无法显示,video视频在google中无法控制快进
video字幕(track)无法显示: 直接用关闭同源策略的浏览器打开你的HTML文件可以请求到字幕文件并显示字幕: 从hbuilder中打开html文件,在从里面打开google浏览器去浏览HTML ...