在JavaScript中实现队列的最佳方法是什么?

3

嗨,我想在JavaScript中使用一个队列。因此,我猜我可以做以下3件事之一:

  1. javascript push、shift

  2. array.push()、array[0]、array.splice(0,1)等

  3. Queue.js,位于http://code.stephenmorley.org/javascript/queues/#download

我正在阅读queue.js并因为不知道这些数字的含义感到困惑。同时,我猜测还有更好的方法来使用队列,而不是我提到的这3种方式。

那么,在JavaScript中实现队列的最佳方式是什么,为什么?另外,如果有人可以解释我描述的这3种方法的优缺点,那将非常有帮助。谢谢!


你需要在短时间内进行成千上万次的计算吗? - epascarello
1
你必须说出你为什么关心这个问题?如果是关于性能方面的话,那么请在你认为会有输入/输出模式的任何地方自己运行jsperf。如果你关心的是其他方面,你必须说出具体是什么。如果我在做这件事,我会使用push/shift,因为它非常简单。 - jfriend00
我关心性能,并且正在查看 queue.js 的基准测试,但我不确定这些数字的含义是什么? - Derek
我的浏览器(Firefox 6)中的基准测试显示,本地数组方法始终比queue.js更快,因此shift()和unshift()已经过优化。除非您需要支持旧版浏览器,否则不必使用库。 - user123444555621
我已经对iojs数组方法v1.5进行了自己的测试,并且使用了特定的访问模式(入队1000,出队500,入队500,出队1000),Queue.js(以及我的解决方案)轻松击败了数组解决方案。 - kybernetikos
2个回答

6
这是一个基本的队列定义,对于我来说完全正常。
queue: function() {
    var items;

    this.enqueue = function(item) {
        if (typeof(items) === 'undefined') {
            items = [];   
        }

        items.push(item);                       
    }

    this.dequeue = function() {
        return items.shift();                                                
    }

    this.peek = function(){
        return items[0];                  
    }
}

2
将队列作为一个具有方法的对象而不是数组(并直接使用push()shift()[0])的优点是什么? - s4y
4
这是一种常见的编码实践,即创建有意义的API(当然,基于基本数据类型),特别是为了提高代码的可读性和理解性。此外,这也为您提供了在以后需要更改实现时的机会,而不会影响调用者。 - Saket

1

Queue.js使用的是类似于您的第二个建议,但它不够高效,因为它需要进行不必要的测试,本地方法更好地优化了。我肯定会使用Sacket的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接