Cocos2dx&Lua - UI显示优化之怎样解决解析大量json文件
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文件的更多相关文章
- cocos2d-x的lua脚本加载CocostudioUI两种方式
前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...
- 关于cocos2dx for lua资源加载优化方案
之前我写游戏加载都是从一个json文件写入要加载的文件名来实现加载,但是如果资源 比较多的情况下,会导致非常难管理,需要逐个写入.所以换了另外一种方式来加载文件. 首先,我是通过场景之前的切换时候,加 ...
- 《Cocos2d-x实战 Lua卷》上线了
感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.htm ...
- 【转】Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
转自:http://segmentfault.com/blog/hongliang/1190000000631630 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明 ...
- Android UI性能优化详解
设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI.UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计.无论你的ap ...
- Learning Lua Programming (4) Cocos2d-x中Lua编程(一)
刚开始接触cocos2d-x 下的Lua编程,主要参看了李华明大神的博客中的介绍,http://blog.csdn.net/xiaominghimi/article/category/1155088 ...
- Unity UI性能优化技巧
本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划 ...
- [Android] Android开发优化之——对界面UI的优化(2)
在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...
- [Android] Android开发优化之——对界面UI的优化(1)
在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...
随机推荐
- Spring Boot高级
Spring Boot高级内容概要一.Spring Boot与缓存二.Spring Boot与消息三.Spring Boot与检索四.Spring Boot与任务五.Spring Boot与安全六.S ...
- Hive的严格模式
在hive里面可以通过严格模式防止用户执行那些可能产生意想不到的不好的效果的查询,从而保护hive的集群. 用户可以通过 set hive.mapred.mode=strict 来设置严格模式,改成u ...
- AGC 022 C - Remainder Game
题面在这里! 显然权值是 2^i 这种的话就是要你贪心,高位能不选就不选. 并且如果 % x 之后再去 % 一个>=x的数是没有用的,所以我们可以把操作的k看成单调递减序列. 这样的话就是一个有 ...
- HDU 6040 Hints of sd0061(nth_element)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6040 [题目大意] 给出一个随机数生成器,有m个询问,问第bi小的元素是啥 询问中对于bi< ...
- Problem G: 零起点学算法102——删除字符
#include<stdio.h> #include<string.h> int main() { ],a; while(gets(ch)!=NULL) { scanf(&qu ...
- Linux虚拟化技术KVM、QEMU与libvirt的关系(转)
说明:个人理解,KVM是内核虚拟化技术,而内核是不能使用在界面上使用的,那么此时QEMU提供了用户级别的使用界面,相互辅助.当然,单独使用QEMU也是可以实现一整套虚拟机,不过QEMU+KVM基本是标 ...
- YS动态口令系统接入流程
动态口令是保护用户账户的一种常见有效手段,即用户进行敏感操作(比如登录)时,需要用户提供此动态生成的口令做二次身份验证,假设用户的口令被盗,如果没有动态口令,也无法进行登录或进行敏感操作,保护了用户的 ...
- 基于tiny4412的Linux内核移植(支持device tree)(一)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- ArcGIS10.1发布WFS-T服务
官方帮助文档:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/0154000003m3000000/ 本文介绍了如何使用 ...
- 转:Oracle密码过期,取消密码180天限制
原文:https://www.cnblogs.com/soar-gh/p/5949158.html 1.进入sqlplus模式 sqlplus / as sysdba; 2.查看用户密码的有效期设置( ...