lua中,两种json和table互转方法的效率比较
Posted cnblogsfans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua中,两种json和table互转方法的效率比较相关的知识,希望对你有一定的参考价值。
lua中json和table的互转,是我们在平时开发过程中经常用到的。比如:
- 在用lua编写的服务器中,如果客户端发送json格式的数据,那么在lua处理业务逻辑的时候,必然需要转换成lua自己的数据结构,如table。此时,就会用到table和json格式的互转。
- 在用lua编写的服务器中,如果我们通过redis来存储数据,由于redis中不存在table这种数据结构,因此,我们可以选择将table转换成json字符串来进行存储。在数据的存取过程中,也会用到table和json格式的互转。
以上两种场景中,json和table的互转使用频率是非常高的,如果转换效率有提升,对于降低我们业务延时将会有很大的帮助。因此,选择一种高效率的转换方式的重要性可见一斑。
下面我们简单介绍两种转换方式,并对他们的转换效率做一个对比。
下面简单对比一下,分别通过这两种方式转换的效率,到底差多少?
测试方法:创建一个lua中的table,反复将lua转换成json,再将json转换成lua,如此循环多次,此处我们循环50000次,并且在每次转换过程中,对其中一个变量count进行递增计算,便于我们最终来检验转换过程中数据的正确性。
local t = { a = "hello", b = "world", c = 123456, d = "123456", e = {"hhh", "11", "22"}, f = { a = "hello", b = "world", c = 123456, d = "123456", e = {"hhh", "11", "22"}, count = 0 } } local tm1 = os.time() local str_json = "" for i = 1, 50000, 1 do --str_json = json.encode(t) --t = json.decode(str_json) str_json = cjson.encode(t) t = cjson.decode(str_json) t.f.count = t.f.count + 1 end local tm2 = os.time() print("tm1:" .. tm1 .. ",tm2:" .. tm2 .. ",dt:" .. (tm2 - tm1)) print(str_json)
结果1:使用json转换后的输出,耗时为51秒。
tm1:1575363384,tm2:1575363435,dt:51 {"a":"hello","c":123456,"b":"world","e":["hhh","11","22"],"d":"123456","f":{"a":"hello","c":123456,"b":"world","e":["hhh","11","22"],"d":"123456","count":49999}}
结果2:使用cjson转换后输出,耗时为5秒。
tm1:1575363457,tm2:1575363462,dt:5 {"a":"hello","c":123456,"b":"world","e":["hhh","11","22"],"d":"123456","f":{"a":"hello","c":123456,"b":"world","e":["hhh","11","22"],"d":"123456","count":49999}}
结论:
通过上面的实验,可以看到,通过cjson的转换效率基本是通过lua实现的json.encode()和json.decode()的10倍。
以上是关于lua中,两种json和table互转方法的效率比较的主要内容,如果未能解决你的问题,请参考以下文章