Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Promise与setTimeout的异步速度比较

  Promise与setTimeout都有涉及到异步执行的概念,我们通常使用异步执行多会使用setTimeout,因为它是全浏览器兼容的。但现代浏览器上有个Promise,它的异步时间计算与setTimeout不同,所以这两种异步方式存在速度上的差异,并且目前有浏览器兼容问题。
  下面这个测试就是在对比setTimeoutPromise的异步执行速度 <script>
//setTimeout
console.time("setTimeout1");
setTimeout(done,0,"setTimeout1");
console.time("setTimeout2");
setTimeout(done,0,"setTimeout2");

//Promise
console.time("Promise1");
Promise.resolve("Promise1").then(done);
console.time("Promise2");
Promise.resolve("Promise2").then(done);

function done(name){
  console.timeEnd(name);
};
</script>

  在Chrome上,setTimeout的实际速度要比Promise慢很多,Promise几乎是直接执行的,而setTimeout比理论速度还慢很多(这可能是浏览器在实现上造成的差异)。而Firefox上,setTimeoutPromise的速度是不相上下的,但多次测试会有不同的结果,也就是无法预料setTimeoutPromise谁先执行。但是如果是两个Promise或两个setTimeout自己相比较,他们的执行顺序总是和代码顺序保持一致的。
  PromisesetTimeout快的话总感觉有点不公平,但是如果他们的速度相似而又不使用同一个计时器(无法预料谁先执行),这就更蛋疼了。另外我脑子里突然冒出个念头,既然Chrome的Promise如此迅速,我想是不是可以用它来代替Chrome尚未实现的setImmediate呢?
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^