導出配置_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.pswp.cn/news/376170.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376170.shtml
英文地址,請注明出處:http://en.pswp.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…

企業QQ 增加在線交談鏈接

企業QQ的在線交流鏈接跟普通QQ的在線交流不一樣&#xff0c;普通QQ的在線交流&#xff0c;可以在http://shang.qq.com/v3/widget.html生成&#xff1b;企業qq的鏈接可以按以下步驟添加&#xff1a;第一步&#xff1a;引入企業QQjs腳本&#xff1a;<script charset"utf-…

為什么打不開_發票查重百科導出的發票臺賬為什么附件打不開?

1在掃描完發票之后&#xff0c;很多人都習慣性的定期將掃描的電子發票臺賬導出來&#xff0c;目前電子發票查重工具小程序版提供了兩種導出方式&#xff1a;通過郵件的方式將指定日期內的發票臺賬直接發送到指定的郵箱&#xff1b;直接將指定日期內的發票臺賬下載到手機上進行查…

無法找到腳本文件 C:/Windows/explorer.exe:574323188.vbs

今天打開電腦后電腦有點反常&#xff0c;在啟動時沒有運行 “局域網” 保護的程序&#xff0c;而且還他是 “無法找到腳本文件”如下圖&#xff1a; 發現這個東西后&#xff0c;第一反應&#xff0c;拔掉網線、因為很有可能是中病毒了&#xff0c;當時就出了一身冷汗&#xff0…

【轉】成功的程序員

我算是靠坑蒙拐騙進了程序員的門&#xff0c;然后一路狂奔。26 歲之前幾乎沒有任何寫代碼的經驗&#xff0c;研究生畢業卻意外選擇了一家不可能提供培訓的初創公司&#xff0c;在每日擔憂公司倒閉、害怕被炒魷魚以及同事冷落白眼的三重壓力下逆流而上&#xff0c;一年半后離職&…

requests 分類多級頁面_scrapy框架爬取多級頁面

spides.py# -*- coding: utf-8 -*-import scrapyfrom weather.items import WeatherItemfrom scrapy.crawler import CrawlerProcessimport re多級分類爬取class IgxSpider(scrapy.Spider):name igx_resultallowed_domains [www.igxpt.com]# start_urls [http://www.igxpt.c…

T-SQL:SQL Server-數據庫查詢語句基本查詢

ylbtech-SQL Server-Basic:SQL Server-數據庫查詢語句基本查詢SQL Server 數據庫查詢語句基本查詢。 1&#xff0c;數據庫查詢語句基本查詢數據庫SQL ServerOracle基本語句 select select * from titles select title_id,title,price,pub_id from titles select * from title …

C:打印菱形(自己的方法)

//-------------------&#xff0a;打印菱形&#xff0a;--------------------- int i,j,k; int n; printf("請輸入一個奇數n&#xff1a;"); scanf("%d",&n); for (i0; i<n/2; i) { for (j0; j<n/2-i; j) { printf(" "); } for (k0; …

修改無效_修改勞動合同日期被認定無效,青島一企業被判賠雙倍工資

勞動合同法規定&#xff0c;用人單位超過一個月不滿一年未與勞動者訂立書面勞動合同的&#xff0c;應當向勞動者每月支付二倍的工資。在現實中&#xff0c;經常遇到的情況是續簽合同時&#xff0c;已經到期的勞動合同與新合同之間的空檔期&#xff0c;如果管理混亂或者遇到特殊…

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下拉框&#xff0c;很多朋友都非常喜歡&#xff0c;可見經過美化過的下拉框的確可以讓你的網頁更為精妙。今天我們要介紹的這款美化界面下拉框也是基于jQuery的&#xff0c;它的特點是可以通過上下箭頭微調選擇&#…

字體縮放 SignedDistanceField

Unity中如果使用位圖字體&#xff0c;在縮放較大的情況下&#xff0c;字體失真嚴重&#xff0c;使用矢量字體可能會存在內存過大的情況。 Signed Distance Field Font Rendering將字體保存在圖片內&#xff0c;但是圖片存儲的并不是像素&#xff0c;而是距離&#xff0c;再通過…

【轉】SQL刪除重復數據方法

例如&#xff1a; id name value 1 a pp 2 a pp 3 b iii 4 b pp 5 b pp 6 c …

python批處理柵格轉點_python獲取柵格點和面值的實現

1、獲取指定位置的點值&#xff1a;OutputFile open(statisticResultTXT, w)cellvaluearcpy.GetCellValue_management(inputfilepathfilenname".tif",staionXY, "1")OutputFile.write(stationID"_"filenname""str(cellvalue)\n)Outpu…

看看別人的演講

淘寶&#xff1a;http://www.w3cmark.com/2014/137.html 轉載于:https://www.cnblogs.com/gaoxue/p/4330728.html

jsp中獲取WebContent路徑

方法一&#xff1a; 1 <script type"text/javascript" src"../js/data.js"></script> 方法2&#xff1a; 1 <% 2 String path request.getContextPath(); 3 String basePath request.getScheme()"://"request.getServerName()&…

layui文本框填充值_layui輸入框中只允許輸入整數的實現方法

如下所示&#xff1a;//轉化正整數function zhzs(value){value value.replace(/[^\d]/g,);if(!value){value parseInt(value);}return value;}其他的正則function clearNoNum(obj){obj.value obj.value.replace(/[^\d.]/g,""); //清除“數字”和“.”以外的字符ob…

YQL獲取天氣

$(function () { $.getJSON("http://query.yahooapis.com/v1/public/yql?callback?", { q: "select * from json where urlhttp://m.weather.com.cn/data/101210101.html", format: "json" }, function (data) { if (data.query.results) { v…

如何判斷平臺工具集去做條件編譯(VC++目錄、預處理器定義、$(PlatformToolsetVersion))...

作者&#xff1a;zyl910 從VS2010開始&#xff0c;提供了一個平臺工作集&#xff08;Platform ToolSet&#xff09;選項用于配制vc編譯版本。到了VS2012&#xff0c;更是因為默認平臺工具集不支持WindowsXP&#xff0c;導致經常需要切換到xp版平臺工具集&#xff0c;VS2013也是…

gerber文件怎么導貼片坐標_利用Gerber文件生成貼片坐標及元件位置圖的方法技巧...

利用Gerber文件生成貼片坐標及元件位置圖的方法技巧利用Gerber文件生成貼片坐標及元件位置圖的方法技巧2010-10-11 21:59Gerber文件是所有電路設計軟件都可以產生的文件&#xff0c;在電子組裝行業又稱為模版文件(stencil data),在PCB制造業又稱為光繪文件。可以說Gerber文件是…