javascript 数组性能提高

  • js中的数组不同于C、C++...中的数组
c++中是申请一块连续的内存,比如数组类型是int,申请一个长度为4的数组,就会申请16个字节长度的数组
假设其实地址是1201,也就是a[0]的地址,当你需要访问a[3]的时候,只需要访问1201+3*4地址就是a[3]的值。
js中的数组其实是一个hash-map 数据结构,因此你可以在一个数组中插入不同类型的数据结构,当你需要访问a[2]的值时候,他需要通过遍历进行查找
  • 因此JavaScript的数组不同于实际的数组,因此实际的数组通过数组计算获取值得方式会比JavaScript的链表数据快很多,如果数组很长,这种情况会更糟糕

  • es6 提供了ArrayBuffer 接口
    . ArrayBuffer提供了一块连续的内存块

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

提供一个长度为2的短整型数组
let buffer = new ArrayBuffer(8);
let view   = new Int32Array(buffer); // 4 bytes
view[0] = 100;
  • 应该避免给数组中push对象,因为这样会大大降低数组的性能
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,236评论 0 13
  • 1 2017年起,每个月我都带着“向组织揩油”活动的伙伴来制定目标,之所以要这么做,就是因为我发现了个关键痛点:很...
    易仁永澄阅读 1,795评论 2 14
  • 一件事情要把它有始有终地完成,就已经很不易。如果要把它做到极致,除了坚持不懈以外,还需要什么?你,有思考过吗?或许...
    风一般女子阅读 636评论 0 1
  • 这是【心灵对话写作二组】第10篇文章。 当我交完1月31日的罚款单时,欲哭无泪。本该在15日内处理完...
    福提之路阅读 193评论 1 2
  • 我媽:你敢和男生說話=͟͟͞͞(⁰ꈊ⁰ |||) 我:為什麼不敢( ✪ฺ╻✪ฺ) 我媽:我以前讀小學時不敢和男生說...
    女子女子阅读 186评论 0 0