一、发生一个事件时,事件及事件处理程序会被放入浏览器的事件队列,事件可归为以下几类:

浏览器事件:window.load、document.DomContentLoaded等
网络请求事件:ajax、websocket
用户事件:单双击、鼠标滚动、调整页面大小等
计时器事件:setTimeout,setInterval
 
事件处理程序如果是function(){}格式,则里面的this指向绑定事件的dom节点对象,跟e.currentTarget一样(即便是事件委托也一样),如果采用()=>{}格式,this指向的是window

二、事件的执行是异步的。
 
三、对事件队列的处理(放入及执行)是浏览器的渲染进程(又叫内核进程、render进程)负责,渲染进程分为以下线程:
1.GUI线程
负责把html解析成dom tree,把css解析成css rule,然后把两者结合,形成render tree。然后计算出layout tree放入浏览器内存中供Browser进程显示到界面上;
当界面需要重绘或回流时,该线程会被执行;
该线程与JS引擎线程是互斥的,当JS引擎在执行时,该线程会处于暂停状态。这也就是为什么一段JS代码执行时间比较久时页面会出现空白或卡顿的原因
 
2.JS引擎线程
又叫JS内核,负责解析和执行JS代码;
当JS引擎执行到事件代码语句时(比如addEventListener),会通知事件线程需要关注XXX事件;
 
3.事件触发线程
主要负责事件队列的维护
当事件触发时会被事件线程监听到,事件线程把事件处理程序放入到事件队列中,这一过程不会打断JS引擎线程的执行
 
4.定时器触发线程
setTimeout与setInterval所在的线程;
由于js引擎是单线程的,如果处于阻塞线程状态,则会影响记时的准确性,因此需要单独的线程来计时并触发事件
当到达指定时间时,setTimeout回调代码也会被加入到事件队列,注意是加入事件队列,而不是立即执行,因为如果在队列中还有其他待执行的代码时就不会执行;
setInterval的情况更特殊,当到达指定时间时,如果上一次的回调函数还在队列中等待执行,则直接跳过而不做任何操作。
 
 
5.异步请求线程
XmlHttpRequest所在线程;
假如不采用单独的线程而是直接使用JS引擎线程,从发出请求到等待服务端给出响应的这段时间,JS引擎就会一直处于运行状态,原本可以继续执行后面的代码的,现在只能等待
 
 
四、JS是单线程运行的的、那Worker为何可以达到多线程的效果?
为什么JS是单线程执行的?假如JS是多线程执行的,一个线程要添加DOM、另一个线程要删除DOM,就会乱套,这就像两台电脑不能同时使用同一台打印机一样的道理;
创建WebWorker时,JS引擎线程向浏览器申请了worker专用的线程,worker线程(子线程)与JS引擎线程(主线程)之间通过postMessage Api进行线程间的通讯,可以理解为浏览器给JS引擎线程开了外挂;
ShardWorker是浏览器中所有tab标签共享的,每个tab标签都有独立的render进程,所以SharedWorker不属于某个Render进程,而是浏览器开了独立的进程来管理。
 
 
五、事件循环机制
 
当事件触发线程监测到事件执行时会把事件处理程序放入队列以便事件循环使用,事件队列分为宏任务队列和微任务队列
宏任务:setTimeout,setInterval,setImmediate,requestAnimationFrame,I / O,UI呈现,js同步代码等
微任务:Promises,Object.observe,MutationObserver
事件循环机制的执行过程如下:
 
 

