Q关于nextTick的实现

Q 其中nextTick的一部分是用MessageChannel实现

	var channel = new MessageChannel();
	// linked list of tasks (single, with head node)
	var head = {}, tail = head;
	channel.port1.onmessage = function () {
		head = head.next;
		var task = head.task;
		delete head.task;
		task();
	};
	nextTick = function (task) {
		tail = tail.next = {task: task};
		channel.port2.postMessage(0);
	};

也有一种实现是用setTimeout(task, 0);

测试下两者的性能区别:http://jsperf.com/messagechannel-vs-settimeout. MessageChannel还是有明显的性能优势

一些额外的参考资料:

HTML5 web通信(跨文档通信/通道通信)简介 by zhangxinxu <有对message和MessageChannel的例子>

HTML5 Web Messaging <列举了传统messaging不支持的url pattern,说明了Web Messaging的必要性>

comments powered by Disqus