js性能与setTimeout 的问题


有时候我们开发复杂交互的web产品时, 会考虑到流畅性而使用setTimeout 让某个操作在进程为空(或者说CPU比较空闲)的时候才去执行, 可以一定程度上提高流畅性, 但是同时 又听说setTimeout会带来性能问题, setTimeout真的会有性能问题吗?
如果有 那么与他带来的流畅度提升的好处之间如何权衡?
如果一个页面中使用了多个 比如10个setTimeout 又会怎样?

   
  //............. 页面初始化时 一大堆DOM操作 事件绑定等代码
  
setTimeout(function () {
startPage();//开场动画 为了保证流畅性 延迟执行
},1)

补充:有人说setTimeout浏览器的内部实现是通过轮询来实现的, 那样的话 的确会有性能问题,而且越多性能越差, 但是本人没研究过浏览器的内部实现,所以也不知道真假.

JavaScript 性能

有老婆的老婆饼 12 years, 2 months ago

首先,你要弄清楚Javascript是单线程执行的,还是多线程执行的?
看如下代码

   
  setTimeout( function(){ while(true){} } , 100);
  
setTimeout( function(){ alert('你好!'); } , 200);

第二个setTimeout会执行吗?答案是否定的。因为Javascript是单线程的。

你页面只有10个setTimeout,浏览器的内部轮询的耗损可以忽略不计的。setTimeout之所以会让人感觉到有“性能问题”,是因为多个setTimeout的函数堵塞了(先执行的setTimeout有可能堵塞后面的setTimeout)。

希望能帮到你。

TAMA氏 answered 12 years, 2 months ago

Your Answer