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的內容。。。。
?
?
?
?
總結
以上是生活随笔為你收集整理的js worker 个人使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微型计算机中i3或i5一般指的是,酷睿i
- 下一篇: Excel 使用ODBC直接访问