更快的异步执行(setTimeout多扫瞄器)__第1页
更快的异步执行(setTimeout多扫瞄器)__第2页
更快的异步执行(setTimeout多扫瞄器)__第3页
更快的异步执行(setTimeout多扫瞄器)__第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、更快的异步执行(setTimeout多扫瞄器)_ 假如要异步执行一个函数,我们最先想到的方法确定会是setTimeout 例如:setTimeout(function( /* 1s后做点什么 */),1000 那假如说要最快速地异步执行一个函数呢? 是否会是: 1 setTimeout(function( /* 尽快做点什么 */),0 可惜的是,扫瞄器为了避开setTimeout嵌套可能消失卡死ui线程的状况,为setTimeout设置了最小的执行时间间隔,不同扫瞄器的最小执行时间间隔都不一样。chrome下测试 setTimeout 0 的实际执行时间间隔也许在12ms左右。 那么假如想最

2、快地异步执行一个函数,有没有什么可以提速的方法呢? 先来看看扫瞄器端,有哪些常用的异步执行方法 setImmediate:该方法去实现比setTimeout 0 更快的异步执行,执行时间更接近0ms,但是只有IE/node支持。 requestAnimationFrame:做动画循环的时候常常会用到这个方法,该方法只会在扫瞄器刷新ui的时候执行,刷新ui的频率最大一般为60fps,所以requestAnimationFrame一般状况下比setTimeout 0 更慢一些。 除了用法异步函数外,还有一些方法可以实现异步调用 利用onmessage: 和iframe通信时经常会用法到onmess

3、age方法,但是假如同一个window postMessage给自身,会怎样呢?其实也相当于异步执行了一个function 例如: 1 var doSth = function() 2 window.addEventListener(message, doSth, true); 3 window.postMessage(, *); 另外,还可以利用script标签,实现函数异步执行,例如: 1 var newScript = document.createElement(script); 2 newScript.onreadystatechange = doSth; 3 document.do

4、cumentElement.appendChild(newScript); 把script添加到文档也会执行onreadystatechange 但是该方法只能在IE下扫瞄器里用法。 那么 这几种方法,谁最快? 测试了一下, chrome下: setImmediate:不行用。 setTimeout 0:12ms onmessage:6ms onreadystatechange:不支持 chrome下,onmessage比setTimeout 0 更快。 firefox下: setImmediate:不行用。 setTimeout 0:7ms onmessage:7ms onreadystat

5、echange:不支持 firefox下,onmessage和setTimeout 0 速度相当。 IE9: setImmediate:不行用。 setTimeout 0:11ms onmessage:7ms 10ms onreadystatechange:2ms IE9下,onreadystatechange的时间比另外两者要快得多。 总体状况下,setImmediate readystatechange onmessage setTimeout 0 requestAnimationFrame 因此我们可以简洁封装一个快速执行异步function的方法: 01 var setZeroTimeout = (function() 02 if(window.setImmediate) 03 /IE10+版本,用法原生setImmediate 04 return window.setImmediate; 05 06 else if(onreadystatechange in document.createElement(script) 07 return function()/* 用法onreadystatechange的版本 */ 08 09 else if(window.postMessage) 10 return function()/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论