lua中,两种json和table互转⽅法的效率⽐较
lua中json和table的互转,是我们在平时开发过程中经常⽤到的。⽐如:
1. 在⽤lua编写的服务器中,如果客户端发送json格式的数据,那么在lua处理业务逻辑的时候,必然需要转换成lua⾃⼰的数据结构,如table。此时,就会⽤
到table和json格式的互转。
2. 在⽤lua编写的服务器中,如果我们通过redis来存储数据,由于redis中不存在table这种数据结构,因此,我们可以选择将table转换成json字符串来进⾏存
储。在数据的存取过程中,也会⽤到table和json格式的互转。
以上两种场景中,json和table的互转使⽤频率是⾮常⾼的,如果转换效率有提升,对于降低我们业务延时将会有很⼤的帮助。因此,选择⼀种⾼效率的转换⽅式的重要性可见⼀斑。
下⾯我们简单介绍两种转换⽅式,并对他们的转换效率做⼀个对⽐。
1. 第⼀种是⽤lua实现的json和table互转⽅式,这种⽐较常见,需要了解使⽤⽅法及源码,请访问该项⽬在github上的
2. 第⼆种叫cjson,是⽤C实现的。redis中的eval命令⽀持lua操作数据库,因此,cjson也在redis中得到使⽤,我们可以redis的源码库中拉倒cjson的。
下⾯简单对⽐⼀下,分别通过这两种⽅式转换的效率,到底差多少?
测试⽅法:创建⼀个lua中的table,反复将lua转换成json,再将json转换成lua,如此循环多次,此处我们循环50000次,并且在每次转换过程中,对其中⼀个变量count进⾏递增计算,便于我们最终来检验转换过程中数据的正确性。
local t = {
a = "hello",
b = "world",
c = 123456,
d = "123456",redis五种数据结构
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, 1do
--str_json = de(t)
--t = json.decode(str_json)
str_json = de(t)
t = cjson.decode(str_json)
unt = unt + 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实现的de()和json.decode()的10倍。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论