国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端關(guān)于JSON的stringify、parse和遍歷的性能比較

hiyang / 2964人閱讀

摘要:在前端項(xiàng)目對(duì)數(shù)組,的拷貝,比較中,我們往往會(huì)去用,那么這樣做究竟好不好呢經(jīng)過一系列測(cè)試,發(fā)現(xiàn)用這種方式的性能是比較差的,下面是實(shí)驗(yàn)結(jié)果數(shù)組拷貝結(jié)果結(jié)果結(jié)果結(jié)果結(jié)果我們發(fā)現(xiàn)差距在四倍左右,當(dāng)數(shù)組變大基本也維持在這個(gè)比例遍歷對(duì)比結(jié)果結(jié)果

在前端項(xiàng)目對(duì)數(shù)組,map的拷貝,比較中,我們往往會(huì)去用json.stringify、json.parse,那么這樣做究竟好不好呢?
經(jīng)過一系列測(cè)試,發(fā)現(xiàn)用這種方式的性能是比較差的,下面是實(shí)驗(yàn)結(jié)果

1.數(shù)組拷貝
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結(jié)果", new Date().getTime() - start)
}

function f2() {
    const start = new Date().getTime()
    const r = [...a1]
    console.log("array結(jié)果", r == a1, new Date().getTime() - start)
}

f1()
f2()

結(jié)果:
json結(jié)果 104
array結(jié)果 false 35

我們發(fā)現(xiàn)差距在四倍左右,當(dāng)數(shù)組變大基本也維持在這個(gè)比例

2.遍歷對(duì)比
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結(jié)果", 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結(jié)果", r, new Date().getTime() - start)
}

f1()
f2()

結(jié)果:
json結(jié)果 true 506
array結(jié)果 true 140

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

結(jié)尾

還有更多的測(cè)試沒做,但估計(jì)基本上也是這個(gè)差距,
其實(shí)說到底,用json的api底層也是遍歷過了,并且轉(zhuǎn)成字符串,所以性能會(huì)比較差
大家還是自己手寫的遍歷還是手寫,或者用第三方插件如lodash。不要一味用json api

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/104236.html

相關(guān)文章

  • 關(guān)于JSON.parse()JSON.stringify()性能小測(cè)試

    摘要:我們一般用來深拷貝,其過程說白了,就是利用將對(duì)象序列化字符串,再使用來反序列化還原對(duì)象。至于這行代碼為什么能實(shí)現(xiàn)深拷貝,以及它有什么局限性等等,不是本文要介紹的。小結(jié)論能不用和就不用,采用替代方案且性能更優(yōu)的。 JSON.parse(JSON.stringify(obj))我們一般用來深拷貝,其過程說白了,就是利用 JSON.stringify 將js對(duì)象序列化(JSON字符串),再使...

    oogh 評(píng)論0 收藏0
  • JSON:如果你愿意一層一層剝開我心,你會(huì)發(fā)現(xiàn)...這里水很深——深入理解JSON

    摘要:說句玩笑話,如果是基于的,可能就叫了,形式可能就是這樣的了,如果這樣,那么可能現(xiàn)在是和比較密切了。此外,還有一個(gè)函數(shù),我們較少看到,但是它會(huì)影響。 我們先來看一個(gè)JS中常見的JS對(duì)象序列化成JSON字符串的問題,請(qǐng)問,以下JS對(duì)象通過JSON.stringify后的字符串是怎樣的?先不要急著復(fù)制粘貼到控制臺(tái),先自己打開一個(gè)代碼編輯器或者紙,寫寫看,寫完再去仔細(xì)對(duì)比你的控制臺(tái)輸出,如果有...

    Baaaan 評(píng)論0 收藏0
  • ECMAScript 5.1 實(shí)用特性概覽

    摘要:返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組。方法測(cè)試數(shù)組中的某些元素是否通過了指定函數(shù)的測(cè)試,返回值非常實(shí)用的功能,判斷數(shù)組中是否某元素符合特定條件。 ECMAScript 5發(fā)布于2009年12月。ECMAscript 5.1版(下文稱ES5)發(fā)布于2011年6月,,并且成為ISO國際標(biāo)準(zhǔn)(ISO/IEC 16262:2011) http://www.ecma...

    xiao7cn 評(píng)論0 收藏0
  • ECMAScript 5.1 實(shí)用特性概覽

    摘要:返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組。方法測(cè)試數(shù)組中的某些元素是否通過了指定函數(shù)的測(cè)試,返回值非常實(shí)用的功能,判斷數(shù)組中是否某元素符合特定條件。 ECMAScript 5發(fā)布于2009年12月。ECMAscript 5.1版(下文稱ES5)發(fā)布于2011年6月,,并且成為ISO國際標(biāo)準(zhǔn)(ISO/IEC 16262:2011) http://www.ecma...

    bang590 評(píng)論0 收藏0
  • JSON.stringify() 深入理解

    摘要:深入理解規(guī)則字符串化并非嚴(yán)格意義上的強(qiáng)制類型轉(zhuǎn)換,但其中涉及的相關(guān)規(guī)則基本類型值的字符串化規(guī)則為轉(zhuǎn)換為,轉(zhuǎn)換為,轉(zhuǎn)換為。如果對(duì)象有自己的方法,字符串化時(shí)就會(huì)調(diào)用該方法并使用其返回值。將對(duì)象強(qiáng)制類型轉(zhuǎn)換為是通過抽象操作來完成的。 [TOC] 序言 最近在看《你所不知道的javascript》[中卷]一書,第一部分是類型和語法。本文是基于這部分的產(chǎn)物。在強(qiáng)制類型轉(zhuǎn)換->抽象值操作-> to...

    eechen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<