js 队列
js 中的异步队列(micro & macro)
js都是靠事件驱动的, js中的事件循环机制是什么呢?
只是简单写一下自己的理解, 所以不是很全面;
js 程序执行有 主队列 以及 异步队列两种方式
栈中是按照顺序进行执行, 对于一段代码的解释, 按照不同的类型进行解释,
入栈, 然后按照栈的顺序(后进先出)依次进行执行
主队列, 即从上到下的方式依次进行执行
异步队列主要包括macroTask 和 macroTask
macroTask, 主要包括 setTimeout setInterval IO UIRendering(只列举常用的)
microTask , 主要包括 Promise process
主线程执行完成后, 会首先查看 microTask 队列中是否有, 执行完成后, 再执行 macroTask
例如如下我的测试代码
console.log("1")
setTimeout(function () {
console.log("2")
})
Promise.resolve().then(function () {
console.log("3")
setTimeout(function () {
console.log("31")
setTimeout(function () {
console.log("311")
})
Promise.resolve().then(function () {
console.log("3111")
})
})
}).then(function () {
console.log("4")
})
setTimeout(function () {
console.log("5")
Promise.resolve().then(function () {
console.log("51")
})
})
console.log("11")
//输出如下: 1 11 3 4 2 5 51 31 3111 311
//macro [2, 5] [31]
//micro [3, 4] [51]
需要注意的地方:
microTask会阻碍页面的 render, render 是属于 macroTask;
所以如果有 microTask 一直循环执行的话, 会阻碍 ui 的 render;
但是 setTimeout 不会;
另外要注意 rAF(requestAnimationFrame) 的使用, 这个是用来专门进行渲染使用的, 执行速度会
比 setTimeout 少很多.
js 队列的更多相关文章
- js 队列和事件循环
1.示例代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UT ...
- 简单的js队列
简单的js队列 /** * [Queue] * @param {[Int]} size [队列大小] */ function Queue(size) { var list = []; //向队列中添加 ...
- js队列
用指针和数组模拟基本队列 http://blog.csdn.net/zhuwq585/article/details/53177192 js下的事件队列,或者异步队列 http://www.jb51. ...
- js队列的实现问题
所谓队列就是排队的序列问题,有出有进,比如在银行排队办理业务,一般都是前一个办理完成后下一个自动进入队列 <script> /* * 模拟队列 */ var Qu ={}; //构造函数 ...
- 一个简单的js队列,逻辑很清晰
function Queue(type) { //type 是否是一个接着一个执行 function QueueConst() {} QueueConst.execute_ing=[], QueueC ...
- 写js写傻了,明天研究一下异步
在html某元素上绑定一个click事件,该事件是一个执行事件很长的函数,比如执行几十亿或几百亿次加法,那么在这个函数执行的过程中,其他元素绑定的事件,是如何触发的呢,异步触发还是同步,触发时是怎么执 ...
- 队列的实现 -- 数据结构与算法的javascript描述 第五章
队列也是列表的一种,有不同于列表的规则. 先进先出 入队方法 出队方法 可以找到队首 可以找到队尾 可以查看队列有多长 可以查看队列是否为空 这是一个基本的需求,围绕他来实现,当然我们可以自己扩展列表 ...
- 试着讲清楚:js代码运行机制
一. js运行机制 js执行引擎 经常看文章的说到js是带线程的,其实这个说法非常的模糊,准确的是js执行引擎是单线程的,js执行引擎就是js代码的执行器,有了这个概念就可以下来说说js是如何运行的了 ...
- AJAX原理及XMLHttpRequest对象分析
今天的主题是前端都了解的AJAX,但其中都有哪些知识点,还需要深入分析. 首先揭示AJAX的字面意思,Asynchronous Javascript And XML,通俗点就是“异步Javascrip ...
随机推荐
- String类的方法应用
String类的几个方法的应用示例: using System;using System.Collections.Generic;using System.Linq;using System.Text ...
- Ablation Study
We often come across 'ablation study' in machine learning papers, for example, in this paper with th ...
- 第一阶段:Java基础 1.JAVA开发介绍---6. Java基本数据类型
Java 的两大数据类型: 内置数据类型(基本数据类型) 引用数据类型 本数据类型: Java语言提供了八种基本类型.六种数字类型,一种字符类型,还有一种布尔型. byte,short,int,lon ...
- element-ui Upload 上传获取当前选择的视频时长
<el-upload class="upload-demo" ref="vidos" :action="URL+'/api/post/file' ...
- 前端工程师拿到全新的 Mac 需要做哪些准备
最近苹果退出了新款 Mac,用了3年15款Pro之后,终于盼到18款的降价,于是含泪更新换代 但是每次换电脑,重装环境的好多东西记不清,于是记个笔记 一.终端 安装 zsh sh -c "$ ...
- consul:健康检查
官方文档:https://www.consul.io/docs/agent/checks.html consul提供的健康检查有以下几种: 1.script+interval 2.http+inter ...
- 搞不懂JS中赋值·浅拷贝·深拷贝的请看这里
前言 百科定义:拷贝就是拷贝指向对象的指针,意思就是说:拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间,浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的时候,指向这 ...
- 024:Java流实现Shell:cat 1.log | grep a | sort | uniq -c | sort -rn
本文阅读时间大约13分钟(本文实践性很强,建议pc端阅读,最好亲自实践). 参考答案 这个问题考察的是对Linux命令的熟悉程度,以及对Java中集合操作的综合运用,自从转到Java 8以后,我就一直 ...
- CDA数据分析实务【第一章:营销决策分析概述】
一.营销概述 营销是关于企业如何发现.创造和交付价值以满足一定目标市场的需求,同时获取利润的学科.营销学用来辨识未被满足的需求,定义,度量目标市场的规模和利润潜力,找到最合适企业进入的细分市场和适合该 ...
- css 带换行的垂直居中
span{ display:flex; justify-content:left; align-items:center; height:100%; width:100%; }