JS引擎执行机制

1. 前言

  1. 众所周知,JS的执行环境是单线程的,(这个线程就是浏览器的JS引擎),一次只能执行做一件事情;这种方式的缺点就是如果需要进行一些耗时的操作的话,会阻塞,降低用户体验;从而setTimeout(),setInterval(),ajax,onClick()等这种异步操作应运而生;
  2. 这时,你也许会误认为以上的这几个异步操作,就使得JS引擎具有了多个线程;答案是错的,JS引擎仍然是单线程的,是浏览器内核实现了多个线程异步执行,这些线程在内核的控制下相互配合从而保持同步;

那么问题来了,JS引擎是如何配合浏览器处理这些定时器回调和事件的呢?那就需要了解浏览器内核的工作原理了;

2. 浏览器内核工作原理

  1. 浏览器的线程

  • 这些异步线程会产生不同的异步事件;
  1. 工作原理

  • JS引擎是基于事件驱动的;(浏览器派给的任务)
  • 以上的任务可以来自如下callbackFn:
    • 界面元素鼠标点击事件;
    • 定时触发器时间到达通知;
    • 异步请求状态变更通知;
  • JS引擎一直等待任务队列中的任务到来,且由于JS的单线程,这些任务需要排队进行处理 (任务队列)

相信上述内容看过之后,对于JS内核执行原理,已经有了深刻的印象。另外关于这个任务队列的执行,请参看我的另外一篇文章浅析nodeJS事件循环机制

参考资料: https://www.cnblogs.com/hksac/p/6596105.html http://www.ruanyifeng.com/blog/2014/10/event-loop.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值