js传递json数据过大的解决方案

news2024/11/17 3:44:09

protobufjs

使用protobuf,定义如下结构
Person.protobuf

syntax = "proto3";

message Person {
  string name = 1;
  int32 age = 2;
}

Person.thrift

namespace java com.example.Person

struct Person {
  1: required string name,
  2: required i32 age
}

使用benchmark基线代码测试如下

const fs = require('fs');
const path = require('path');
const BSON = require('bson')
const msgpack = require('msgpack-lite');
const Benchmark = require('benchmark');
const thriftrw = require('thriftrw')
const protobuf = require('protobufjs');
const protobufPerson = protobuf.loadSync('Person.proto');
const Person = protobufPerson.lookupType('Person');
var thrift = new thriftrw.Thrift({
  source: fs.readFileSync(path.join(__dirname, 'Person.thrift'), 'utf8'),
  allowOptionalArguments: true,
});

const jsonData = {name: "John", age: 30};
const suite = new Benchmark.Suite()

let json_result,bson_result,msgpack_result,proto_result,thrift_result;
suite.add('JSON', ()=>{ json_result = JSON.stringify(jsonData)})
suite.add('BSON', ()=>{ bson_result = BSON.serialize(jsonData)})
suite.add('msgpack', ()=>{ msgpack_result = msgpack.encode(jsonData)})
suite.add('protobuf', ()=>{ proto_result = Person.encode(jsonData).finish()})
suite.add('thrift', ()=>{ thrift_result = thrift.Person.toBuffer(jsonData)})
suite.add('----------')
suite.add('JSON—de', ()=>{ JSON.parse(json_result)})
suite.add('BSON-de', ()=>{ BSON.deserialize(bson_result)})
suite.add('msgpack-de', ()=>{ msgpack.decode(msgpack_result)})
suite.add('protobuf-de', ()=>{ Person.decode(proto_result)})
suite.add('thrift-de', ()=>{ thrift.Person.fromBuffer(thrift_result)})

suite.on('cycle', (event) => console.log(String(event.target)))
suite.on('complete', function() {console.log('Fastest is ' + this.filter('fastest').map('name'))})
suite.run()

执行结果如下:
小文件json数据解析,probuf比msgpack、thrift的快一个数量级
在这里插入图片描述
10m左右的json数据解析,probuf比json快一个数量级,msgpack、thrift和probuf差别不大
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高压电气是什么

高压电气 电工电气百科 文章目录 高压电气前言一、高压电气是什么二、高压电气的类别三、高压电气的作用原理总结前言 高压电气在电力系统中起着重要的作用,它能够将电能有效地输送和分配到各个用户,为社会和工业生产提供稳定可靠的电力供应。然而,高压电气系统也需要注意安…

Jwt令牌过滤器的下发和拦截(创建在前面)

创建Jwt令牌的方法在前面: JWT令牌的作用和生成https://blog.csdn.net/m0_71149935/article/details/135002840?spm1001.2014.3001.5501令牌的下发: 说明: 只用在浏览器访问服务器的时候校验账户信息是否正确,正确就创建Jwt令…

网站服务器/域名/备案到底有什么关联?

​  在一个网站的组成中,网站服务器、域名、备案这几个要素是要被常提到的。在谈及三者关联之前,我们先了解下三者的各自概念。 域名:它是网站的唯一标识符,通俗理解来说就是用户在浏览器地址栏中输入的网址。一般来说&#xff…

Java开发工具积累(符合阿里巴巴手册规范)

文章目录 一、命名规约二、集合篇1. 栈、队列、双端队列2. List的升序倒序3. Map的升序降序4. 二维数组排序5. 集合之间的转换6. Map键值对遍历 三、并发篇1. 创建线程池2. ThreadLocal的使用 四、时间篇1. LocalDateTime的使用2. String、Date、LocalDateTime转换 五、控制块1…

[每周一更]-(第27期):HTTP压测工具之wrk

[补充完善往期内容] wrk是一款简单的HTTP压测工具,托管在Github上,https://github.com/wg/wrkwrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事…

