JQuery日记6.5 Javascript异步模式(一)
2015-09-17 09:51
465 查看
理解力JQuery前实现异步队列,有必要理解javascript异步模式.
Javascript异步其实并不严重格异步感,js使某些片段异步方式在将来运行,流不必等待继续向下进行.
在多线程的语言中最easy想到的异步方式就是在当前线程中,新创建一个线程让某段代码片段执行在新创建的线程中,从而使当前线程继续向下进行.
而不论什么一本书关于js的书都会告诉我们js是执行在单线程里的,这个线程称为UI线程,从名字就知道这个线程不光用于执行js代码,还负责事件的处理和UI的绘制.
在游览器内部维护着一个事件队列,触发的事件会一个个的放进这个队列中,UI线程在空暇时会去查看这个队列,假设队列不为空,就取第一个事件并运行其监听函数.
上面这段代码在UI线程的运行示意图图例如以下
首先将此段js代码放进UI线程中运行,当代码运行到setTimeout(fn, mills)时,游览器会在事件队列中放入此定时事件1,前面说过仅仅有当UI线程空暇时才会去运行定时事件,但此时js代码还在运行,所以继续for循环,i继续自增,而且继续放入定时事件2,3,当js代码片段运行完成后,才继续依次运行定时事件1、2、3,此时i的值已经是3了.所以在控制台中我们看到的打印结果依次是:setTimeout:1,setTimeout:2,setTimeout:3,for循环:3,for循环:3,for循环:3.
事实上这样看起来很类似与传统多线程的异步编程,代码运行流并不会等setTimeout的函数运行完成,再继续向下运行.但我们要了解的是,事实上它们仍然是串行运行的,仅仅只是是把setTimeout中设置的函数放到队列中延后运行,从而使js代码依旧先运行,运行完成后再依次运行事件队列中的性能.
Javascript异步其实并不严重格异步感,js使某些片段异步方式在将来运行,流不必等待继续向下进行.
在多线程的语言中最easy想到的异步方式就是在当前线程中,新创建一个线程让某段代码片段执行在新创建的线程中,从而使当前线程继续向下进行.
而不论什么一本书关于js的书都会告诉我们js是执行在单线程里的,这个线程称为UI线程,从名字就知道这个线程不光用于执行js代码,还负责事件的处理和UI的绘制.
在游览器内部维护着一个事件队列,触发的事件会一个个的放进这个队列中,UI线程在空暇时会去查看这个队列,假设队列不为空,就取第一个事件并运行其监听函数.
for (var i = 0; i < 3; ++i) { setTimeout( function(){ console.info( 'setTimeout: ' + i); }, 0); console.info( 'for循环: ' + i) }
上面这段代码在UI线程的运行示意图图例如以下
首先将此段js代码放进UI线程中运行,当代码运行到setTimeout(fn, mills)时,游览器会在事件队列中放入此定时事件1,前面说过仅仅有当UI线程空暇时才会去运行定时事件,但此时js代码还在运行,所以继续for循环,i继续自增,而且继续放入定时事件2,3,当js代码片段运行完成后,才继续依次运行定时事件1、2、3,此时i的值已经是3了.所以在控制台中我们看到的打印结果依次是:setTimeout:1,setTimeout:2,setTimeout:3,for循环:3,for循环:3,for循环:3.
事实上这样看起来很类似与传统多线程的异步编程,代码运行流并不会等setTimeout的函数运行完成,再继续向下运行.但我们要了解的是,事实上它们仍然是串行运行的,仅仅只是是把setTimeout中设置的函数放到队列中延后运行,从而使js代码依旧先运行,运行完成后再依次运行事件队列中的性能.
相关文章推荐
- 用jQuery和PHP来实现微信转盘抽奖程序 附源代码
- 基于jquery的fileupload上传控件 带进度条、支持多上传、拖拽上传 下载即可用 十分强大 有图
- jquery未来元素绑定事件
- 几个Jquery对话框插件
- jquery 跳出each循环
- jQuery Colorbox插件
- jQuery对话框插件 ThickBox
- JQuery ajax请求一直返回Error(parsererror)
- jQuery实现仿美橙互联两级导航菜单效果完整实例
- jQuery实现仿腾讯迷你首页选项卡效果代码
- JQuery实现级联下拉框效果实例讲解
- JQuery入门基础小实例(1)
- JQuery实现可编辑的表格实例讲解(2)
- JQuery菜单效果的两个实例讲解(3)
- jquery实现仿Flash的横向滑动菜单效果代码
- jQuery实现可用于博客的动态滑动菜单完整实例
- jquery简单切换插件
- HTML5,Javascript,and jQuery 24-Hour Trainer(4)——初识CSS
- jQuery插件的简要介绍。
- 对REST架构的理解及Jquery+JSON+RESTful WCF (附源码)