导出配置_Lua配置表导出优化

随着游戏的开发,项目的配置表数据越来越多,占用的内存越来越;配置表占用太大就会影响游戏加载速度,游戏流畅度的每一毫秒都是我们的必争之路。

	[1] = {DungeonID=10000, Dungeon= "王进打高俅", NextDungeonID=10100, BattleID= {10001, }, BattleTime=0, Quality=0, BackMusic= "BGM_Fight", },[2] = {DungeonID=10100, Dungeon= "鲁提辖,拳打镇关西", NextDungeonID=10200, BattleID= {10101, 10102, }, BattleTime=0, Quality=0, BackMusic= "BGM_Fight", },[3] = {DungeonID=10200, Dungeon= "五台山,僧与俗的较量", NextDungeonID=10300, BattleID= {10201, 10202, 10203, 10204, 10205, 10206, 10207, 10208, }, BattleTime=0, Quality=0, BackMusic= "BGM_Fight", },

我们项目采用的配置表存储方式是Lua表格,策划配表用excel配置,然后使用网上的开源工具excel2lua导出lua表格,业务逻辑使用的时候直接import表就好了。在观察了导出的lua表格后,我们整理出一堆待优化的问题

1. 没有意义的空值(比如0,[]等)
2. 重复数据
3. 默认值
4. 字段名优化
5. 客户端、服务端表格分离

搞清楚了数据冗余的原因,我们就可以制定优化方案:

没有意义的空值(比如0,[]等)

空的table:我们建了一张全局表GlobelEmptyTable = {},然后把这些空table都指向这个GlobelEmptyTable

重复数据

对于重复数据,我们在lua表新建一张duplication表,用来存放重复数据,然后把重复的数据,都指向这张表里面相应的重复的数据。

默认值

通过观察可以发现其中有部分字段很容易重复,如:BattleTime、Quality等, 这些字段通常为枚举或者有固定的分类,只有几个不同的值,然而配置表中每个item都需要为这些内容创建一个字段。
我们的优化方案是,利用lua的特性--原表(metatable),建一张defaultValues表,在导出的时候,选取出现次数最多的值作为每个字段的原表,存到defaultValues,然后剔除每行中与默认值相同的字段,从而节省内存。
local defaultValues = {Dungeon = "",Describe = "",PlayerLevel = 0,Name = "",NeedStar = 0,BackMusic = "BGM_Fight",PrizeInfo = 0,Crime = "",Num = 1,Place = "",BattleID = gConstEmptyTable,BackGround = "",NextDungeonID = 0,DungeonID = 0,ID = 0,
}dolocal base = {__index = defaultValues, --基类,默认值存取__newindex = function()--禁止写入新的键值error("Attempt to modify read-only table")end}for k, v in pairs(DUNGEON_LIST) dosetmetatable(v, base)endbase.__metatable = false --不让外面获取到元表,防止被无意修改
end

字段名优化

热心网友给我提出这种优化,但是这种类似CSV存储格式,可想而知,内存肯定可以降低很多,我简单实现了一下,比对了一下内存,差别还是很大的!!!但是这种存储格式和默认值方案冲突,只能取舍,现在项目已经做完了,下个项目可以试一下这种方案。

608e462337078223b23e9d3c51321f32.png
修改前

93a467b52a328fe4b44461ff472812e7.png
修改后
local KeyMap = {costRes = 1,costTime = 2,troopsCount = 3,power = 4,model = 5,
}local BUILD101 = {[1] = {{}, 0,  2, 69, "castle1", },[2] = {{ 1001, 1782, 1002, 2430, 1003, 2430, 1004, 1458, }, 295, 2, 166, "castle1", },[3] = {{ 1001, 2673, 1002, 3645, 1003, 3645, 1004, 2187, }, 1080, 2, 302, "castle1", },
}dolocal base = {__index = function(table,key)local keyIndex = KeyMap[key]if not keyIndex thenprint("key not found: ",key)return nilendreturn table[keyIndex]end, --基类,默认值存取__newindex = function()--禁止写入新的键值error("Attempt to modify read-only table")end}for k, v in pairs(BUILD101) dosetmetatable(v, base)endbase.__metatable = false --不让外面获取到元表,防止被无意修改
end

