关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程教程 > JavaScript > 正文

更强的 JsonPath 兼容性及性能测试(毒蘑菇volumeshader性能测试)

guanshanw 2023-03-12 16:53 3662 浏览 9 评论

最近给自己的json框架snack3添加了json path支持。搞好之后,找了两个市面上流行框架比较性测试,以助自己改进框架的性能和兼容性。

测了一圈之后,发现snack3兼容性良好,性能更是最好的。晚上要喝点小酒庆祝一下!!!

免责声明:我也是个java新手,可能测试得方式不对而造成不科学的结果,可以留言指出来。以下测试数值只对我的电脑有效(配置:Macbook pro 13 2018款 i7+16G+512G)。

Snack3 借签了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。

  • 强调文档树的操控和构建能力
  • 做为中间媒体,方便不同格式互转
  • 高性能Json path查询(兼容性和性能很赞)
  • 支持序列化、反序列化

本案测试用的三个框架及版本:

  • com.alibaba:fastjson:1.2.29
  • com.jayway.jsonpath:json-path:2.2.0
  • org.noear:snack3:3.1.5.9

三份测试数据样本:

  • A:{code:1,msg:'Hello world',data:{list:[1,2,3,4,5], ary2:[{a:2},{a:3,b:{c:'ddd'}}]}}
  • B:[{b:{c:1}}, {b:{d:1}}, {b:{c:2}}, {b:{c:23}}]
  • C:[{c:'aaaa'}, {b:'cccc'}, {c:'cccaa'}]

测试方案:

1.测试伪代码

var text = "...";

//1.预解析json
var obj = JSON.parse(text);

long start = System.currentTimeMillis();
for(int i=0,len=1000000; i<len; i++) {
 //2.执行json path
 JSONPath.eval(obj,"$..."); 
}
//3.100万次的消耗时间(记录的数值就是这个)
long times = System.currentTimeMillis() - start;

System.out.println(times);

2.每个框架、每个表达式各执行4次,并记录后3次消耗时间

3.最后制成对比表格

4.测试结果:



注:

  • 不兼容1 : 直接返回了根节点自己
  • 不兼容2 : 直接异常

总结

  • fastjson 毫无兼容性可言(从兼容json-path的角度讲)
  • json-path 性能不理想,函数使用局限性大
  • snack3 性能最好,支持两种策略:1.标准模式,保持与json-path兼容效果;2.非标准模式,函数使用余地更大

附1:snack3项目地址:

  • https://github.com/noear/snack3
  • https://gitee.com/noear/snack3

附2:..及函数表达式的兼容性说明

json-path:(snack3的标准模式同),处理策略如下:

  1. 选择器的执行顺序:(括号里的表达式处理后再聚合)$..(ary2[0].a)$..(c.min()) //如果c不是数组,此处会出错$..(ary2[0][0])
  2. 只能:data.list[?(@ in $..ary2[0].a)]
  3. 只能:在原数组节点上执行函数

snack3:(snack3的非标准模式),处理策略如下:

  1. 选择器的执行顺序:(括号里的表达式处理后再聚合)($..ary2[0]).a($..c).min() //c是不是数组都正常 //实际使用中,这种会更方便,同时也兼容其它表达式($..ary2[0])[0] //这种会引起不同的结果 //不过实际中极少出现
  2. 可以:data.list[?(@ in $..ary2[0].a)] 或 data.list[?(@ == $..ary2[0].a[0])]
  3. 可以:在原数组节点上执行函数 或 查询结果上执行

附3:测试代码

  • com.alibaba:fastjson 测试代码:https://gitee.com/noear/snack3/blob/master/snack3_demo/src/test/java/speed/SpeedFastjsonJsonPathTest.java
  • com.jayway.jsonpath:json-path 测试代码:https://gitee.com/noear/snack3/blob/master/snack3_demo/src/test/java/speed/SpeedJaywayJsonPathTest.java
  • org.noear:snack3 测试代码:https://gitee.com/noear/snack3/blob/master/snack3_demo/src/test/java/speed/SpeedJsonPathTest.java

相关推荐

精品基于Uniapp+Springboot实现的Android的学习生活交流APP

