1
majinjing3 2016-12-12 20:28:25 +08:00 via Android
支持,建议加到 awesome-go 里面哈,
|
2
crytis 2016-12-12 20:37:02 +08:00 via Android
矮油,你这测试的,为啥 fastjson 比 jackson 慢?跟阿里的测试不符啊,还有,能差这么多性能?
|
3
taowen OP @crytis https://github.com/fabienrenaud/java-json-benchmark 我从这里 fork 的。别人测的也是这个结果。 fastjson 就是不快啊。
|
4
a3mao 2016-12-12 20:44:13 +08:00 1
能否说说是怎么实现的?为啥会这么快?
|
5
taowen OP |
6
irgil 2016-12-12 20:56:41 +08:00
|
8
0915240 2016-12-12 21:05:02 +08:00 via iPhone
比其他的快这么多吗?
|
10
zcbenz 2016-12-12 21:13:27 +08:00
和 rapidjson 相比如何?速度的差异有可能是实现不完全,或者测试案例有特例, rapidjson 的作者有一供一套完整的 benchmark 。
https://github.com/miloyip/rapidjson https://github.com/miloyip/nativejson-benchmark |
11
slixurd 2016-12-12 21:32:14 +08:00 1
我改了一下你的 ComplexObject
public class ComplexObject { --public int field1; --public List<List<Integer>> field2; --public Any field3; } 然后再解析一下 String json = "{'field1': 100, 'field2': [[1,2],[2]]}".replace('\'', '"'); GG 了...你的 TypeLiteral 实现有点问题,没法保存这种复杂结构 fastjson 没有问题 ComplexObject object = JSON.parseObject(json,new TypeReference<ComplexObject>(){}); |
12
sfqtsh 2016-12-12 21:44:01 +08:00 via Android
C/C++写的不必你这快 10 倍- O -
|
14
taowen OP @zcbenz string 是 std 呢还是 fb 呢还是 qstring 呢。性能差别大了去了。
|
16
taowen OP @zcbenz 代码写出来用的。 rapidjson 再快也没办法用来反序列化 java 对象,比较有何意义呢。 java 多了一次堆外缓存到堆内对象的拷贝,肯定比 c++慢啊。 c++可以直接 mmap 成 bytes ,然后直接 cast 成内存对象来用。
|
18
ipwx 2016-12-12 23:50:46 +08:00
你这代码不能防御错误的 JSON 文件。现在是硬件过剩而软件复杂度超过任何人能处理的时代,宁可用大部分性能去防御错误输入,也不要假定输入是对的。显式报错永远比静默忽略要重要。
|
19
ipwx 2016-12-12 23:51:34 +08:00
毕竟静默报错可能会把错误累积到系统其他不知道哪里的地方,这时候查错的成本实在是大得惊人。更别说恶意攻击的情况了。
|
20
taowen OP @ipwx point taken, thanks. 这个世界还是需要多样性的。虽然所有的现代语言都支持了数组越界检查,但是仍然有人觉得自己需要裸奔。作死是挡不住的。
|
21
kitalphaj 2016-12-13 07:52:55 +08:00
能不能写点注释啊。。。
|
22
ragnaroks 2016-12-13 08:56:22 +08:00
不如再写个 C#版?现在在用"http://git.oschina.net/fuis/FadeJSON"速度也不错
|
23
wupher 2016-12-13 09:18:10 +08:00
Great JOB !
有空找个小项目试试看。 |
24
Balthild 2016-12-13 13:38:06 +08:00
先收藏,暂时观望一段时间。
|
25
hemoely 2016-12-14 01:58:49 +08:00 via Android
点赞支持
|
26
q397064399 2016-12-14 07:58:25 +08:00
宁愿要一个功能复杂, JSON 报错 定位的解析器,不要速度
|
27
rockswang 2016-12-14 08:49:46 +08:00
支持!!
|
28
mordecai 2016-12-15 22:54:43 +08:00
@q397064399 +1
|
29
Miy4mori 2016-12-16 00:52:57 +08:00 via Android
只敢用 jackson 和 gson ,毕竟吃了 fastjson 的亏。
|
32
beny 2016-12-19 23:02:05 +08:00
能不能讲下为啥能够这么快
|
33
taowen OP @beny http://jsoniter.com/java-howto.html 刚刚对比了一下 jsoniter 的 java 版本对一个简单对象绑定的几种实现。整段的 decoder 源代码生成贡献最大,其次是避免了中间对象的生成,还有就是避免了 int 等 primitive 类型的装箱拆箱。不仅仅是用字节码生产代替反射那么简单的事情。可以看到 jackson 的 afterburner 加上之后并没有比 jackson 本身快多少。整段生成的 java 源代码使得 hotspot 更好去优化目前看来是主要因素。
go 版本还没有上代码生成,纯粹只是做了一些指针运算来代替反射。 |
34
bumz 2021-12-10 13:30:54 +08:00 via iPhone
jsoniter 域名是不是过期了
|