js worker 个人使用教程
worker來源
總說周知,js是一門單線程的語言,簡單的來說,可以吧線程想象瀏覽器背后的小人,這個(gè)小人可不得了,專門干的活就是運(yùn)行js代碼,如果條件允許,它可以整天整夜24小時(shí)不停的轉(zhuǎn),比那些什么996,007厲害多了。這小人干的活就是對一段段代碼進(jìn)行解釋,流程大概是從上到下,從左到右,根據(jù)每一行的代碼去執(zhí)行對應(yīng)的操作。但是也說了,線程相當(dāng)于小人,js單線程,可以推出瀏覽器后面只有一個(gè)小人干活(哇,多么嚴(yán)謹(jǐn)?shù)耐茢?#xff09;。
有人有疑問??
那小人這么牛逼,為什么瀏覽器就只雇傭了一個(gè)小人呀,搞個(gè)幾十個(gè)不是厲害死了?
這。。。
好像很有道理,但是為什么瀏覽器只有一個(gè)小人呢,這其實(shí)和js被創(chuàng)建之初的用途來決定。想當(dāng)初,全世界的網(wǎng)頁都還是這么的單純,除了html就是css,哪里有這么多的花里胡哨,但是總有那么些天才就在想,我這靜態(tài)頁面也不好看呀,一點(diǎn)驚喜也沒有。我想要多一點(diǎn)效果,比如這一行字變成紅色,那個(gè)框要隱藏起來,這個(gè)按鈕我要點(diǎn)擊前扭一下屁股,我要網(wǎng)站背景上動(dòng)態(tài)顯示自己的24小時(shí)不間斷的帥照。這,這。。如果當(dāng)初想要做到這些,還不如打產(chǎn)品經(jīng)理一頓來的實(shí)際。
后來呀,出現(xiàn)一位DL,花了十幾天時(shí)間搗鼓出一個(gè)東西,這個(gè)東西做出來就是為了一件事,UI交互-----接受用戶輸入,操作DOM,這決定了它只能是單線程的,否則可以想象如果多線程的話,就是很多小人,每個(gè)小人都嚷嚷著對于一個(gè)DOM的內(nèi)容進(jìn)行修改,那你說聽誰的,這就會(huì)造成混亂。所以單線程它不香嗎?每個(gè)程序員在給變量起名的時(shí)候可能見識過起名是多么困難的意見事情,所以DL對搗鼓出來的東西起名的時(shí)候想了半天想不出個(gè)所以然,想象java這時(shí)候還挺火的,要不叫JavaScript,可以蹭蹭熱度? java和JavaScript的區(qū)別差不多是 周杰和周杰倫的區(qū)別(這一段我胡扯的)
又有人有疑問??
就一個(gè)小人,就一個(gè)小人在干活,我又要操作DOM,又要發(fā)起請求,又要處理字符串,那會(huì)不會(huì)活趕不過來導(dǎo)致頁面卡頓??
如果說單線程是js的特點(diǎn),那么另外一個(gè)特點(diǎn)一定是異步了。在小人執(zhí)行的代碼中,大概可以分為兩種,同步代碼和異步代碼(講了句廢話)。如果要解釋的話有幾個(gè)點(diǎn)需要說明一下,
第一點(diǎn)、對于小人來說,執(zhí)行同步代碼是很快,超級快,特別是V8引擎(小人中的超人))出來后,那速度和超人差不多。
第二點(diǎn)、 小人不是在執(zhí)行代碼,就是在等待執(zhí)行代碼的路上
第三點(diǎn)、 同步異步代碼其實(shí)都是指代碼(廢話石錘)
? ? ?其實(shí)異步解決最大問題并不是代碼執(zhí)行時(shí)間太長的的問題,而是IO,IO是個(gè)啥,IO其實(shí)包含且不止文件讀取,網(wǎng)絡(luò)請求。。。等等,比如一個(gè)網(wǎng)絡(luò)請求,我們最熟悉的ajax請求,代碼的話只有一句,$.ajax(url)?就完事了,代碼執(zhí)行完了,但是從代碼運(yùn)行完-瀏覽器發(fā)起請求-服務(wù)器接收請求-服務(wù)器返回響應(yīng),這些流程都是需要時(shí)間,而且相對于代碼執(zhí)行時(shí)間來說長的多了,而我們發(fā)起請求,那肯定是為了獲取數(shù)據(jù)并對數(shù)據(jù)做一定的處理,小人在處理這一句“$.ajax(url)?”的時(shí)候,我們是想要拿到服務(wù)器返回的數(shù)據(jù)的,所以現(xiàn)在小人有兩個(gè)選擇:1、等,等服務(wù)器給我數(shù)據(jù),我再繼續(xù)干別的活,2、我先給這句代碼做個(gè)標(biāo)記,等服務(wù)器返回?cái)?shù)據(jù)了,我再接著干,現(xiàn)在先去干別的事。這其實(shí)是對異步最樸素的理解吧。
所以小人 干活的時(shí)間 = 執(zhí)行代碼的時(shí)間+IO等待時(shí)間??,所以有了v8(超人)解決了代碼執(zhí)行速度的問題,而異步又解決了IO等待的時(shí)間(這其實(shí)是轉(zhuǎn)化為了代碼執(zhí)行時(shí)間),而且小人干活并不是24小時(shí)連續(xù)不間斷的執(zhí)行代碼(很重要),除非你在24小數(shù)不間斷的刷新DOM,不間斷的進(jìn)行用戶輸入。所以相對于前端UI分分鐘來個(gè)2、3秒的loading來說,V8(超人)執(zhí)行代碼的速度?一般??可以到毫秒級,可以忽略不計(jì)。
講了大半天,這時(shí)候有人就問,上面都說了超人很厲害,那還要worker干嘛,這時(shí)候又要了解另一個(gè)概念了:就是在V8(超人)在執(zhí)行代碼的時(shí)候,頁面UI是阻塞的,阻塞就是外在表現(xiàn)為頁面卡主了,動(dòng)不了,鼠標(biāo)不響應(yīng),這是正常的的。因?yàn)橹挥幸粋€(gè)小人,而一個(gè)人在一個(gè)時(shí)刻只能干一件事。所以當(dāng)小人一直在執(zhí)行代碼時(shí)候,頁面就會(huì)一直卡頓,“你不是說很快嘛?”有人問到,其實(shí)快也是相對而言的。因?yàn)槿绻鹙s做一些計(jì)算密集型的運(yùn)算時(shí)候,還是會(huì)捉襟見肘。
所以這個(gè)時(shí)候這時(shí)候worker就出現(xiàn)了。。。。
worker就字面意思來說“工作者”,或者叫 "打工人'。那真是一個(gè)慘字了得。太晚了,改天在寫關(guān)于worker的內(nèi)容。。。。
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的js worker 个人使用教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微型计算机中i3或i5一般指的是,酷睿i
- 下一篇: Excel 使用ODBC直接访问