前端关于JSON的stringify、parse和遍历的性能比较

栏目: 后端 · 前端 · 发布时间: 6年前

内容简介:在前端项目对数组,map的拷贝,比较中,我们往往会去用json.stringify、json.parse,那么这样做究竟好不好呢?经过一系列测试,发现用这种方式的性能是比较差的,下面是实验结果结果:

在前端项目对数组,map的拷贝,比较中,我们往往会去用json.stringify、json.parse,那么这样做究竟好不好呢?

经过一系列测试,发现用这种方式的性能是比较差的,下面是实验结果

1.数组拷贝

const a1 = new Array(1000000).fill('').map((e, index) => index)

function f1() {
    const start = new Date().getTime()
    const r = JSON.parse(JSON.stringify(a1))
    console.log('json结果', new Date().getTime() - start)
}

function f2() {
    const start = new Date().getTime()
    const r = [...a1]
    console.log('array结果', r == a1, new Date().getTime() - start)
}

f1()
f2()

结果:

json结果 104

array结果 false 35

我们发现差距在 四倍 左右,当数组变大基本也维持在这个比例

2.遍历对比

const map1 = {}
const map2 = {}
for (let i=0;i < 1000000;i++) {
    map1[i] = i
    map2[i] = i
}

function f1() {
    const start = new Date().getTime()
    const r = JSON.stringify(map1) == JSON.stringify(map2)
    console.log('json结果', r, new Date().getTime() - start)
}

function f2() {
    const start = new Date().getTime()
    const r = Object.keys(map1).every(key => {
        if (map2[key] || map2[key] === 0) {
            return true
        } else {
            return false
        }
    })
    console.log('array结果', r, new Date().getTime() - start)
}

f1()
f2()

结果:

json结果 true 506

array结果 true 140

基本上也是在 四倍 左右的差距

结尾

还有更多的测试没做,但估计基本上也是这个差距,

其实说到底,用json的api底层也是遍历过了,并且转成字符串,所以性能会比较差

大家还是自己手写的遍历还是手写,或者用第三方插件如lodash。不要一味用json api


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计数组合学(第一卷)

计数组合学(第一卷)

斯坦利 / 付梅、侯庆虎、辛国策 / 高等教育 / 2009-6 / 42.00元

《计数组合学(第1卷)》是两卷本计数组合学基础导论中的第一卷,适用于研究生和数学研究人员。《计数组合学(第1卷)》主要介绍生成函数的理论及其应用,生成函数是计数组合学中的基本工具。《计数组合学(第1卷)》共分为四章,分别介绍了计数(适合高年级的本科生),筛法(包括容斥原理),偏序集以及有理生成函数。《计数组合学(第1卷)》提供了大量的习题,并几乎都给出了解答,它们不仅是对《计数组合学(第1卷)》正......一起来看看 《计数组合学(第一卷)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码