单线程异步!(自己学习整理)

这篇博客是作者个人的学习整理,介绍了JavaScript的单线程特性以及异步执行的概念。JavaScript在浏览器环境中是单线程的,事件被分为主队列和异步队列,主队列执行完毕后会处理异步队列中的事件。文章提到了浏览器中的多个线程,如JavaScript引擎线程、界面渲染线程等。同时,讨论了如何通过HTML5的defer和async属性以及动态加载JS来实现非阻塞执行。
摘要由CSDN通过智能技术生成

这是我自己学习整理,不希望误导别人!

如果你想学习可以到以下网址查看:

 

Javascript是单线程的深入分析

http://blog.csdn.net/talking12391239/article/details/21168489

阮一峰:http://www.ruanyifeng.com/blog/2014/10/event-loop.html



单线程:js运行在浏览器中,是单线程的,在特定的时刻只有特定的代码能够被执行,并阻塞其他的代码!

异步:事件异步,浏览器很多行为是异步的,会创建事件并放入执行队列中!

JavaScript 分为两个队列一个是主队列,另一个是异步队列,当主队列的内容执行完毕后会从异步队列调取异步事件!

浏览器中有很多行为是异步的,例如:鼠标点击事件,窗口大小拖拉事件,定时器事件等!

例如:浏览器中在处理onclick事件,这时另外一个事件发生了,这个异步事件就被添加到异步队列中,只有当主队列中的onclick

执行完毕后才会从异步队列调取下一个事件!

浏览器不是单线程的:

浏览器可能会有如下线程:JavaScript引擎线程!界面渲染线程!浏览器事件触发线程!http请求线程!



非阻塞js实现:

js在浏览器中需要被下载、解释并执行这三步。在html body标签中的script都是阻塞的。也就是说,顺序下载、解释、执行。尽管Chrome可以实现多线程并行下载外部资源,例如:script file、image、frame等(css比较复杂,在IE中不阻塞下载,但Firefox阻塞下载)。但是,由于js是单线程的,所以尽管浏览器可以并发加快js的下载,但必须依次执行。所以chrome中image图片资源是可以并发下载的,但外部js文件并发下载没有多大意义。

2014-02-17_16h16_34

要实现非阻塞js(non-blocking javascript)有两个方法:1. html5 2. 动态加载js

首先一种办法是HTML5的deferasync关键字:(淘宝是都加上了)

<script type="text/javascript" src="//g.alicdn.com/sd/data_sufei/1.5.1/aplus/index.js" async defer></script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值