客户端、服务端表格分离

服务器对于这么点内存,根本不会在意,但是客户端大不一样,是个精打细算的好媳妇,每一KB都要计较的,所以,我们设计一个参数来控制配置表导出对象,C:客户端、S:服务端,在和策划设计表的时候,告知哪些是客户端需要的参数,导出的时候,按C、S导出2张表。

本文中使用的配置表优化工具源码已经放在github,需要的朋友可以自取:)https://github.com/Aver58/Tools

使用元表优化 Lua 配置文件​www.orztu.com
683418146ddf896ee4dad96088c71ccd.png
Lua配置表存储优化方案 - UWA Blog​blog.uwa4d.com
7f1bd9dd953cba66d8863edbe3945d8b.png

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

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

相关文章

iOS数据存取---iOS-Apple苹果官方文档翻译

本系列所有文章,链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2013年12月29日更新版) 本文对应pdf文档下载链接,猛戳—>:数据存取文档.key.zip3.1 MB数据存取文档.pdf1.1 MB 数据存取/*技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://w…

为什么打不开_发票查重百科导出的发票台账为什么附件打不开?

1在扫描完发票之后,很多人都习惯性的定期将扫描的电子发票台账导出来,目前电子发票查重工具小程序版提供了两种导出方式:通过邮件的方式将指定日期内的发票台账直接发送到指定的邮箱;直接将指定日期内的发票台账下载到手机上进行查…

无法找到脚本文件 C:/Windows/explorer.exe:574323188.vbs

今天打开电脑后电脑有点反常,在启动时没有运行 “局域网” 保护的程序,而且还他是 “无法找到脚本文件”如下图: 发现这个东西后,第一反应,拔掉网线、因为很有可能是中病毒了,当时就出了一身冷汗&#xff0…

T-SQL:SQL Server-数据库查询语句基本查询

ylbtech-SQL Server-Basic:SQL Server-数据库查询语句基本查询SQL Server 数据库查询语句基本查询。 1,数据库查询语句基本查询数据库SQL ServerOracle基本语句 select select * from titles select title_id,title,price,pub_id from titles select * from title …

修改无效_修改劳动合同日期被认定无效,青岛一企业被判赔双倍工资

劳动合同法规定,用人单位超过一个月不满一年未与劳动者订立书面劳动合同的,应当向劳动者每月支付二倍的工资。在现实中,经常遇到的情况是续签合同时,已经到期的劳动合同与新合同之间的空档期,如果管理混乱或者遇到特殊…

HDUOJ-----2065红色病毒问题

"红色病毒"问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3339 Accepted Submission(s): 1422 Problem Description医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相…

下拉框_jQuery 美化界面的下拉框

插件简介之前我们介绍过一款基于jQuery多级联动美化版Select下拉框,很多朋友都非常喜欢,可见经过美化过的下拉框的确可以让你的网页更为精妙。今天我们要介绍的这款美化界面下拉框也是基于jQuery的,它的特点是可以通过上下箭头微调选择&#…

如何判断平台工具集去做条件编译(VC++目录、预处理器定义、$(PlatformToolsetVersion))...

作者:zyl910 从VS2010开始,提供了一个平台工作集(Platform ToolSet)选项用于配制vc编译版本。到了VS2012,更是因为默认平台工具集不支持WindowsXP,导致经常需要切换到xp版平台工具集,VS2013也是…

c#语言基础编程-转义符

C#转义字符: 引言 为了在程序中能够控制字符的输出以及区分开双引号和单引号(双引号和单引号在程序中标示里面的内容为字符串和字符),所以用一种特殊的字符常量;是以反斜线”\”开头,后跟一个或几个字符。让其具有特定…

图片图层隐写_【软件】imageIN · 图影-隐藏文件到图片,简单轻快的图片隐写工具...

还记得以前的图种制作吗,今天给大家分形下一个相关的工具。度盘下载(imageIN Beta1.0 (2.18MB)) :pan.baidu.com/s/1hqve8YS官网下载:本地下载这是一个能把图片中嵌入文件、文本、隐藏水印的隐写工具这种嵌入是基于图像本身的而不是基于文件的…

mysql 密码长度约束_MySQL简单操作【1、在cmd下MySQL的运行及简单增删改查】

上篇文章介绍了在Windows10下安装MySQL,本篇文章介绍cmd下简单的操作。1、登录 MySQL当 MySQL 服务已经运行时, 我们可以通过 MySQL 自带的客户端工具登录到 MySQL 数据库中, 首先打开命令提示符, 输入以下格式的命名:mysql -h 主机名 -u 用户名 -p参数说明&#xf…

mysql十大报错_MySQL十大报错函数

1.Floor()round() 遵循四舍五入把原值转化为指定小数位数,如:round(1.45,0) 1;round(1.55,0)2floor()向下舍入为指定小数位数 如:floor(1.45,0) 1;floor(1.55,0) 1ceiling()向上舍入为指定小数位数 如:ceiling(1.45,0) 2;ceili…

.NET Framework 4 不能先解压再使用setup.exe安装的解决方法

微软.NET Framework离线安装包有时无法做到断网离线安装,仍然需要下载某些文件后才能继续安装,速度慢不说,安装前还必须要联网。 这时就可以自己用7z什么的解压微软的安装包,然后收集整合要下载的文件后,就可以通过解压…

laravel mysql 队列_Laravel 队列使用

Laravel 队列使用1.修改根目录.env文件的 **QUEUE_CONNECTION **字段配置为 databaseLaravel可配置多种队列驱动,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具体参见app/config…

Swift基础语法: 30 - Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写

前面我们讲了有关于脚本语法的基本认识以及使用, 现在让我们来看看Swift的其他东西: 1.基类 所谓的基类, 就是OC中的父类, 不继承任何类, 就叫做基类, 让我们来看看例子: class Vehicle {var currentSpeed 0.0var description: String {return "traveling at \(currentSp…

机器学习1k近邻

自己一直学习计算机视觉方面的东西,现在想学习一下数据挖掘跟搜索引擎,自己基础也有点薄弱,看朱明的那本数据挖掘,只能片面的了解这个数据挖掘。不过最近有一本书 机器学习实战,于是乎通过实战的形式了解一下基本的算法…

C#中枚举类型和int类型的转化

先定义一个枚举类型 public enum PropertyType { 小学 0, 初中, 高中&#xff0c;大学 }; int ->enum int d2; PropertyType a(PropertyType)d; int <- enum PropertyType d PropertyType.小学; int a Convert.ToInt32(d); Enum类有关的方法 E…

linux mysql odbc驱动安装_MySQL ODBC 驱动安装

阅读目录一、在线安装1、yum在线安装驱动2、配置驱动3、测试连接二、编译安装1、MySQL创建测试用户和测试库2、安装驱动3、配置驱动4、测试一、在线安装1、yum在线安装驱动# yum -y installunixODBC#yum -y install mysql-connector-odbc2、配置驱动(1)查看驱动程序相关信息# c…

通过 HTTPS 和 SSL 确保 Windows Azure 网站 (WAWS) 安全

编辑人员注释&#xff1a;本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写。 随着身份盗窃和各种形式的网络犯罪迅速增多&#xff0c;使用安全套接字层 (SSL) 对网站进行保护变得越来越重要和普遍。如果将网站托管在 Windows Azure 网站 (WAWS) 上&#xff0c;您可…

mysql之多表查询

今天在项目中遇到一个数据库查询的问题&#xff1a;三张表分别放置不同的东西&#xff1a;分享的音频相关数据、分享的文字图片说说、分享的主题相关数据。所有分享的东西都可看做新鲜事&#xff0c;现在要求从这三张表将相同的几个字段的数据全部查找出来按照发布时间先后排序…