对JS事件机制的深入理解的更多相关文章

  1. node.js零基础详细教程(4):node.js事件机制、node异步IO操作

    第四章 建议学习时间3小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  2. js事件机制

    js事件属性:

  3. 对JavaScript事件机制的一点理解

    JavaScript通过事件机制实现了异步操作,这种异步操作可以使CPU可以在IO任务的等待中被释放出来处理其他任务,等待IO结束再去处理这个任务.这个是一个基本的事件机制. 那么是不是说事件从监听到 ...

  4. js事件机制——事件冒泡和捕获

    概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获. IE浏览器:事件从 ...

  5. 使用js事件机制进行通用操作&特定业务处理的协调

    背景:提供一个通用的功能工具条,工具条会在特定的事件响应时进行一些通用处理:第三方系统使用iframe嵌入这个工具条中,在工具条的特定的事件响应时进行通用处理的时候,有可能第三方系统会有一些自己的业务 ...

  6. js事件浅析

    js中关于DOM的操作很多,因此js事件机制也就尤为重要. 事件绑定形式: 一. 内联形式 耦合度高,不利于维护 <button onclick="alert('你点击了这个按钮'); ...

  7. JavaScript 详说事件机制之冒泡、捕获、传播、委托

    DOM事件流(event  flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event  capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...

  8. Node.js 事件循环(Event Loop)介绍

    Node.js 事件循环(Event Loop)介绍 JavaScript是一种单线程运行但又绝不会阻塞的语言,其实现非阻塞的关键是“事件循环”和“回调机制”.Node.js在JavaScript的基 ...

  9. JS执行机制详解,定时器时间间隔的真正含义

     壹 ❀ 引 通过结果倒推过程是我们常用的思考模式,我在上一篇学习promise笔记中,有少量关于promise执行顺序的例子,通过倒推,我成功让自己对于js执行机制的理解一塌糊涂,js事件机制,事件 ...

随机推荐

  1. pm2使用 node 进程管理

    1.问题 使用阿里云服务器时遇到一个问题,就是只能开一个命令窗口,加入运行node服务,只能起一个服务,不能启多个服务.pm2可以解决这个问题. 2.pm2简介 官网:https://pm2.keym ...

  2. PHP 动态输出 svgz 格式图片

    使用PHP动态生成SVGZ图片(gzip压缩的SVG) 经测试SVG的动画性能很差,简单的动画CPU都能占到 30%左右. 可能的用途: 动态天气图片 访问统计计数图片 文字验证生成 动态头像 静态外 ...

  3. php nl2br 将\n变成<br />

    <?php $str="h t m l"; //定义一个多处换行的字串 echo "未处理前的输出形式:<br />{$str}"; #nl2 ...

  4. Golang 实现UDPServer并发送消息到ActiveMQ

    示例代码 package main import ( "net" "os" "github.com/gpmgo/gopm/modules/goconf ...

  5. jmockit使用总结-MockUp重点介绍

    公司对开发人员的单元测试要求比较高,要求分支覆盖率.行覆盖率等要达到60%以上等等.项目中已经集成了jmockit这个功能强大的mock框架,学会使用这个框架势在必行.从第一次写一点不会,到完全可以应 ...

  6. 安卓 App 性能专项测试之流畅度深度解析-上篇

    指标背景 流畅度,顾名思义是用户感知使用App页面时的流畅情况,"App卡不卡",这是用户最直接的感受. 但是要用量化之后的数据衡量流畅度,在Android平台这边并没有直接有效的 ...

  7. python定时任务APScheduler

    APScheduler定时任务 APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令.同时,它还支持异步执行.后台执行调度任务. 一.基本 ...

  8. 腾讯物联网操作系统正式开源,最小体积仅1.8 KB

    9月18日,腾讯宣布将开源自主研发的轻量级物联网实时操作系统TencentOS tiny.相比市场上其它系统,腾讯TencentOS tiny在资源占用.设备成本.功耗管理以及安全稳定等层面极具竞争力 ...

  9. 【剑指offer】1+….+n,不能使用相关关键字

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 分析:可以使用递归! class Soluti ...

  10. [转帖]50 亿美元!微软签下毕马威!JEDI 100 亿美元订单之后又一大单!

    50 亿美元!微软签下毕马威!JEDI 100 亿美元订单之后又一大单! https://mp.weixin.qq.com/s/K0SrFNSVK5aOu6TIzhN92Q 前段时间,微软击败亚马逊, ...