Shift vs Queue vs Slice

Benchmark created on


Preparation HTML

<script>
class Queue {
	head = null;
	tail = null;
	enqueue(item) {
		const node = {data: item};
		if (tail) {
			tail.next = item;
			item.prev = tail;
			tail = item;
		} else {
			head = tail = item;
		}
	}
	dequeue() {
		if (!head) {
			return null;
		}
		const popped = tail;
		if (head === tail) {
			head = tail = null;
		} else {
			tail = tail.prev;
		}
		return popped;
	}
}
</script>

Setup

var COUNT = 1_000;
var queue = new Queue();
var list = [];

Teardown

delete COUNT;
delete queue;
delete list;

Test runner

Ready to run.

Testing in
TestOps/sec
Shift
for (let i = 0; i < COUNT; i++) {
	list.push(i);
}
for (let i = 0; i < COUNT; i++) {
	const popped = list.shift();
}
ready
Queue
for (let i = 0; i < COUNT; i++) {
	queue.enqueue(i);
}
for (let i = 0; i < COUNT; i++) {
	const popped = queue.dequeue();
}
ready
Slice
for (let i = 0; i < COUNT; i++) {
	list.push(i);
}
for (let i = 0; i < COUNT; i++) {
	const popped = list[0];
	list = list.slice(1);
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.