JS运行原理与机制(乾坤未定,你我皆是黑马4-5)

上一篇讲的是js小游戏
实践了面向对象编程----------易于理解
我们记得小鸟、天空、管子就能记得这个游戏是怎么写出来的

js原理与运行机制
浏览器的渲染进程

进程与线程
进程是cpu资源分配的最小单位
线程是cpu调度的最小的单位

在这里插入图片描述在这里插入图片描述在这里插入图片描述
线程是进程的一个小老弟,大哥有一片天下,一群小弟都可以通过大哥呼风唤雨。单线程就是只有一个小弟,太不装逼了。

浏览器有好几个进程,有好几片天下需要打理,我们做前端的生活在这个渲染进程
渲染进程咱们起个名字叫山大王,说山大王有一堆小弟,其中喊得上名字的有这几位:GUI渲染线程、Js引擎线程、事件循环线程、http异步线程、定时器线程,他们并称峡谷5瓜。
先来说上单GUI,这个b会画画,你写的页面不好看那都不能赖代码,都是这个b绘制页面的时候接电话去了。

首先浏览器会解析html代码(实际上html代码本质是字符串)转化为浏览器认识的节点,
生成DOM树,也就是DOM Tree
然后解析css,生成CSSOM(CSS规则树)
把DOM Tree 和CSSOM结合,生成Rendering Tree(渲染树)

啥意思呐?就是说,把html、css的代码拿过来,全是字符串啊,这玩意直接扔到页面上估计身为教练的你当场引咎辞职。
这个时候上单站了出来,他说,我认识字,而且会画画,它把html先变成dom树,把css变成规则树,然后放到一起练成渲染树。最后调用paint方法,开始画画…
如果我们使用js修改样式或者dom就会…重绘、重排,上单就得重新工作一遍。

在这里插入图片描述

上单不爱看小地图,所以不知道打野都在干嘛,所以打野gunk之前会发个信号,让上单别着急上,等自己大招先手。毕竟这个队伍是野核,所以都是在给打野打工。

中单-----事件循环线程

事件循环线程用来管理控制事件循环,并且管理着一个事件队列(task queue),
当js执行碰到事件绑定和一些异步操作时,会把对应的事件添加到对应的线程中
(比如定时器操作,便把定时器事件添加到定时器线程),等异步事件有了结果,
便把他们的回调操作添加到事件队列,等待js引擎线程空闲时来处理。

中单这家伙是个绝世美女。
打野说让adc先打着红buff一会儿自己过去收,
于是中单通知adc,滚去打红buff,留一丝血,一会打野爸爸来收。
如果打野直接跟adc说,那么adc当成甩脸子,打野立刻尬住。
但是中单不一样,肌白肤美大长腿。

辅助-----定时器线程

由于js是单线程运行,所以不能抽出时间来计时,
只能另开辟一个线程来处理定时器任务,等计时完成,
把定时器要执行的操作添加到事件任务队列尾,
等待js引擎线程来处理。这个线程就是定时器线程。

打野买不起手表,
于是让辅助天天数手指头,
时间一到,辅助就给大野写个任务条,
打野每次忙完手头的事,就会按顺序看这些任务条,

adc------异步请求线程

当执行到一个http异步请求时,便把异步请求事件添加到异步请求线程,
等收到响应(准确来说应该是http状态变化),
把回调函数添加到事件队列,等待js引擎线程来执行。

打野不一定每次都打红buff,有时候也打远古生物!
其实打野不一定打不过…
没事,交给adc,性感打野泉水指挥!
让adc去开脚本(跟后端交互),使用全图视野,
拿到信息之后,写个条上报给打野,
打野路过收走adc费时费力的工作成果

在这里插入图片描述

左边就是队霸,打野同学,他说adc,你去打红,所以中单大美女就去找adc,
adc打完之后,给打野也个条,“红buff还有一丝血,快来”,
于是打野忙完手头的事,就来“拿”红了

定时器
当下的辅助有两类:硬辅setTimeout()和软辅setInterval() 软辅恶心,来来回回的,但是人们不喜欢软辅是有原因的!

在这里插入图片描述

软辅会天天会粘着打野,搞得打野很烦,当打野忙不过来的时候,就会不屌他!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值