一天一个计算机知识,今天要讲的就是 node js 以及它的架构,那 node js 到底是什么架构,又长什么样呢? 想象一下,你是一家热门在线书店的开发人员,这家书店网站每天都有大量用户访问,他们会搜索书籍,查看详情、下单、购买。 网站的服务器需要处理各种各样的请求,比如查询数据库里的书籍信息,处理用户的登录和注册、更新订单状态等等。随着业务的不断发展,访问量越来越大,传统的服务器技术开始有点力不从心了。比如说 处理一个用户的查询请求时,服务器需要从数据库里读取数据,这个过程可能会花费一些时间,在这段时间里, 服务器就只能干等着,没办法去处理其他用户的请求,导致响应速度变慢,用户体验变差。这就好比餐厅里只有一个厨师一次只能做一道菜,后面的顾客只能排队干等,效率非常低。那有没有一种办法能让服务器在等待数据库响应的时候 去处理其他请求,提高效率呢?这时候 no g g s 之前,我们先看看传统的服务器开发模式。 传统的服务器开发就像是一个单县城的流水线,每个请求都要按照顺序依次处理,一个请求没处理完,后面的请求就得等着。这就像我们前面说的,餐厅厨师一次只能做一道菜。 这种模式在处理少量请求的时候还可以,但一旦请求量变大,就会出现性能瓶颈。而 note g s 采用的是事件驱动非阻塞 i o 模型。这听起来有点复杂,我们用生活中的例子来解释一下, 想象一下,你去银行办理业务,银行有很多窗口,每个窗口都有一个工作人员,当你走到一个窗口,工作人员会马上接待你。但如果办理业务需要一些时间,比如需要查询一些资料, 工作人员不会让你干等着,而是会给你一个号码牌,让你先去旁边坐着等,然后去处理其他顾客的业务。等资料查询好了,工作人员会通过广播叫你的号码,你再回来继续办理业务。这就是事件驱动非阻塞 i o 模型。 在 no do j s 里,当服务器收到一个请求,需要进行一些耗时的操作,比如查询数据库时,它不会一直等着, 而是会把这个操作放到一边去处理其他请求,等数据库查询结果返回了,再回来处理这个请求,这样就大大提高了服务器的处理效率。 no g j s 的 核心是基于 chrome 的 vba scripting scene。 v 八引擎是谷歌开发的一个高性能 javascript 引擎,它能把 javascript 代码翻译成机器码,让代码运行得非常快。这就好比给汽车装上了一个强大的发动机,让它跑得更快。在 no do jess 里, v 八引擎负责执行 javascript 代码。除了 v 八引擎, no g j s 还有一个事件循环机制。事件循环就像是一个调度员,他会不断地检查有没有新的事件需要处理。当一个耗时的操作完成后,会触发一个事件,事件循环就会把这个事件放到处理队列里, 然后依次处理这些事件。还是用银行的例子来说,事件循环就像是银行的广播系统,会不断地检查有没有顾客的业务,办理好了,然后通过广播通知顾客。 no g js 还有一个模块系统,模块就像是一个个小的功能组建,你可以把不同的功能封装成模块,然后在需要的时候引入使用。这就像搭积木一样,你可以用不同的积木搭建出各种各样的东西。 比如说,你可以有一个专门处理数据库查询的模块,一个处理用户登录的模块,一个处理订单的模块等等。通过模块系统,你可以把代码组织得更加清晰,提高开发效率。 n g j c 的 架构还包括一些内置的模块和 api, 这些内置模块和 api 提供了很多常用的功能,比如文件系统操作、网络通信、加密解密等等。你可以直接使用这些内置模块和 api, 而不需要自己从头开始编写代码。比如说,你要读取一个文件,只需要调用 nojs 的 文件系统模块提供的 api 就 可以了。 noj js 是 什么?简单来说, nojs 是 一个基于 chrome v 八引擎的 javascript 运行环境, 它让 javascript 可以 在服务器端运行。它采用事件驱动非阻三 i o 模型具有高性能、高并发的特点,通过模块系统和内置的 a p i, 开发者可以快速地搭建出各种服务器应用。 no g j s。 的 应用场景非常广泛, 除了我们前面说的在线书店、网站,它还可以用于开发实时聊天应用、游戏服务器、 a p i。 接口等等。在实时聊天应用中, no g j s。 的 事件驱动和非阻塞 i o 模型可以让服务器同时处理大量用户的消息,保证聊天的实时性。在游戏服务器中, no g j s 可以 快速处理玩家的操作请求, 保证游戏的流畅性。现在大家对 no g s 和它的架构有一定了解了吗? no g j s 虽然有很多优点, 但也有一些局限性,比如说它是单线城的,对于一些计算密集型的任务,处理能力可能会有限。那有没有办法解决这个问题呢?这就涉及到 node js 的 多线城和集群模式了,下期我们就来聊聊这个话题。
粉丝331获赞963

接下来呢我们要再去实现一个需求,这个需求呢就是并发的去读取这三个文件,当这三个文件全部读取完成之后呢,我们再一次性的来拿到所有的读取结果。 如果说我们通过毁掉函数的方式去做这个事情的话,那么这个代码呢依然要写成毁掉低于的形式。接下来呢我们要看一下如何通过 promise 来解决这样的需求。现在我们切换到 maca 文档当中, 在 pro miss 这个构造函数的下面呢,他给我们提供了一个方法,这个方法的名字呀就叫做奥奥,这个方法的作用呢就是让我们去执行并发操作的,当所有的并发操作都执行完成之后,他允许我们统一来拿到所有操作的结果。 在我们调用奥方法的时候呀,可以去传第一个数组进去,那么数组当中的每一项呢都必须是一个 promise 对象,当所有的 promise 对象都执行完成之后呢,他就会去调用邓方法里面的这个毁掉函数了。那么这个 回答来说有一个行餐,那么就是所有操作的一个结果,它呢是一个速阻,速阻当中的第一项呢就对应第一个 promise 对象执行的结果,速阻当中的第二项呢就对应第二项 promise 执行的结果。接下来呢我们就切换到编辑器当中来实现这个需求, 首先呢我们把这个代码呀给他注视掉,接下来我们回到上一个文件当中,我们把 rit file 这个方法呢跟着加 c 去复制一下,然后我们拿到四这个文件当中来, 在当前这个文件当中呢,我们要去调用很绕 miss 点儿奥这样的一个方法去执行并发操作。在调用奥方法的时候呀,我们要去传递一个数组进去,数组当中存在的就是 promise 对象,接下来呢,我们在这儿去调用 red file 这样的一个方法,因为 rate file 这个方法在调用之后呢,它返回的就是 promise 对象。好, 那么当前我们就去读取当前这个文件夹下面的 x 点 t, x, t 这样的一个文件。接下来呢,我们复制瑞的 fel, 我们在数字的 转再次去调用 refel 去读取 y 点 t, x, t 这个文件。接下来呢,我们再去读取 z 点 t, x, t 这样的一个文件, 当所有的文件都读取完成之后呢,他会去调用邓方法里面的这个毁掉函数。好,那么在这个毁掉函数当中呢,有一个形参,那么这个形参呢,就是蕊造的啊,那么这个蕊造的他是一个素素,素素当中的第一项对应第一个 pro miss 的执行结果。束组当中的第二项呢,对应第二个 pro mis 对象执行的结果。现在我们保存这个文件,接下来呢,我们切换到 命令行工具当中,在命令行工具当中呢,我们要通过 no 的命令执行四缸 promise 点 out 点 g s 这个文件,注意看在控制台当中是不是输出了一个速度呀,那么数组当中有 x y z。 好,那么这个内容呢,就是无文件当中存储的内容。好,那么现在我们就通过 promise 点奥方法实现了这个并法操作。

这一期是我们零基础技术实战的最后一期啊,讲一下怎么用这个 note x 去练习。本来呢这,嗯,这部分的那个视频是不准备做了,因为我觉得拍成功用了,因为 像在上周,上周有人说那个拍损去调用,因为我们最终还是要做区块链开发嘛。那对于一些零基础的可能去选择语言的时候,有些人之前学过甲板,有些人学过那个拍伞,用甲板去和拍笋的话,其实也能去做区块链开发的。后来 我发现确实在不同的语言里面对调用那个,嗯,关键是 y 不三确实是不一样的,在 no 的 js 里面稍微会好一点,拍摄里面,嘿,有些酷或者是有些那个方式是缺失的,所以我决定就是还是把 note js 去讲一下。为什 为什么我不把就是楼的 zs 放到就是第一个去讲呢?因为他这个配置环境,嗯,比较麻烦。不是说 note zs 配置环境比较麻烦,是我要给你们做一个例子,因为这种东西你不裂是不行的,你光去听听几个语法,听几个, 嗯,他的那个变量怎么去声明,他的那个方法怎么去那个操作是没有用的,这个光听是一点用都没有的,所以说我们还是主要是去练,所以说我想给大家就是说去做一个例子。 那么在前几次的话,我们都是用了一些就是按键的方式来给大家就是说去做练习嘛,那么这次也是一样的。嗯,我们前两次视频讲了,一个是卢瓦,一个是那个拍摄, 理论上来说你光做练习的话是够了,但是发现有些朋友他的那个系统是 mac, 对吧?嗯,那个 mac 的话,还用那个卢瓦去做按揭的话,可能没有 mac 的这样的一个配置。嗯,写拍损的话,拍损的话,因为我们上期视频也说了嘛,但是拍损的话跟老祖加斯还是在调用那个, 嗯,外部餐的时候还是有点区别的,所以说我们这一期还是把这个 note zs 的,嗯,课程给补上。好,我们第一步还是来看一下 这个摩托,摩托加斯怎么去配置这样的一个环境。我给大家讲找了两篇文章,就是我们用挪动加斯,你当然可以去他官网上面去下,对吧?下那个安装包,然后去安装,但是 有很多的,嗯,一些工程吧,或者是一些差距,或者是包,他们对不同的 加斯的版本的支持是不一样的,那你可能会要不停的去切换这个罗德加斯的一个版本,嗯,你长时间的这样的去做切换是很麻烦的,你要去卸载或者怎么样,对不对? 如何去管理好一个 note s 版本呢?我这边用的方案,嗯,是用那个 nvm 啊,是用 nvm 给大家可以看一下。 好,就是这个,那么 m 的话,他有一个官网的,这个就是他的,给他,他不官网,你可以去下,下载好之后这边有一个嗯,解压包,你解压出来直接安装就行啊,这边都傻瓜。是安装的和你需要配置一下他的那个环境避难,因为我这边全部都配置好了,所以我这边就不做,也是了, 对吧?这个很简单的,那么对于很多麦克系统的朋友的话,我这边也讲一边文章,这个就更简单了,他 直接用脚本去帮你去做安装了啊,你只要用一下这个脚本就直接就安装好了。好,安装好了之后呢,我们来看一下具体怎么操作吧,我操作还是跟大家去说一下,虽然这边下载应该会告诉你怎么去用吧,如果没有的话你们也可以。 嗯,去网上随便找一下。嗯,大概意思是很简单的,我们把那个控制台打开,打开之后如果说你这边的环境变量是配置好了的话啊,不管是 mak 也好还是 windows 也好,你这边 mvm 杠币他可以打印出他的版本号吧,啊 啊啊,版本号,然后呢,我们最主要的是安装 no 的包嘛,我们可以用 mvm 里子来看一下我们有多少那个包啊,这个我先把这个 我装的是这么多的环节对不对?如果是维诺斯你要注意啊,你这边要用管理员的方式去打开这个控制台,不然的话这个是有可能安装跟使用不了的。我这边。 嗯,再去补充一点,就是在我们前天吧讲拍摄的时候我们用美丽康达,就说去也是跟这个 nbm 用用的是一样的一个功能吧,就是做一个版本的一个管理,对吧?我们用美丽康达跟那个拍摄去做一个拍摄的那个版本管理,但是呢,我发现 有群里有人之前是安装过那个安能康达的,如果你有那个安能康达的话,你就不要装迷你康达了,对吧?那因为你面对康达比较小嘛?比较小,所以说我我是感觉比你康达是足够用了,所以我才那个,如果你装了一个 比较高级版本的就是你就没有必要再把之前那个卸载,然后再去装逼的好了,这个是完全没有必要的好吧。嗯,这这边我就稍微补充一下。好,那么怎么去安装呢?其实很简单啊,就说我直接 mbm, 因此到吧 install 对吧?给个版本号。嗯,十六点一点零也可以,你或者是跟我一样十六点,嗯,一五点零就可以了,你装好之后你只要再用,嗯嗯, v m us 对吧?十六点一五啊,点零。这边的话我会给大家就是说找一些命令能够稳当,因为我这边已经切换好了,所以说我这边不再做切换了啊,就是大概的这个环境就是这样去做配置的。 好,嗯,包括这样的一个下载的那个链接,我也会发到那个评论下方, 应该是视频结界里面。好,那么我们把这个基础的 note 加速的环境给装好之后啊,你要先去确认一下你的 note 加速的环境是安装好的啊,那我们这边怎么去判断呢? 判断楼的角色的环境是 no 的,对吧?杠比和 n p m 杠比这两个都要。嗯,有显示哦, 好,这两个是缺一不可的。好,那么我们现在把那个环境给安装好了,安装好了之后我们 note z s 怎么去做一个按键的一个单某呢?就给大家做练习的,我这边选择的是那个奥特奥特杰斯,奥特杰斯这个背景我先跟 跟大家说一下,奥特 js 其实发展了已经很多年了,虽然我用的也不是很多。奥特 js 的话,他有一个大的背景是之前这个作者维护的奥特 js 那个版本他不大维护了,然后他用的是奥特 js 的 pro 收费了。 技术这个东西我说过很多次了,你想要变现是非常困难的,你技术学的再好,你最多做到张小龙那个级别。给马化腾去打工嘛,对吧?你还能怎么样呢,对吧?所以说技术你要变现的话很难,技术当中最好变现的就是区块链技术,这个是直接能够变现的, 所以说,嗯,他这边维护了一个就是奥特 gs 的话,他不赚钱,所以说他估计也也是为了生活吧。就说搞了一个 polo 版本,对吧?去收费。那 polo 版本的话,我看一下他们群里面 人也没多少,其实奥特爵斯这功能是非常强大的。嗯,好,那么中国人嘛,都喜欢免费的,对不对?嗯,让你去付个费,你可能要痛苦死,所以说我们还是选择免费的版本,免费的版本的话有一个叫做 oq 叉, 这个是一个社区吧。应该是社区吗?就魔改的一个版本啊,我用了下也蛮好用的啊,虽然他现在没有。就是奥特 polo 里面有很多其他的一些功能吗?那些功能我觉得也 不是很重要,对吧?你有很多方法去可以去解决,他们帮你 polo 里面加了那些功能的,这个不是很重要。我们基础的功能就是把这个就是说奥特杰死来去做一个手机的按揭。嗯,上次我们讲的那个 pass 的按揭的话,他只能做维诺斯的,这个也只是给 给大家做一个打磨练习的。现在谁还有人用这个 windows 的按键去做一些那个自动化的车电电脑都没有几个人用了。我问过好几个朋友,不是朋朋友,就群里面的那个就是群友, 他们可能连电脑都没有。哎,这个时代就是居然就有人连电脑都没有,他们只有一个手机,所以说手机自动化我感觉比那个电脑自动化 可能更加的常用吧。所以说我之前就是第一次讲的话是用录啊,因为他那个的话,我用我那个框架,你可以在三十分钟内,对吧?写出几乎所有的自动化的,就是手机自动化的一个 小的一个工具吧。好,我们话不多说啊,我们再来看这个能乐宅,嗯,能乐宅所的那个奥特宅所的一个按揭。我不想之前就是说先讲这个的话,就是第一就是这个, 搞这个版本真的是很麻烦啊,我们去搞这个奥特叉点 js 的话是怎么搞呢?我们这边给大家重新来演示一下。 都关掉啊啊,我把他的那个工程给删掉啊,全全部删掉,你这边借个文件加,随便你借个文件加,然后呢,你还是用那个 vs 扣子打开啊,让 vs 扣子的安装之前我们都已经说过了,这边因因为删掉了嘛,对不对?那我们把这个也删掉, 嗯,懂啥呀,哎, 嗯,这样吧,啊,这里这里就没了,我把这个两个上,其实我四 s 扣的用的比较少,我们按住键盘上的 ctrl 加 shift 加 p, 调出这样的一个命令, 你好啊, ctrl shift 加 p 啊,我给大家打一下吧,因为我可能不配字母的。这个啊,是 ctrl 啊, ctrl 也加 shift 加屁,麦克上面应该是 come on 啊, come on 的剑,你们应该知道是哪个夜晚, come on come on 姐,对吧?就是一个,嗯,就是在那个 windows 奥特界的那个位置哦,嗯, come on 加 p 吧,我,我记得如果不是的话,你们可以去那个 vs 扣的里面那个快捷键里面自己去找一下那个迈克上面的快捷效果 我可能不太清楚,但是我根据他这边的话就是这边说明的话, come on 的界就是代表着这个坑,这这个 ctrl 吗?对吧?然后,嗯,可能你还要按一下幸福的加皮啊,你们那个那个上面自己去试一下。 好,我这边只用维诺斯去做实体啊,那个维诺斯的话这边打开这个命令啊。啊,打开这个命令的话,我们下看到有很多的那个面料,我们输入一下 oto 结实 好,然后我们看到第一个就是开启服务。好,我们打开服务。 哦,是因为我刚刚已经打开了这个端壳被占用了 啊,但是没有关系啊,我们先把这个工程给借起来吧,我们工程还没借呢,对吧?我们先把工程给借起来。我不知道是不是因为我没有借工程,先不用开那个服务,我这边流程错了,应该是先女友普洱交给他看,没有,下面有个新界项目。 好,然后呢?我们这边,嗯,就选这个文件夹吧,到这里他自动会帮我们去选择这创建这两个主要的文件,一个是梅姐 gs, 一个是,嗯,这样的一个工程的一个配置文件,对吧?然后我们再开启服务,我看下是不是端口的问题啊? 我感觉应该是端口问题吧,我先把端口给关一下啊,这里的话我们就一起看一下怎么去查看维斗 死的那个呃,端口是否被占用吧。好吧, 我们首先去查一下那个我最卷手的那个端口是否被占用,我们用这个美人 这个是查看端口的,然后我们去找,因为这个端口有很多嘛,我们去找 找一个自负串,叫做九三幺七,这个自负串,九三幺七这个端口就是奥特爵斯的那个默认端口,如果你没有改的话,能找出来他是被, 嗯,他是被占用了的,对吧?他是被占用了的。好,我们再看一下这个被占用的具体的 他的进程来的,因为我们要把他进程给杀掉,因为这个端口已经被这个进程给占用了,我们只有把这个进程杀掉之后,这个端口才会被释放啊。他这个扣的点 esc, 他这个扣的点压死一就是我们现在的这个 vs 扣子吧。那你有两个方法,第一个就是你直接用杀进程的命令啊,直接把这个进程给杀掉。 那么第二个方法就是既然他被这个 vs 扣子给占用的话,我直接把这个 vs 扣子关掉不就好了吗? 试一下啊,关掉它啊,没有了,好,然后我们再看一下有没有被占用,还是没有了,对吧?那我们重新打开一下, 好,然后我们现在, 嗯,去启动,我们现在启动应该可以了吧?我们再把那个命令航空打开,然后开启服务, 我这边已经成功开启服务了。嗯,到此为止,其实我们这边的一个外置的一个配置都已经完成了,那么我们还要做一些什么配置呢?首先 可能就是我们还要一个雷电模拟器,对吧?嗯,你不是雷电模拟器也可以,你用夜神也可以啊,但是夜神有个问题就是,等等,我会说这个夜神的那个 adb 的那个进程啊。嗯,你要自己去找他的那个 adb 的那个进程,自己去连接一下,这个特别麻烦啊,雷电,他比较傻瓜,所以说,嗯,还是用雷电吧,雷电的话这边有一个这样的一个 工程啊,要不这样这样的一个 app, 我先把它给卸载掉,这个 app 就是你要在手机上面装的这个 app, 你才能跟外面的这个去做理解的啊,所以说我们一起来实验一下。 嗯,然后呢这个 app 我重新装一下,这个 app 我会给你给你们。嗯,先装一下啊,装完之后呢,我要给你们演示什么呢?你这边要设置一下的, 首先这边还要开启一个叫做,嗯,设置下,哎,我,我不这样设置,我 如果说你刚刚那个弹弹出的那个界面点这边有一个按钮,不是说去设置吗?你如果说你没有按,你忘记了,对吧?你把这个精神给关了,哎。啊,你重新打开,这边是没有的吧,应该是,我记得应该是啊,还是有的 啊,那你可能会,你点不再提示啊你可能会点的不再提示,他应该没有了吧,他不会还出现吧? 啊?没有了啊,那你怎么样才去才能去那个去做设置呢?其实很简单啊,这边有三个杠,看没有左上角点这三个杠,然后无丈夫,刚刚那个去设置就是无丈夫,你要开启几个他要这样的配置呢?第一个就是无丈夫, 然后的话无障碍服务里面有个服务,服务下面有个奥特,嗯,差点 js 这样的一个服务,对吧?你要点击,我这边是关闭的啊,大家看清楚啊,这边关闭的,然后点击,然后开启, 确定开启好之后你回来确认一下是否开启,开启完了就行了,然后你再退出,退出这边的话无障碍服务这边已经就是开关已经打开了嘛,同时你下面还要把这个服装给打开啊。服装打开这个也很重要, 虽然我们不一定会去用啊,但是这个这个服装很重要,因为你 oto g s 他其实跟其他的案件不太一样的地方就在于奥拓 g s 他是以 那个空界驱动的。什么样的空界驱动呢?啊?我这里先不说,因为说了,可能因为我我们还是做零基础的吧,说了太多,可能有些人还是不懂的。嗯,然后呢?我们这边还有一个最重要的就是连接电脑,对吧?我们点点一下,然后,嗯,可以吗?这边这边应该不行了吧? 啊?是连接不了的,为什么连接不了呢?我们可以看到啊,我们刚刚去连接的时候,他的那个 ip 是十点零点零点二,对吧?这,这是他内置的一个虚拟 ip, 而我们现在的本机的 ip 呢?你要把这个 叫什么?这个模拟器和你的这个。嗯, id e 就是编码的这个工具啊,要处于同一个网络。那我现在的这个网络是什么呢? ip 看这个看一下啊,我现在是 幺九二点幺六八点一点七,对不对?所以你要出去做一个。嗯,调节调节,怎么调节调节呢?我们打开这个软件设置,软件设置里面有一个网络设置,网络设置下面他本来是没有的,他本来这边是关闭的, 然后你要开启开启一个调节,开启调节之前你要安装一下这个调节模式的一个驱动啊,你点击安装,我这边已经安装好了, 然后呢,他一开始的网卡是没有去做配置的,你要去配置一下你的那个网卡,每个人的网卡都不一样,这边我就不说了,你可能是插网线的,他可能就是以网线的这个方式,那那个网网卡我这边是 wifi 的,所以我选的那个 wifi 的,对不对? 好,然后呢,这边的话他还有一个就是动态配置跟静态配置,我们选择静态配置,这个雷铁这边那个桥接做的也很差,那个 夜神他直接,嗯,自动配置就可以了,但是雷电的话他自动配置,嗯,他这边自动配置的话就是那个虚拟的那个 ip, 所以说我们这边还是弄一下就是进来配置,进来配置的话 网关你是一定要选的,网关你怎么去看?我们刚说了要把你这个网络就是你的变异器,你的 id 变异器要跟他这个雷电模拟器要 处于同一网络,处处于同一网络,就是你网关肯定要一样吗?对吧?我们看一下你自己的这个我,我是无限的,那个网关是多少呢?是幺九二点,幺六八点一点一啊,那你就幺六幺九二点,幺六八点一点,网关肯定都是一样的, 你上面的 ip 的话,你选一个,就是没有分配贵的。那你怎么选呢?主要是改最后一位,一般的话网关都是 ip 是一嘛,对吧? 你后面的就你随便去选了,你最好是稍微大一点,对吧?从一百开始到那个二五五吗?你随便选一个,选一个没有用过的,如果你这个 ip 你在局网内有人用过的话,他会 ip 充足,你这个 ip 就不能用。好吧,那你就换一个 啊,保存好了之后你重启一下这个模拟器,他现在就是,嗯,这个 ip 地址的,所以说我们现在的话就是是处于同一网络,但是为什么我们现在处于同一网络,我还是连不上去呢?对不对?我,我刚刚不是连接电脑,我还连不上去吗? 大家看这边有一个复习地址啊,复习地址的话,我这边用的还是那个虚拟网络, 但是我们服务器是在本地的吗?我们刚刚开启服务,开启这个服务他的那个地址啊,这边就 已经有了,他那个软里昂什么呢?幺九二点幺六八点一点七,对吧?后面那个九三幺七就是那个陌生端口号吗?就是我们刚刚看的端口号。好,然后我们其实这个服务器就是跑在哪里啊?跑在我们本地,对吧?这个 ip 上面,所以说我们把这个 ip 给放上去, 好,连接成功了,对吧?这边看到连接成功了,那么怎么能判断他是真的是连接成功呢?是不是?好,我们运行一下吧, 我们这边点一个按钮。哦,我忘了跟大家说说个事情啊,我忘说一个很重要事情,我们按那个 ctrl 加那个 shift 加 p, 调出这个命令。好,你是调不出来的, 为什么呢?是因为你要装一个插件啊,这个是很重要的,你不装这个插件就没有啊,就是这个插件,这个插件呢?你如果在这边搜关键是奥特杰斯,你会搜出很多啊,你搜出非常多,对不对?你要装哪个呢?而且有两个是名字都是一样的啊, 你要装这个作者是艾柔沉的,对不对?我应该没听错吧?艾柔沉的这个 啊,这个是三颗星的啊,这边就是眉心,因为这个好像不维护了吗?你要装这个,装完之后,哎,那你就可以就是用我刚刚那个命令啊,去开启服务这样的一个方式了,好吗? 好,你装完之后呢?他这边还有一个就是启动嘛,对吧?启动运行你的日脚本的,在这个模拟器里面运 脚本,我们点启动好,这边我们就可以把这个给打出来了,但是你会发现一个事情,你会发现一个什么事情呢? 我们通常写那个现在这 f squeeper 的话,我们用的比较多的肯定是 e s 六跟 e s 七的嘛,这种标准的,但是他只支持 e s 五的和部分 e s 六的,那么会出现一个什么情况?我这边用 a sink, 对吧?我这边用一个 a think, 我把这个方法给包装一下,我看能不能调用啊? 我可以调用吗?这样 不行啊,这边爆错了,因为好,他好像 不支持这个 a 型口的问题,但是我们一定要用这个东西,你如果不用这个东西,你就会看到地狱。好吧,我们一定要用这个东西,那怎么去用呢?现在关键就在于说我们怎么用这个,就觉得是来去接容 e s 六跟 e s 七的那个标准,对吧? 现在他只支持那个贾克斯亏本的那个 e s 五的和部分 e s 六的。那不用 e s 七不行啊,我们之后如果有一些你要做一些那个网络操作相关的,你会痛苦死,那么怎么办呢? 嗯,这个就很麻烦了,我们首先要用到一个给他还不上面的一个工具,这个我就不跟你们具体讲了,因为我们这个还是以基础为主,那这部分就已经远远远远超过了基础的这个范畴了,你包括有一些开发 过两三年的,我估计他们不一定都会搭建这个环境,我这边已经搭建好了这个环境,我给你们演示一下,好吧,我只告诉你们说这边就可以用,就说可以用,就是一 s 六跟一 s c 的这样一个标准去做 note js 的一个开发。但是怎么去搭建我先不说吧,我们还是以就说基础为主,我们之后做一个逮捕的案例,嗯,反正我们这次的目标也是让你们多动手,对吧?到那个里奥,嗯,上课的时候 避免听不懂吗?所以说我们先来看一下,就说,嗯,这边我搭了一个环境,这个环境的话是 在给他们上面照了一个工程啊,他就是把 type 死库瑞普特,然后变异成了 es 五啊,就是这样一个东西。那么我这边就写了一个方法,就是 a 进口的一个泰斯斯,对吧?然后我这边也打印了一串这样的一个, 呃,哈喽,我的,对吧?我们把这个字改一下,避免哈,之后跟之前的那个字一样,我们不知道是我们老的还是新的。好,我们,嗯,输,哈喽,我的,我们之前的这个的话是输出什么?输,输出的是这样一个奥特曼,对吧? 好,我们这边写好之后我们就憋一下啊,这个就很简单,我们就憋一下,憋一 好,那么编辑成功了,编辑成功的话,他在这个奥特铺的下面就会帮我去把我的鸭子砌的这样的一个标准啊,就把他编辑成那个鸭子舞,哎,对吧?然后我们只要 啊把这张复制过来啊,当然这个可以,就是之后你别用完了直接就说,嗯,变成这个文件啊,这个我现在就是稍微嗯偷偷懒的,行,我们只 只是看一下效果嘛,对不对?我们再运行一下啊,这边就哈喽我的了,对吧?啊?而我们这边用的一个的话,就是方法的话就是用 e s 七的那个 a c, 可嘛,所以说这边就是完全可以去接种那个 a c 可跟你或或者说你用一些面相对象的也都可以啊,这个是完全是可以的,那么到此为止这个 也讲了很久了,反正嗯基础的一些那个环境怎么去配置啊?包括这样的一个软件,还有就是 啊,我们的其他的一些像 abm 的那个版本的能安装环环境我们都会,就说放到那个视频姐姐里面啊,如果, 嗯,我们这期先来讲一下这个环境怎么去搭建的,我们下期再来讲我们具体的那个单子怎么去使用。如果说你已经有了环境啊,如果你会环境的话,你就不用去看这些视频了,如果你不会的话,我觉得你稍微还是要 要去把这个东西给看一下,因为搭建楼的宅所的环境,你如果,嗯有问题的话,后面很多边境你都会有问题,一些环境的错误你就很尴尬了,对吧?这环境的错误你整起来不是 是半火了你可能你可能要搞几天你都搞不好,所以说环境我们还是很重要的,好吧,我们今天先到此为止。

好的,观众朋友们,那么继续来讲 no 的 g s 的第四章 n p m e sto 的原理。好,那首先第一点呢,本章所有知识呢,全部都是很重要的。 那第二点,你如果学会本章所有的知识,那你就可以迈向中级或者是高级程序的一个殿堂。那第三点,我将没有任何废话的去讲本章所有知识,因为非常非常重要。 好,那我们来看啊,在执行 n p m minstle 的时候,它到底发生了什么?好,那这个命令就不再多讲了啊,上一章已经讲过了,没看过的去上一章看一下。好,那执行完这个命令,比如说安装这个 v u e 这个模块儿,或者是别的模块儿, 它是不是会在我们的根部录下面存放一个 note modules? 注意,存放这个 note modules 的时候使用是扁平化的方式去安装。那扁平化什么意思?我们一会会详细的介, 并且呢,他还有一个排序的规则,注意看点,并就是点开头的,他是排在这个最前面的,然后接下来呢是这种 it 开头的,然后呢才是我们这个首字母排序,注意,他是这么一个规则,就是 abcdefg 这种首字母排序,对,他采用了这种规则。 好,我们直接说了,他是使用这个扁平化的方式去安装,那扁平化他是怎么去做的呢?注意啊,他是使用一个 广度优先的一个算法,不是深度优先啊,广度优先呢,就非常适合去下载这个依赖啊,在便利依赖数的时候呢, 他首先会处理我们这个根部下面所有的依赖,然后呢再去逐层的去处理每一个依赖包里边依赖,因为这个依赖呢,他还会有别的依赖,比如说 vue 里边呢,他可能依赖一些别的, 我们可以来看一下哦。 v u e 这个 peg 的 jason 啊,往下翻,对吧?你看它又依赖这四个包,这四个包呢,又有可能依赖别的,比如说这个 compire, s f c, 我们来找一下, 对吧? s f c, 你看它有可能又依赖别的,你看它又依赖这么多,所以说依赖的下面呢,还是有依赖,所以说它使用的是广度优先的算法去处理和下载我们这个依赖的。 好,那现在的话,你就应该了解了他这个扁平化的一个思路,以及他的一个算法,那么他真的是一个扁平化的吗?其实并不是啊,对,所以说我加了一个问号, 扁平化只是理想状态下。好,我们来看这张图啊,比如说这个 app 呢,就是我们这个项目,然后这个项目呢用到两个模块。好,这儿的话用 v u e 和 react 去举例啊, a 就是 v u e, b 就是 reaction, 然后 c 呢,可以把它看成一个 bable, 对吧?他们俩呢,都用到一个 babe 了,对吧?那版本和名字都是一样的,所以说他就直接会把这个 babe 呢提到这个相同等级的一个依赖了,也就是 贴到一级模块下面的。所以说 a 和 b 呢,就可以去复用这个 c 模块了,而不是去给 a 呢装一边这个 cb 呢,装一边这个 c, 这样的话就可以节省我们这个空间啊,那这个的话就是一个理想状态下的一个扁平化啊,对,他就把这个 c 模块呢,就扁平到我们这个一级模块下面呢,他们两个直接就复用了啊,那如果出现这种情况怎么办呢?我们继续来看啊,比如说 a a 是这个 v u e, b 是 react, 他们俩呢,依赖的 bib 的版本是不一样的,比如说 v u e 依赖是一的 二零,而 rec 呢,需要是二点零,那这时候他就不可能去做这个扁平化了,那扁平化的话,那会有问题啊,他就不知道我到底该用一点零还是用二点零,所以说出现这种情况的话,他就会单独的去安装,一来也就是 b 下面呢,还会去创建一个 note modules, 然后这个 note modules 呢,再去存放这个 c 模块儿。所以说不理想的状态下呢,他是还会有这种模块儿勇于的现象啊,对,这种现象还是有的,所以说面试的时候一定要把这个说清楚啊。 好,然后我们继续来看 m p m mistle 后续的一个流程啊。对,我们刚才讲的是这个 m p m mistle 如何去安装这个 note modules, 也就是最后一步啊,我们来看它的前几步啊,前面的步骤也是非常非常多的,一定要把我这张图去看一下,多理解一下。 好,我们点开来看一下啊。首先我们执行这个命令,执行完这个命令他去干什么呢?去检查这个 config。 这 config 怎么去检查?我上一章已经教过了啊,通过 n p m config list。 好,我们再来看一下啊。 哦,他就会去检查这个 config 里边的文件,注意这个文件呢是有先后顺序的,注意看啊,他呢先会去找什么项目级别的 n p m r c 的一个配置文件。哦,这的话我也给大家做了一个例子啊, 对,我在根部的下面新建了一个 n p m r c, 那这个就是项目级的,那这个 n p m r c 可以做什么呢?其实就跟我们扛费的配置是一样的,你看可以配置原配置代理,是吧? 配置 h t t p s 的代理,配置 h t t p s 的一个证书,对吧?其实就跟我们考费的配置是一样的,只不过他能有一个配置文件在这儿去编写。 对,然后这个例子呢,我已经给大家去放到这个博客上面了,大家可以去看一下。对,其实跟那个 coffee 就是一样的,所以说他先会去我们这个 当前项目下面去找一下有没有点 n p m r c, 如果找不到的话,他就会去哪找呢?注意看啊,他就会去用户级的 n p m r c 去看你有没有去配置过的。这个文件是默认的给你存放到这个用户盘下面的,我们来找一下啊,我的电脑 c 盘用户,那这就是我的账号啊,幺幺九五五,然后去下面找一找。哎,你就会发现这里边是不是有个点 n p m r c, 那这个的话 就是对应我们这个用户级的 n p m r c。 哦,然后我们再看啊,如果用户级的你没有什么更改,他就会去找什么全局级的,那全局级的就在这个 c 盘下面的 a p p data 下面的 n p m 下面点 n p m r c, 那这个是对应这个全局级的啊,如果你全局级的也没有做过任何什么修改,他就会去找 n p m 内置的 n p m r c。 啊,那这个的话就需要去找你这个 note gs 装到哪了?我回一下我的 note gs 应该是 f 盘里边,然后我找找啊, 找一下那个 g s, 然后这个,那么就是,然后 n p m, 然后你会发现这有个点儿 n p m n p m r c, 那这个就是 n p m 内置的一个 n p m r c, 所以说它是遵循这么一条路的啊,然后找完之后它就去 干什么呢?找完之后呢,他就去检查有没有拍个 look 点 jason 就是这个文件啊,对,这个文件。哦,那这个其实就像做任务一样啊。好,我们把每条线路都给大家去走一下,比如说有 这有的话怎么办呢?有的话注意啊,他要比较 packaged jison 和 packaged look, 但是 jason 版本一样不一样,比如说 packaged jason, 我有一个 v u e, 我是三,但是 packaged look 我是二, 那这样的话就怎么样?不一致,这不一致的话就走下面这个分支啊。注意,这是一道面试题啊,非常重要啊, 如果不一致的话,并且是 n p m 高版本,我们现在基本都是 n p m 高版本,它呢会根据 package jason 的版本号去下载,并且呢,下载完成之后去更新 lock 文件啊,注意,如果这两 两个版本号不一样,是优先于拍给这节省的,然后再去把 lock 文件去给他更新一下。哦,这个一定要记住啊。哦,如果一致的话会怎么样?如果一致的话,他就去检查有没有缓存过,也就是之前有没有安装过这个模块, 如果有的话,那就直接把这个模块给你截到那的 models 里边了,就不去。呃,在这个网上去给你下载了,就节省这个网络资源了,所以说直接给你拿过来了, 如果没有怎么办呢?没有的话,他要去 n p m 的这个官网上,在他的定向语言上面去下载这个资源包, 然后要检查它的完整性,然后呢去给你添加到这个缓存里边,然后呢去更新 lock 文件,然后最后才给你解压到这个 note models 里边。好,我们再来看啊,如果没有拍个这 lock 点儿接损会怎么办呢?首先他要获取这个包 的信息,然后去构建依赖数,注意构建依赖数跟扁平化呢,他俩是一块去进行操作的。然后呢再去检查有没有缓存好,那后面的步骤呢?其实就是一样的,所以说大家把这个图给他理解了就好了,其实也是非常简单。好, 那 n p m r c。 对,我已经贴到这了,大家去看一下就可以了。完了最后一个指示点就是拍个这 look 点。 jason, 那这个文件很多朋友呢,他只知道这个东西只是锁定一些版本号,就是记录我们这个依赖数的详细信息啊,对,我们其实可以看一下。 好,我们会发现啊,首先第一个这个 package 呢,就是我们这个 package 接头的描述信息,就是一个简化版的,其实跟它是一辆一样的。对,比如说我们装了 m d 五呢,还有这个 v u e。 好,那这一些呢?其实就是扁平的一些模块化,就是比如说这个应该是呃, 优异里边的一些依赖,用了这个 bable。 好,我们来解析一下它里边的每一个参数啊,那 watch 的话什么意思呢? watching 的话就是代表这个 bable pass 它的一个版本号,还有这个 resolve 的,那这个话就一个什么下载地址嘛, 还有这个 integrity, 那这个的话什么检查这个包完整性的一串哈锡纸啊,还有这个 dv 是什么? dv? 就是是否是开发依赖。 对,我们把这个什么对 v u e, 你看创造了 d v dependic, 所以说它为处啊,还有并是什么,并说明它有一个可执行文件,这个后面会详细讲的非常有用。 还有这个 n g, n g 说明什么?说明我们要使用这个模块弄的版本呢,必须要大于等于六点零的版本才可以。对,我们现在一般都会使用十六或者十八,所以说一般是很少有这些问题。 好,那这些的话可能都是大家所知道的,其实我讲的并不是这些啊,其实缓存呢,是由 package locker 接生帮我们去做的。他是怎么做的?注意知识点来了啊,认真听好,他是通过 integrity, 然后加上我省,加上他的内, 会去生成一个唯一的一个 key。 啊,好,那这个 key 它对应的是哪呢?你可以使用我们之前讲过的 npm config list, 好,去查一下它这个缓存文件是在哪。对,我的缓存文件是在 f 盘下面的这个 m p m catch, 对,是在这儿。 好,然后我们就去找一下。啊。对,你看这个 mini 我说了非常有用啊,就是 n p m f 端下 咱们,咱们先不 cat 好,就是下划线 cat 这个文件里边好,它所对应的就是这个缓存文件里边的 index 杠 v 五,也就是一个,所以目录。对,这个目录呢,其实就是记录的 contex vr 的一个所以的一个位置啊, 这个位置呢,就是对应的这个 integrity 加上 watching, 加上他的名字的一个哈西值,如果能对上对他们三个呢,会用一个算法,如果能对上的话,他就会去 contex v 二去找到你缓存的那个文件。比如说举个例子, 对,他就是一个哈锡纸的一个二进制包,然后如果能对上的话,他就会把这个二进制包呢去给你解压出来,其实就是一个 note models, 然后呢直接去给你放到这边的一个 note models, 它的缓存的原理呢?其实就是这样子。好,那以上的话就是本节课所有知识啊。

哈喽,各位观众朋友们大家好,今天我们来学习 note js 的第二十八张邮件服务,那邮件服务呢,在我们工作中呢是充当着一个非常重要的一个角色, 第一个任务的分配与跟踪,那领导呢,可能会去下发这个任务,那每条业务线呢,都要去跟踪这个任务的一个进展,并且汇报任务完成的一个情况。 那第二点的话,就是这个错误的报告与故障排除,比如说前端程序员或者是后端程序员,用户在使用的过程中呢,可能代码出现了报错,那么就可以记录一下用户的 id, 就知道是谁在操作了,以及做了什么操作以及故障的代码都可以上报给我们这个开发者,使用邮件给我们去发过来。 那第三点就是我们做这个 c i c d 自动化集成,在过程中成功还是失败了,都可以去超送给我们这个开发者,所以 邮件符呢还是非常重要的啊。那今天的话我们一共会用到两个库,第一个是 g s 杠 yamo, 代入的话就是通过这个 note 美了。好,那为什么要用 j s 杠 yamo 呢?就是我们这个邮件的账号密码或者授权码呢? 是不可能铭文的去写到代码里边,那一般呢都是存放到我们这个压木文件或者是环境变量里边,所以说我们要使用这个压木文件,必须要使用这个库去帮我们去解析这个文件,解析成一个 js 的一个对象,我们才可以使用。 好,那这个 note male 的话,就是帮我们去发送这个邮件的,那今天的话我们会使用 qq 邮箱去给大家做一个演示。 ok, 那这个压过文件呢?我已经提前写好了,它的格式呢,就是这样子的, pass, 就是 password, 你可以填写你的密码或者是授权码,记得前面加一个空格, 开这个 user, 就是我们这个邮箱账号。对,因为涉及这个安全问题,所以说我就不给大家看了,但是格式呢,就是这样子的一个格式。 ok, 我们来编写一下我们这个代码。首先我们需要先安装一下这两个库啊, 对,第一个 j s 杠 em 好,第二个是 note 的 好,安装完成之后呢,我们就去引入一下, ok, 我们已经引入完成了,然后呢,我们去给他把这个符给他开一下啊,点 correct server 好,然后点 list 鉴定一下三千,然后给他来点反应啊。 好,然后我们获取一下这个 pass name, 等于这个 u i o 点 pass 好,然后我们这个请求呢,肯定是一个 pose 的请求,所以说再结构一下, 对,因为 pose 的齐全更加安全一点。对,然后我们这个地 地址的话,我给他判断一下啊,这个等于是一个刚 seen 的刚,没有吧?好,他使用的是 pose 的请求,并且呢请求我们这个地址,然后我们继续给大家发送邮件。 对,大概逻辑就是这样子的,但是在前提的话,我们需要先初始换一下这个邮件服务啊,对,不可能凭空发送啊, 对,我们先把邮件服务先出实话一下,比如说我们叫 transport, 就等于这个 node miller 点 correct transport, 对,它里边参数是非常多的。比如说第一个 service, 对,就是我们这个服务商啊,是 qq 好,第二个是这个 author, 对,它有个 user 账号以及密码或者是授权码。对,这就是密码或者是授权码。 对,每个邮箱是不一样的,比如说 alt look, 可能它可能是填密码,而我们这个 qq 呢,它可能填的是授权码。对,这就是我们这个邮箱账号。啊。 对,这两个呢,我已经提前写到这个 melt 点压模文件里边的,我就不给大家看了,因为涉及这个安全问题。好,然后还有我们这个 horse 的主机就是 s m t p qq 点 com, 还有这个 port 端口 好,是不是要安全一点?还有我们这个是不是要使用这个 a t b s? 对,大概呢?就是这么多参数。哦, 那很多人会问呐,这个 host, 还有这个 pot, 这些是去哪看呢?其实有一个 qq 的一个开发文档,对,它这里边都说了,对,比如说我们要发送邮件,对,它的 host 就是这个, 然后端口号是四六五或者是五八七,我们来看一下,对,四六五是没有问题的。对,然后去跟着这个填就可以了。那这个文档在哪呢?文档的话大家可以去找到我这个博客,对,下面,然后点击这个链接就可以了。对,你就会看到这个开发文档。好, 然后他还需要一个授权码,对吧?授权码是怎么生成的呢?授权码的话你可以点击这个账号也安全点进去呢?就是这个页面。 对,然后你点这个安全设置,然后找到这个生权,生成授权码就可以了。点一下这个,对,他就给你生成一段授权授权码,然后你把它记下来就可以了。对,把它记下来, 然后你还可以看到点击设备管理以及授权码管理。对,我这里是随便写了一个 note g s, 然后它会看到你这个邮件服务的一个动作,对,会在这里有记录的。好,对,我已经生成过这个授权码了,我把它存到这个 yable 文件里边了。好,然后我们需要获取下这个 yable 文件。啊, 对,我们通过 f s 点 read file 去读一下这个文件,然后呢再教给 yame 的一个 low 的方法去把它解析,解析完成之后呢,它就是一个对象。好,然后复给它就可以了,点 user, 点 pass, ok, 那么这个邮件服务呢,就已经是创建好了。对,创建好之后呢,我们就可以给他去发送了。 对,发送邮件就是 sendmile, 对,它里边呢一共需要四个参数,就是 two 就发给谁,对,发给谁, 还有这个 pro, 对,就是谁发的。对,发件人,对,叫发件人,对,这个应该叫收件人。 还有这个 subject 标题,还有 text 内容。对,他呢,一共就这四个参数。对,他一共就这四个参数。然后我们这个发电人肯定是固定的,对,是由我们来发的,所以说这个可以定时。然后这三个呢,我们可以通过前端去传过来。对, 比如说想发给谁,我们可以把它传过来,然后这个的话我们还是通过这个点 user 去给它获取。对,发件人肯定是统一的。好,然后我们希望这些参数是钱能传过来。然后我们怎么去接收这个参数呢? 对,我们通过 i q 点 on 去接收一个 data, 然后它会返回一个 chunk, 对,返回一个流啊,把它拼接一下。 好,发送完成之后呢,还有一个摁的时间。 对,我们就可以在这个里边的去给他进行这个操作了,对,就这样就可以了 哦,发送完之后呢,哦,给他一个 r e s 点摁的,对,给个 o k 就可以了。对,发送完成,对,大概逻辑就是这样子的,对,没有这个 form 好,那么这个符呢?就已经写完了,然后给它启动一下, 呃,然后我们来定一下我们这个请求,首先是 post 请求,然后 hdp 冒号公告, local host 三千, 对,地址是刚 send 杠 mail, 我们来看一下刚 send 杠 mail, 然后使用的是 pose 请求,版本是 h d v 杠一点一, ok, 定一下请求图啊, content type 为 application 啊,然后定一下请求的内容,嗯,我想想啊,我们应该是 two, 就发给我,先发给我自己吧, 只有先发给我自己啊。然后是这个 subject 标题,然后 text 内容,内容就是我想你了,你还好吗? 好,我们来试一下,点击这个 send request, 好, ok, 然后我们来看能不能收到这个邮件啊, 也是响了,也是收到了,我们点开看一下, 对,两点四十一,两点四十一发过来,对,是没有问题的啊,那以上的话就是本章所有的知识,对。

接下来我要讲解的内容是红任务与微任务。在扎巴 scrap 当中呀,他又将 e 部 api 呢分为了两种类型,第一种类型呢,叫做红任务,第二种类型啊,叫做微任务。首先我们来看一下,在扎巴 scrap 当中,哪些 e 部 a p i 属于红任务, 像定时器 sad interval, set tamat, sat immediate, 还有一些 l 操作,它都属于红任务。也就是说,在我们刚刚讲解的事件循环的六个阶段当中,每一个阶段所对应的这个一波 api, 它实际上都属于红任务。 接下来我们看一下哪些义部 api 属于为任务,像 promise 等, promister, catch, promise 呢,他都属于为任务。当然还有 processor, next tick 啊,他也属于为任务。 关于红任务与微任务,他们之间有什么区别呢?首先我们来看第一点,微任务的回答案数呀,会被放置在微任务的事件对列当中, 而红任务的毁掉函数呢,会被放置在红任务的时间对列当中。这是第一点区别啊,就是微任务和红任务他们之间的这个毁掉函数放置的位置是不同的。接下来我们看第二点区别。第二点区别呢,就是微任务的优先级要高于红任务。 当微任务事件对列当中存在可以执行的回调函数的时候呀,这个事件循环呢,在执行完当前阶段的回调函数后,会暂停进入事件循环的下一个阶段。 事件循环呢,会立即进入微任务事件对列,开始执行回答函数。当微任务事件对列的毁掉函数执行完成之后呢,事件循环再进入到下一个阶段,开始执行回答函数,这是什么意思呢?我们来看上面这张图, 事件循环呢,他是从 tymerce 这个阶段开始执行的,比如说现在这个事件循环呢,依次执行执行到了 io 轮巡阶段,在执行 io 轮巡阶段的这个毁掉函数的过程当中呢,突然呀,这个微任务事件队列当 当中呢,有可以调用的毁掉函数了,那这个时候呢,事件循环呢,会先将 io 这个阶段的毁掉函数执行完成,这个时候他不会进入到 check 阶段,他会立即进入到微任务事件队列当中,开始执行微任务所对应的这个毁掉函数。 当微任务所对应的这个回答来说,执行完成之后呢,他再进入到事件循环的下一个阶段,也就是 iopo, 他的一个下一个阶段就是 check 阶段好,那么这就是微任务高于红任务这样的一个含义。那么关于微任务,他本身呢,也有一个优先级,那么我们来看一下 微任务当中的 next tik 啊,它的优先级呢,要高于普通的微任务,那么在执行任务的时候呢,只有 next tik 中的所有回答案数执行完成之后啊,才会执行微任务时间对列,什么意思呢?注意看啊,在这我们标出了一个 next tick 和一个微任务事件对列, 那么实际上他们啊都属于微任务,但是呢, next 可他的微任务优先级要高于普通的微任务好,那么这是微任务,他本身 也存在一个优先级的问题。接下来我们看一下红任务哈,那么这个红任务呢,他不存在优先级的概念,那么不同的红任务的回答函数呢?被放置在了不同的红任务事件队列当中,那么红任务与红任务之间没有优先级的概念,他们的执行顺序啊,是按照视线循环的阶段的顺序执行的。 好,这就是咱们当下所讲解的什么是红任务,什么是微任务?他们之间有什么区别?那最重要的区别呢,就是微任务的优先级高于红任务,而微任务本身呢,他的 next 可要高于其他的微任务。


为什么前端精通漏的这次人这么少?第一,对于大部分前端来说,学会弄的 gs 只是能力的扩展,并没有很多精力关注很细节的东西,往往满足需求就好了。第二,弄的 gs 通常用于一些简单的场景,比如工程工具 vip 四二五,然后接口聚合以及 sorrys 架构的应用等等。这些业务场景并不需要开发很多人员啊,具备多高的 note 的 gs 水平,也不需要精通,也能够实现需求,这个也是 note ds 的重要优势。