javascript 數(shù)組性能提高

  • js中的數(shù)組不同于C、C++...中的數(shù)組
c++中是申請(qǐng)一塊連續(xù)的內(nèi)存,比如數(shù)組類(lèi)型是int,申請(qǐng)一個(gè)長(zhǎng)度為4的數(shù)組,就會(huì)申請(qǐng)16個(gè)字節(jié)長(zhǎng)度的數(shù)組
假設(shè)其實(shí)地址是1201,也就是a[0]的地址,當(dāng)你需要訪(fǎng)問(wèn)a[3]的時(shí)候,只需要訪(fǎng)問(wèn)1201+3*4地址就是a[3]的值。
js中的數(shù)組其實(shí)是一個(gè)hash-map 數(shù)據(jù)結(jié)構(gòu),因此你可以在一個(gè)數(shù)組中插入不同類(lèi)型的數(shù)據(jù)結(jié)構(gòu),當(dāng)你需要訪(fǎng)問(wèn)a[2]的值時(shí)候,他需要通過(guò)遍歷進(jìn)行查找
  • 因此JavaScript的數(shù)組不同于實(shí)際的數(shù)組,因此實(shí)際的數(shù)組通過(guò)數(shù)組計(jì)算獲取值得方式會(huì)比JavaScript的鏈表數(shù)據(jù)快很多,如果數(shù)組很長(zhǎng),這種情況會(huì)更糟糕

  • es6 提供了ArrayBuffer 接口
    . ArrayBuffer提供了一塊連續(xù)的內(nèi)存塊

  • mdn 地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays

提供一個(gè)長(zhǎng)度為2的短整型數(shù)組
let buffer = new ArrayBuffer(8);
let view   = new Int32Array(buffer); // 4 bytes
view[0] = 100;
  • 應(yīng)該避免給數(shù)組中push對(duì)象,因?yàn)檫@樣會(huì)大大降低數(shù)組的性能
let LIMIT = 10000000;
let arr = new Array(LIMIT);
console.time("1");
arr.push({ a: 22 })
for (let i = 0; i < LIMIT; i++) {

    arr[i] = i;
}
console.timeEnd("1");
771 ms

let LIMIT = 10000000;
let arr = new Array(LIMIT);
console.time("1");
for (let i = 0; i < LIMIT; i++) {

    arr[i] = i;
}
console.timeEnd("1");
20 ms
let LIMIT = 10000000;
let arr = new Array(LIMIT);
console.time("1");
// arr.push(1)
for (let i = 0; i < LIMIT; i++) {

    arr[i] = i;
}
console.timeEnd("1");
// 14 ms

let LIMIT = 10000000;
let arr = new Array(LIMIT);
console.time("1");
// arr.push(1)
for (let i = 0; i < LIMIT; i++) {

    arr[i] = i;
}
console.timeEnd("1");
// 909 ms
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,546評(píng)論 0 13
  • 1 2017年起,每個(gè)月我都帶著“向組織揩油”活動(dòng)的伙伴來(lái)制定目標(biāo),之所以要這么做,就是因?yàn)槲野l(fā)現(xiàn)了個(gè)關(guān)鍵痛點(diǎn):很...
    易仁永澄閱讀 1,895評(píng)論 2 14
  • 一件事情要把它有始有終地完成,就已經(jīng)很不易。如果要把它做到極致,除了堅(jiān)持不懈以外,還需要什么?你,有思考過(guò)嗎?或許...
    風(fēng)一般女子閱讀 681評(píng)論 0 1
  • 這是【心靈對(duì)話(huà)寫(xiě)作二組】第10篇文章。 當(dāng)我交完1月31日的罰款單時(shí),欲哭無(wú)淚。本該在15日內(nèi)處理完...
    福提之路閱讀 225評(píng)論 1 2
  • 我媽?zhuān)耗愀液湍猩f(shuō)話(huà)=????(??? |||) 我:為什麼不敢( ?????) 我媽?zhuān)何乙郧白x小學(xué)時(shí)不敢和男生說(shuō)...
    女子女子閱讀 220評(píng)論 0 0

友情鏈接更多精彩內(nèi)容