Javascript教程十——事件循环机制

本文深入解析了JavaScript的事件循环机制,包括宏任务和微任务的执行顺序,以及防抖和节流技术的应用。通过实例演示了如何理解和实践这些核心概念,提升对单线程环境下异步编程的理解。

事件循环机制

事件循环,也就是EventLoop,也就是完成一个任务会需要完成一系列的任务,因此会有一个任务队列,用循环的方式一个个执行,同时执行期间的机制依据着:

同步   >   异步

很好理解,就是同步的任务一定是排着队的一个个从前往后执行,但是异步是会比同步慢一点,这是无可厚非的,但是在异步里面也是要分先后的。

JS单线程

这里我们需要了解,JS是单线程机制程序,所谓单线程,便是同一时间,只能有一个线程任务执行,因为如果存在多个线程,那么页面的加载就完全不受控制了,不知道究竟谁会先出现,为保证页面的顺利进行,必须实行单线程机制。

因为JavaScript是单线程运行的,所有的任务只能在主线程上排队执行,这就是事件循环机制的基础——事件队列。

异步

但是我们不能保证事件队列里面的事件一定可以在合适的时间完成,举个🌰:

如果一个网络请求会去请求网络数据,需要花费20分钟,那么我们的页面要等待20分钟吗,很明显,不可以,这样就会卡住页面,我们需要实行异步,便是这个网络请求需要让出cpu,让事件队列的其他事件先执行,等我请求数据返回再占用cpu,所以这就是JS前端异步的重要,也是必须要实现的。

任务类型

任务类型主要分为两种:宏任务 marco-task 和 微任务 micro-task
在ES6中,宏任务又称为ScriptJobs,而微任务又称PromiseJobs

宏任务

宏任务在真实性况下有以下几种:

脚本(主程序代码),setTimeout,setInterval,setImmediate

微任务

微型任务的真实包含任务:

async/await,Promises

所以我们可以罗列一下任务执行的顺序:

脚本(主程序)—>Promise...--> setTimeout

举个🌰:

setTimeout(function () {
	console.log(3);
}, 0);

Promise.resolve().then(function () {
	console.log(2);
});
console.log(1);

结果是: 1、2、3
执行顺序:

主程序代码——>Promise——>setTimeOut

再举个🌰:

setTimeout(function(){console.log(1)},0); // 宏任务(排后面)

new Promise(function(resolve,reject){
	console.log(2);  // 它实际上是主程序,根本没有异步
	resolve();
}).then(function(){console.log(3)    // Promise的resolve 异步
}).then(function(){console.log(4)}); // Promise的reject 异步

process.nextTick(function(){console.log(5)});  // process.nextTick 异步

console.log(6);  //  主程序

// 输出2,6,5,3,4,1

主程序代码——>Promise——>setTimeOut

经典案例:

async function async1(){
	console.log('async1 start')
	await async2()
	console.log('async1 end')
}

async function async2(){
	console.log('async2')
}

console.log('script start')

setTimeout(function(){
	console.log('setTimeOut')
}, 0)

async1()

new Promise(function(resolve){
	console.log('promise1') 
	resolve()
}).then(function(){
	console.log('promise2') 
})

console.log('script end')

输出:

// script start
// async1 start
// async2
// promise1
// script end
// async1 end
// promise2
// setTimeOut

JS的防抖与节流

防抖

简单来讲,防抖就是当页面的一个标签被反复触发,只会让最后一次的事件一段时间后生效。

既然涉及到了时间,就需要设置一个计时器,然后计时器延时执行任务:

setTimeOut(function(){
	// 这里是要执行的操作
	func(); //  执行触发函数
}, wait); // wait 是延迟的时间

因为多次点击后,只有最后一次的可以执行,很明显,多次点击后,前面的定时器被清除了,我们来了解一下定时器的清除:

clearTimeout();

所以就是一个定时器如果存在,那么就清除它,然后从头开始一个计时器:

var timer;
if(timer != null){
	clearTimeOut(timer);
}else {
	timer = setTimeOut(function(){
		func(); 
	}, wait); 
}

然后把它们放进一个函数,因为涉及到一个存在问题,可以认为timer是一个全局变量,但是可以利用闭包放进局部变量里面:

function fangdou(func, wait){
	var timer;
	return function TimeMaker(){
		if(timer != null){
			clearTimeOut(timer);
		}else {
			timer = setTimeOut(function(){
				func(); 
			}, wait); 
	}
}

节流

节流和防抖不太一样,如果我们持续点击一个button,那么我们会让button绑定的函数在一个时间段内保证只执行一次,然后此次执行完成后就会开启另外一个时间段来执行下一次的任务,不会执行太多次,但并不是一次。简单来讲一句话,同一时间段,只让第一个操作执行。

因此可以设计一个标签,判断当前时间段有没有定时器在执行,如果有,那么就可以直接返回了,当时没有定时器,那么就可以在这个时间段申请我的事件。

function jieliu(func, wait){
	var timerTag = false;  // 没有占用
	return function TimeMaker(){
		if(timerTag){
			return; // 当前有定时器,这个时间段就不用再执行了
		}else {
			timerTag = true; // 占用这个时间段
			setTimeOut(function(){
				func(); 
				// 执行完成,可以更改标签允许下一个时间段进行任务了
				timerTag = false; // 释放允许占用
			}, wait); 
	}
}
<think>嗯,用户之前问过关于2021 LTSC Entry的问题,现在又问Windows 10企业版LTSC有哪些版本。我需要先确定用户的具体需求是什么。可能用户是企业IT管理员,或者需要部署稳定系统的用户,想要了解不同版本的LTSC以便选择合适的。 首先,回顾之前的回答,已经提到了LTSC分为Windows和Office两种,而用户现在的问题集中在Windows 10企业版LTSC。我需要明确区分Windows 10Windows 11的LTSC版本吗?不过用户只提到了Windows 10,所以应该专注于Windows 10的版本。 然后,要确认Windows 10企业版LTSC的各个版本。根据微软官方资料,Windows 10LTSC主要有2015、2016、2019、2021这几个版本,每个版本对应的内部版本号和功能更新不同。需要列出每个版本的发布时间、支持周期、基于的Windows 10版本以及主要特点。 另外,用户可能还会混淆IoT企业版LTSC和普通企业版LTSC的区别,需要说明这两个版本的不同应用场景,比如IoT版用于嵌入式设备,而企业版用于一般企业环境。此外,用户可能对版本的支持周期特别关注,所以需要详细说明每个版本的主流支持和扩展支持截止时间。 需要注意的是,微软的LTSC版本通常每两到三年发布一次,但具体时间可能有变化。比如2015年的初始版本,后续有2016、2019、2021,但2021版本其实是在2021年11月发布的,对应的是Windows 10 21H2版本。此外,还要提醒用户,LTSC版本不包含许多消费者功能,如应用商店和Cortana,适合需要长期稳定性的环境。 另外,用户可能需要知道如何获取这些版本,比如通过VLSC渠道,或者需要确认当前使用的系统版本,可以通过winver命令查看。同时,用户可能关心如何选择适合自己需求的版本,比如硬件兼容性、支持周期等,所以需要给出选择建议。 最后,要确保回答结构清晰,分点列出每个版本的信息,对比表格可能更有助于用户理解。同时,补充注意事项,比如普通用户无法直接购买,需要企业授权,以及兼容性风险等,这些都是用户在部署时需要考虑的因素。</think>以下是**Windows 10 企业版 LTSC** 的主要版本及其关键信息整理: --- ### 一、版本发展时间轴 | 发布年份 | 正式名称 | 对应Windows 10版本 | 支持周期(主流/扩展) | |----------|------------------------------|---------------------|---------------------------| | 2015 | Windows 10 Enterprise LTSB | 1507(Threshold 1) | 至2020年10月 / 2025年10月 | | 2016 | Windows 10 Enterprise LTSB | 1607(Anniversary) | 至2021年10月 / 2026年10月 | | 2019 | Windows 10 Enterprise LTSC | 1809(October 2018)| 至2024年1月 / 2029年1月 | | 2021 | Windows 10 Enterprise LTSC | 21H2(November 2021)| 至2027年1月 / 2032年1月 | > 注:**LTSB(Long-Term Servicing Branch)** 是LTSC的前身命名,2019年后统一改称LTSC --- ### 二、核心版本对比 #### 1. **2015/2016 LTSB** - **特点**: - 初代长期服务版本,仅含基础系统组件 - 无Microsoft Store、Cortana、Edge浏览器等现代功能 - 最高支持到DirectX 12(但部分新特性缺失) - **适用场景**: - 工业控制系统(需严格避免更新干扰) - 银行ATM机、医疗设备等专用终端 #### 2. **2019 LTSC** - **重大改进**: - 首次支持Windows Defender高级防护 - 集成.NET Framework 3.5/4.8 - 新增对UWP驱动模型的支持 - **硬件兼容性**: $$ \text{最低要求:CPU ≥ 1GHz, RAM ≥ 2GB(32位)/4GB(64位)} $$ #### 3. **2021 LTSC** - **新特性**: - 支持WPA3加密协议 - 内置Chromium内核的新版Edge浏览器(可卸载) - 增强硬件安全功能(如基于虚拟化的安全防护) - **限制说明**: - 不支持Intel 12代及更新的混合架构CPU调度优化 - 部分新API(如WinUI 3)需手动适配 --- ### 三、特殊衍生版本 1. **IoT 企业版 LTSC** - 专为嵌入式设备优化的分支 - 移除更多非必要组件(如打印机驱动库) - 支持10年生命周期(例:2021 IoT LTSC支持至2032年) 2. **Server 等效版本** - Windows Server 2019/2022 LTSC(与客户端LTSC同步更新) - 提供相同的长期支持策略 --- ### 四、版本选择建议 1. **优先考虑因素**: - **硬件兼容性**:新硬件建议选2021 LTSC - **软件依赖**:老旧工业软件需匹配2016 LTSB - **安全需求**:涉及敏感数据推荐2019/2021 LTSC 2. **生命周期对照表**: ```plaintext | 版本 | 主流支持截止 | 扩展支持截止 | 剩余有效年限* | |-----------|--------------|--------------|---------------| | 2015 LTSB | 已结束 | 2025年10月 | ≈1.5年 | | 2016 LTSB | 已结束 | 2026年10月 | ≈2.5年 | | 2019 LTSC | 2024年1月 | 2029年1月 | ≈5年 | | 2021 LTSC | 2027年1月 | 2032年1月 | ≈9年 | (*截至2023年10月计算) ``` --- ### 五、获取与验证 1. **合法获取途径**: - 通过微软批量许可服务中心(VLSC)下载 - 需持有企业级Volume Licensing协议 2. **系统版本验证**: - 运行命令提示符输入: ```batch systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" ``` - 典型输出示例: ```plaintext OS 名称: Microsoft Windows 10 Enterprise LTSC 2021 OS 版本: 10.0.19044 暂缺 Build 19044 ``` > **注意**:普通消费者渠道(如零售店)无法购买LTSC版本,非法激活将导致法律风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值