请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

lua中,两种json和table互转方法的效率比较

[复制链接]
查看: 19|回复: 0

1万

主题

2万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
48020
发表于 2019-12-4 01:52 | 显示全部楼层 |阅读模式
lua中json和table的互转,是我们在平常开辟进程中经常用到的。比如:

  • 在用lua编写的办事器中,假如客户端发送json格式的数据,那末在lua处置惩罚营业逻辑的时候,一定需要转换成lua自己的数据结构,如table。此时,就会用到table和json格式的互转。
  • 在用lua编写的办事器中,假如我们经过redis来存储数据,由于redis中不存在table这类数据结构,是以,我们可以挑选将table转换成json字符串来举行存储。在数据的存取进程中,也会用到table和json格式的互转。
以上两种场景中,json和table的互转操纵频次好坏常高的,假如转换服从有提升,对于低落我们营业延时将会有很大的帮助。是以,挑选一种高服从的转换方式的严重性可见一斑。
下面我们简单先容两种转换方式,并对他们的转换服从做一个对照。

  • 第一种是用lua实现的json和table互转方式,这类比力常见,需要了解操纵方式及源码,请拜候该项目在github上的源码。
  • 第二种叫cjson,是用C实现的。redis中的eval命令支持lua操纵数据库,是以,cjson也在redis中获得操纵,我们可以redis的源码库中拉倒cjson的源码
下面简单对照一下,别离经过这两种方式转换的服从,到底差几多?测试方式:建立一个lua中的table,频频将lua转换成json,再将json转换成lua,如此循环屡次,此处我们循环50000次,而且在每次转换进程中,对其中一个变量count举行递增盘算,便于我们终极来检验转换进程中数据的正确性。
  1.     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秒。
  1. 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秒。
  1. 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倍。
免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表