如何使用jsben.ch或同类工具对比JSONata性能?
对比JSONata语句性能的简便方案
方案1:浏览器端手动编写测试脚本
不需要依赖第三方工具,自己写几行代码就能快速测试:
- 新建本地HTML文件,引入JSONata的CDN脚本
- 用浏览器原生的
performance.now()统计执行时间,通过循环多次执行目标语句减少误差
示例代码:
<!DOCTYPE html> <html> <body> <script src="https://cdn.jsdelivr.net/npm/jsonata@latest"></script> <script> // 测试用的JSON数据 const testData = { users: Array.from({length: 1000}, (_, i) => ({id: i, name: `User${i}`, age: 20 + i%20})) }; // 要对比的JSONata语句(提前编译避免重复解析开销) const expr1 = jsonata('users[age > 30].name'); const expr2 = jsonata('users.$filter(function($v) { $v.age > 30 }).name'); // 通用测试函数 function testExpr(expr, data, iterations = 1000) { const start = performance.now(); for (let i = 0; i < iterations; i++) { expr.evaluate(data); } const end = performance.now(); return (end - start) / iterations; // 返回单次执行平均耗时(毫秒) } // 执行测试并输出结果 console.log(`Expr1 平均耗时: ${testExpr(expr1, testData).toFixed(6)}ms`); console.log(`Expr2 平均耗时: ${testExpr(expr2, testData).toFixed(6)}ms`); </script> </body> </html>
直接在浏览器打开该文件,查看控制台输出即可。
方案2:Node.js本地测试
适合批量测试或需要更高精度计时的场景:
- 先安装JSONata依赖:
npm install jsonata - 编写Node.js脚本,用
console.time()或process.hrtime()计时
示例代码:
const jsonata = require('jsonata'); // 测试数据 const testData = { users: Array.from({length: 1000}, (_, i) => ({id: i, name: `User${i}`, age: 20 + i%20})) }; // 编译要对比的表达式 const expr1 = jsonata('users[age > 30].name'); const expr2 = jsonata('users.$filter(function($v) { $v.age > 30 }).name'); const iterations = 10000; // 测试第一个表达式 console.time('Expr1 总耗时'); for (let i = 0; i < iterations; i++) { expr1.evaluate(testData); } const total1 = console.timeEnd('Expr1 总耗时'); console.log(`Expr1 单次平均: ${(total1 / iterations).toFixed(6)}ms`); // 测试第二个表达式 console.time('Expr2 总耗时'); for (let i = 0; i < iterations; i++) { expr2.evaluate(testData); } const total2 = console.timeEnd('Expr2 总耗时'); console.log(`Expr2 单次平均: ${(total2 / iterations).toFixed(6)}ms`);
运行脚本:node jsonata-performance-test.js,查看终端输出。
方案3:修复jsben.ch的库引入问题
如果偏好jsben.ch的可视化界面,手动添加JSONata的CDN地址即可解决库找不到的问题:
- 打开jsben.ch,点击右上角「Settings」
- 在「External Scripts」输入框中填入JSONata的CDN链接
- 保存设置后,就能在测试代码中直接调用
jsonata()函数
内容的提问来源于stack exchange,提问作者Dietrich
相关产品推荐
相关产品推荐