最新50万字312道Java经典面试题52道场景题总结(附答案PDF)

最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题;花了3个月的时间将市面上所有的面试题整理总结成了一份50万字的300道Java高频面…

C#上位机与欧姆龙PLC的通信02----搭建仿真环境

在没有硬件的情况下,创建仿真环境非常必要,买硬件需要花大几K的大洋,这是不好的,对于学习培训者来说,有仿真环境就特别漂亮,现在CX-ONE已经集成了欧姆龙的编程软件,能够实现仿真PLC及编程&#…

java基础-1

byte:8位有符号二进制补码整数,占用1字节。 short:16位有符号二进制补码整数,占用2字节。 int:32位有符号二进制补码整数,占用4字节。 long:64位有符号二进制补码整数,占用8字节。…

uniapp:使用fixed定位,iOS平台的安全区域问题解决

manifest.json > 添加节点 "safearea": { //iOS平台的安全区域"background": "#1C1E22","backgroundDark": "#1C1E22", // HX 3.1.19支持"bottom": {"offset": "auto"} },已解决&#xff…

LabVIEW开发电能质量监测系统

LabVIEW开发电能质量监测系统 本研究基于LabVIEW开发了一个创新的电能质量监测系统,专注于暂态电能质量扰动信号的产生、分析与存储。该系统不仅模拟产生了电压骤降、电压波动、暂态振荡以及电压畸变等关键信号,还能够记录并存储这些扰动信号产生时的波…

【Linux】使用官方脚本自动安装 Docker(Ubuntu 22.04)

前言 Docker是一种开源平台,用于开发、交付和运行应用程序。它利用了容器化技术,使开发人员能够将应用程序及其依赖项打包到一个称为Docker容器的可移植容器中。这些容器可以在任何运行Docker的机器上快速、一致地运行,无论是开发环境、测试…

智能高效|AIRIOT智慧货运管理解决方案

随着全球贸易的增加和消费需求的不断扩大,货运行业面临更大的压力,传统货运行业运输效率低下、信息不透明,往往存在如下的运维问题和管理痛点: 无法实时定位和追踪信息:无法提供实时的货物位置信息,以便随…

C语言:指针与数组易错辨析

前言: 在学校学习指针和数组的联系时,对指针与数组的结合产生了很大的疑惑,后来不断查找资料,本人对指针与数组的综合有了一定的理解,现进行综合讨论辨析 数组指针: 数组指针,即为指向数组类…

爬虫akamai案例:DHL国际物流

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、Akamai简介 Akamai是一家提供内容传递网络(CDN)和云服务的公司。CDN通过将内容分发到全球各地的服…

工资计算_分支结构 C语言xdoj63

问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资为S元,则他应交的个人所得税按如下公式计算: 1) 个人所得税起征点为3500元,若S不超过3500,则…

spring 笔记七 Spring JdbcTemplate

文章目录 Spring JdbcTemplateJdbcTemplate概述JdbcTemplate开发步骤Spring产生JdbcTemplate对象 Spring JdbcTemplate JdbcTemplate概述 它是spring框架中提供的一个对象,是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如&am…

【离线】牛客小白月赛39 G

登录—专业IT笔试面试备考平台_牛客网 题意 思路 考虑离线Bit做法 这种离线Bit,一般都是去考虑二维数点就能写清楚了 确定好两维:x 轴是1 ~ n, y 轴是 k 的大小 然后去遍历值域,如果值域很大的话需要排序离散化,但…

Netty介绍

1. Netty介绍 是一个异步的、基于事件驱动的网络应用框架,用以开发高性能,高可靠性的网络io程序。Netty主要针对在TCP协议下,面向clients端的高并发应用,或者peer-to-peer场景下大量数据持续传输的应用。Netty本质上是一个NIO框架…

Pytorch从零开始实战13

Pytorch从零开始实战——ResNet与DenseNet探索 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet与DenseNet探索环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook,使用Python3.8,P…

Android 顶部对齐宽度撑满高度等比例缩放及限制最大最小高度

一 示例 二 代码 <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent&qu…