GUIReader中有个widgetFromJsonFile的方法,此方法是用于解析json文件(cocostudio生成的UI的)并返回该文件的父节点(Widget),然后便于进一步的UI操作(如获得各种子类进行填充数据作显示等)。

那么这时候问题就来了,当须要在一个页面或一个控件(尤其是翻页、列表等)中,须要载入入大量的节点(均是由单独json解析得到的),这样的大量载入将会使手机很痛苦(一个30K左右的,在载入数量达到50个左右时,就会卡住在2~3秒)。

所以。这里须要得到优化。

事实上优化的思路蛮简单。首先找到问题:既然时间是花在解析大量json文件里,也就是说,这里的解析的json是与你当前须要显示的数据集合一一相应的。简单来说:造成卡的原因就是你有几个数据就解析几次json(非常多人都会这样操作。由于他们把解析后的widget类直接进行数据填充)。这在之后得到优化之后你会认为这是非常不应该的做法。

所以,我们非常easy得到一个结论:要解除这样的解析1个json文件后才干填充数据并进行被加入的绑定操作!

思路: 仅仅解析当前页面(或控件,尤其是翻页)能显示的最少子节点数量(这在如今看来是必须的。由于同一个子节点仅仅能有1个根节点),然后将解析后的节点(widget)统一放在某一数据结构中(队列或数组等按需自定);(这里要解说一下:假如某游戏有一个十连抽招募功能,每次招募会在一个页面显示十张卡牌。这里的显示最优化就是这样:在登陆时载入10个卡牌的节点类放在一数据结构中。在每次招募过后。我们需解析接下来显示界面的json(这里不建议将十张静态增加这里,由于这样这个文件会变大。跟之前数据跟UI操作被绑定是一样的)。所以这里每次显示都从那数据结构中遍历获取并填充数据增加页面中)。优化过后。举个样例:这里假如一个玩家点十连抽10次。我仅仅是解析了:1个页面的json
* 10 + 十张卡牌的json。而不是(1个页面json+十张卡牌json)*10;

时间得到优化的代价就是付出了一定内存空间,当然,这是绝对值得的。

兴许我会写一些实现以帮助大家更好地理清这里的思路。

Cocos2dx&Lua - UI显示优化之怎样解决解析大量json文件的更多相关文章

  1. cocos2d-x的lua脚本加载CocostudioUI两种方式

    前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...

  2. 关于cocos2dx for lua资源加载优化方案

    之前我写游戏加载都是从一个json文件写入要加载的文件名来实现加载,但是如果资源 比较多的情况下,会导致非常难管理,需要逐个写入.所以换了另外一种方式来加载文件. 首先,我是通过场景之前的切换时候,加 ...

  3. 《Cocos2d-x实战 Lua卷》上线了

    感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.htm ...

  4. 【转】Cocos2d-x下Lua调用自定义C++类和函数的最佳实践

    转自:http://segmentfault.com/blog/hongliang/1190000000631630 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明 ...

  5. Android UI性能优化详解

    设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI.UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计.无论你的ap ...

  6. Learning Lua Programming (4) Cocos2d-x中Lua编程(一)

    刚开始接触cocos2d-x 下的Lua编程,主要参看了李华明大神的博客中的介绍,http://blog.csdn.net/xiaominghimi/article/category/1155088  ...

  7. Unity UI性能优化技巧

    本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划 ...

  8. [Android] Android开发优化之——对界面UI的优化(2)

    在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...

  9. [Android] Android开发优化之——对界面UI的优化(1)

    在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...

随机推荐

  1. POJ3666 Making the Grade [DP,离散化]

    题目传送门 Making the Grade Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9090   Accepted: ...

  2. android 内存泄漏检测工具 LeakCanary 泄漏金丝雀

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 内存泄漏检测工具 android 内存泄漏检测工具 ======== 内存泄漏 就是  无用的对 ...

  3. BZOJ 3544 [ONTAK2010]Creative Accounting(set)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3544 [题目大意] 找一段区间使得Σai mod m的值最大. [题解] 首先计算前缀 ...

  4. BZOJ 4443 [Scoi2015]小凸玩矩阵(二分答案+二分图匹配)

    [题目链接]http://www.lydsy.com/JudgeOnline/problem.php?id=4443 [题目大意] 从矩阵中选出N个数,其中任意两个数字不能在同一行或同一列 求选出来的 ...

  5. 【差分约束系统】【最短路】【spfa】CDOJ1646 穷且益坚, 不坠青云之志。

    求一个有n个元素的数列,满足任意连续p个数的和不小于s, 任意连续q个数的和不大于t. 令sum[i]表示前i项的和(0<=i<=n,sum[0]=0) 那么题目的条件可转化为: sum[ ...

  6. maven打包出现找不到java.lang包的问题

    修改pom文件中的bootclasspth路径为${java.home}/lib/rt.jar;${java.home}/lib/jce.jar windows为分号 linux为冒号

  7. Java本地方法(native方法)的实现

    Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能. 可以将 ...

  8. codevs 1779 单词的划分

    1779 单词的划分 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description Problem有一个很长的由小写字母组成字符串.为了便于对 ...

  9. web安全开发指南--权限管理

    2.1               访问控制安全规则 1 访问控制必须只能在服务器端执行. 2 只通过session来判定用户的真实身份,避免使用其它数据域的参数(比如来自cookie.hidden域 ...

  10. Visual Studio Code 安装 RUST

    1.下载RUST源码 https://static.rust-lang.org/dist/rustc-1.18.0-src.tar.gz ,解压到C盘   C:\rustc-1.18.0-src 2. ...