Why is pop faster than shift?

前端 未结 6 1742
情深已故
情深已故 2020-12-01 11:46

Douglas Crockford, in JavaScript: The Good Parts, states that \"shift is usually much slower than pop\". jsPerf confirms this. Does anyone know why this is the case

6条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-01 12:41

    Because shift() reindex array so the shift method is very slow on large array.

    var array = [];
    for(var i = 0;i< 1000000;i++){
        array.push(i)
    }
    var start = new Date().getTime()
    for(var i = 0; i< 100000; i++){
     array.shift();
    }
    var duration = new Date().getTime() - start;// duration is so large, greater than 3 minutes

    But the duration is just 8ms when using linked-queue

    var LQueue = require('linked-queue')
    var queue = new LQueue()
    for(var i = 0;i< 1000000;i++){
        queue.enqueue(i);
    }
    console.log("Queue length:"+ queue.length);
    var start = new Date().getTime()
    queue.dequeueAll(function(data){
    })
    var end  = new Date().getTime();
    console.log("Time:" + (end - start));// 8 ms
    console.log("Queue length:"+ queue.length);

提交回复
热议问题