摘要:在前端項(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é)果
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
摘要:我們一般用來深拷貝,其過程說白了,就是利用將對(duì)象序列化字符串,再使用來反序列化還原對(duì)象。至于這行代碼為什么能實(shí)現(xiàn)深拷貝,以及它有什么局限性等等,不是本文要介紹的。小結(jié)論能不用和就不用,采用替代方案且性能更優(yōu)的。 JSON.parse(JSON.stringify(obj))我們一般用來深拷貝,其過程說白了,就是利用 JSON.stringify 將js對(duì)象序列化(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)輸出,如果有...
摘要:返回一個(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...
摘要:返回一個(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...
摘要:深入理解規(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...
閱讀 2964·2021-11-17 09:33
閱讀 3125·2021-11-16 11:52
閱讀 488·2021-09-26 09:55
閱讀 2983·2019-08-30 15:52
閱讀 1321·2019-08-30 15:44
閱讀 1268·2019-08-30 13:59
閱讀 805·2019-08-30 13:08
閱讀 1167·2019-08-30 10:50