《[含文档+PPT+源码等]精品基于Uniapp+Springboot实现的Android的学习生活交流APP[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等软...

精品spring boot+MySQL婚纱影楼管理系统vue

《springboot+MySQL婚纱影楼管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等使用技术:操作系统:Windows10、Windows7、Windows...

从病毒到“基础软件污染”,Linux 真的安全吗?

长久以来,Linux主机曾一直被认为是比Windows更安全的操作系统,已知病毒形势远没有Windows多样和严重。而近年随着云计算的兴起,Linux系统在云主机的高占比形成了联网主机的主要算力,自然...

PHP代码审计入门之路(渗透测试补全篇)

0x01前言虽然市面上的代码审计的文章已经一大把了,但是还是决定重复造轮子,打算作为一个系列来写的,近年越来越多的安全研究人员投入到php应用的漏洞挖掘,相对应的代码安全问题也被大量的暴露出来,身处...

为什么很多人学习PHP编程都喜欢自学成才?推荐几个php自学网站

PHP编程语言是目前编程语言中最热门的编程之一,PHP应用领域最多的是WEB开发,PHP和mysql结合可以做出完美的网站,目前大多WEB网站都会选择PHP开发,开源成本低,高效质量好。学习PHP编程...

uniapp整个diygw-ui-php(thinkphp)跨域访问调试

diygw-ui-php开源地址:https://gitee.com/diygw/diygw-ui-phpNGINX修改配置,增加了跨域https请求保存后导出源码PHP环境支持断点调试。关键配置如下...

精品springboot的二手车管理系统vue

《springboot的二手车管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等使用技术:操作系统:Windows10、Windows7、Windows8开发语言:...

新手小白如何部署服务器,让你的个人电脑成为网站服务器

近期有粉丝问到从服务器部署到网站上线的细节操作流程要怎么办,本文进行相关的说明,由于方法很多,文本着重以小白比较容易入手的方式来进行介绍,同时文末会对如何将自己的电脑变成服务器进行简单的说明,便于小白...

SQL注入小白入门,大佬请绕道

SQL注入小白入门,大佬请绕道什么是SQL结构化查询语言(StructuredQueryLanguage)简称SQLSQL使我们有能力访问数据库什么是SQL注入用户提交的数据可以当作命令被数据库解...

PHP开发环境安装配置:Win10+Docker+Laradock(上篇)

一、关于PHP开发环境的选择1、操作系统的选择?PHP运行环境从操作系统上来说肯定是Linux最好,在生产环境的服务器中都是使用Linux系统。但是Linux日常使用软件不够丰富,只...

yii2-adminlte-asset / yii2-admin 安装配置

1.承接上一篇,安装一个靓的模板(yii2-adminlte-asset)AdminLTE。以及一个user图形化管理界面(yii2-admin)2.首先安装yii2-adminlte-asset...

windows如何实现定时任务?配合脚本使用结局很满意

序言:作为一名程序员,通过定时任务去实现各种所需的功能是必须要掌握的,本文来讲解一下在windows服务器上如何创建定时任务。有需要的小伙伴赶紧收藏转发吧。第一步:打开控制面板-》系统和安全-》管理工...

助你学安全,使用docker快速搭建各大漏洞学习平台

今天给大家分享一个docker安装的漏洞平台批量安装,vulstudy是专门收集当下流行的漏洞学习平台,并将其制作成docker镜像,方便大家快速搭建环境,节省搭建时间,专注于的漏洞学习上。目前vul...

「 靶场环境篇 」 phpstudy 集成环境安装教程(特别详细)

前言最近整理了一些奇安信&华为&深信服大佬的课件资料+大厂面试课题,想要的可以私信自取,无偿赠送给粉丝朋友~想入门渗透行业呢光有理论基础是不够的,更重要的是实践经验。我想着分享一些入门级靶场,从环境搭...

手把手教会你做音乐“网站”(二)

上一节的内容,归纳起来就是:下载软件,安装,启动。为了能让小白看明白,写了很多文字,但愿没把你看糊涂了。这一节我力求简单描述。请私信我,发03272,自动获取音乐网站源码。这是一个压缩包music...

已有9位网友发表了看法:

  • 编程导航站

    编程导航站  评论于 [2023-06-30 17:53:15]  回复

    毒蘑菇volumeshader性能测试下载应用

取消回复欢迎 发表评论: