js worker 个人使用教程

worker来源

总说周知,js是一门单线程的语言,简单的来说,可以吧线程想象浏览器背后的小人,这个小人可不得了,专门干的活就是运行js代码,如果条件允许,它可以整天整夜24小时不停的转,比那些什么996,007厉害多了。这小人干的活就是对一段段代码进行解释,流程大概是从上到下,从左到右,根据每一行的代码去执行对应的操作。但是也说了,线程相当于小人,js单线程,可以推出浏览器后面只有一个小人干活(哇,多么严谨的推断)。

有人有疑问??

那小人这么牛逼,为什么浏览器就只雇佣了一个小人呀,搞个几十个不是厉害死了?

这。。。

好像很有道理,但是为什么浏览器只有一个小人呢,这其实和js被创建之初的用途来决定。想当初,全世界的网页都还是这么的单纯,除了html就是css,哪里有这么多的花里胡哨,但是总有那么些天才就在想,我这静态页面也不好看呀,一点惊喜也没有。我想要多一点效果,比如这一行字变成红色,那个框要隐藏起来,这个按钮我要点击前扭一下屁股,我要网站背景上动态显示自己的24小时不间断的帅照。这,这。。如果当初想要做到这些,还不如打产品经理一顿来的实际。

后来呀,出现一位DL,花了十几天时间捣鼓出一个东西,这个东西做出来就是为了一件事,UI交互-----接受用户输入,操作DOM,这决定了它只能是单线程的,否则可以想象如果多线程的话,就是很多小人,每个小人都嚷嚷着对于一个DOM的内容进行修改,那你说听谁的,这就会造成混乱。所以单线程它不香吗?每个程序员在给变量起名的时候可能见识过起名是多么困难的意见事情,所以DL对捣鼓出来的东西起名的时候想了半天想不出个所以然,想象java这时候还挺火的,要不叫JavaScript,可以蹭蹭热度? java和JavaScript的区别差不多是 周杰和周杰伦的区别(这一段我胡扯的

又有人有疑问??

就一个小人,就一个小人在干活,我又要操作DOM,又要发起请求,又要处理字符串,那会不会活赶不过来导致页面卡顿??

如果说单线程是js的特点,那么另外一个特点一定是异步了。在小人执行的代码中,大概可以分为两种,同步代码和异步代码(讲了句废话)。如果要解释的话有几个点需要说明一下,

第一点、对于小人来说,执行同步代码是很快,超级快,特别是V8引擎(小人中的超人))出来后,那速度和超人差不多。

第二点、 小人不是在执行代码,就是在等待执行代码的路上

第三点、 同步异步代码其实都是指代码(废话石锤)

     其实异步解决最大问题并不是代码执行时间太长的的问题,而是IO,IO是个啥,IO其实包含且不止文件读取,网络请求。。。等等,比如一个网络请求,我们最熟悉的ajax请求,代码的话只有一句,$.ajax(url) 就完事了,代码执行完了,但是从代码运行完-浏览器发起请求-服务器接收请求-服务器返回响应,这些流程都是需要时间,而且相对于代码执行时间来说长的多了,而我们发起请求,那肯定是为了获取数据并对数据做一定的处理,小人在处理这一句“$.ajax(url) ”的时候,我们是想要拿到服务器返回的数据的,所以现在小人有两个选择:1、等,等服务器给我数据,我再继续干别的活,2、我先给这句代码做个标记,等服务器返回数据了,我再接着干,现在先去干别的事。这其实是对异步最朴素的理解吧。

所以小人 干活的时间 = 执行代码的时间+IO等待时间  ,所以有了v8(超人)解决了代码执行速度的问题,而异步又解决了IO等待的时间(这其实是转化为了代码执行时间),而且小人干活并不是24小时连续不间断的执行代码(很重要),除非你在24小数不间断的刷新DOM,不间断的进行用户输入。所以相对于前端UI分分钟来个2、3秒的loading来说,V8(超人)执行代码的速度 一般  可以到毫秒级,可以忽略不计。

讲了大半天,这时候有人就问,上面都说了超人很厉害,那还要worker干嘛,这时候又要了解另一个概念了:就是在V8(超人)在执行代码的时候,页面UI是阻塞的,阻塞就是外在表现为页面卡主了,动不了,鼠标不响应,这是正常的的。因为只有一个小人,而一个人在一个时刻只能干一件事。所以当小人一直在执行代码时候,页面就会一直卡顿,“你不是说很快嘛?”有人问到,其实快也是相对而言的。因为如果js做一些计算密集型的运算时候,还是会捉襟见肘。

所以这个时候这时候worker就出现了。。。。

worker就字面意思来说“工作者”,或者叫 "打工人'。那真是一个惨字了得。太晚了,改天在写关于worker的内容。。。。

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值