奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

百科大全

javascript運行環境和機制的介紹

時間:2021-06-10 12:03:04 百科大全 我要投稿

javascript運行環境和機制的介紹

  搞了那么久的前端,從開始用jquery快速寫一些效果,還有一些類似于kissy的框架等等,這些東西,通過模塊的規范,加載的機制,還有api的封裝,可以快速的實現一些效果,開發一些應用,以及后面流行下來的是聲明是渲染,函數式編程。

  可是,底層的JavaScript的運行機制,沒有怎么了解過,我們來看看。 JavaScript的運行機制里面,非阻塞,單線程的機制,是不是。。

  下圖所示(也許這個圖可以重新花一遍):

  stack 棧

  棧,push push push 然后pop pop pop 好了,一個先進后出的數據模型,在js里面,有這么一個stack,我們用一個函數call它出來看看。

 

  這個函數的意思是,callstack函數,內部return 然后調用他本身,運行下來,應該是,一直調用,往下走,好了,很明顯,計算機不是無窮的,給stack最大長度設了限制,然后,觸達了最大的調用限制,v8 print到window上面來了。過程大概是這樣的,如下圖:

  再比如,JavaScript的鏈式作用于,作用于或者函數之間的調用,如下所示:

  這樣的話,看起來,過程是這樣的,進棧的順序是 c b a ,然后,從a開始return。

  非阻塞(no-blocking)方案

  接著上面的棧來講,v8會把運行時里面的函數推到棧里面去,然后一個個的去執行。 首先,計算機系統里面,你拿資源是耗時間的,但是,你去拿raw,很快,幾乎不用等,你去拿硬盤數據,可能稍微慢一點,但是也還可以,你去拿網絡數據,發起請求,就很慢了,所以,如果函數中有長時間的等待過程,如果是blocking的,而js是單線程的,所以,你只能一次做一件事情。

  不知大家是否有影響,一些寫的非常不好代碼,頁面里面聲明了一些按鈕,一些操作,然后,因為js還在運行,導致了你的操作滯后了,瀏覽器記住了你的`操作,然后,后面一個一個的執行了出來。

  還有就是電腦非常落后的時候,cpu很慢的時候,也要類似的現象。所以,這個時候,瀏覽器其實是在做什么呢? 瀏覽器其實是一次可以完成非常多的工作,只是隱藏了一些你所不知道的細節在里面。

  下面我們來介紹這個單線程,但是一次性可以做非常多工作的模型。

  js的運行棧里面,我們一個工程上,往棧里面壓函數,然后執行,返回,下一個,這樣的節奏。而這個時候,如果是一個異步的網絡請求,會發生什么呢?

  執行棧里面,其實很快就可以繼續下一個函數的操作,為什么?為什么非阻塞,因為有另外的模型,在處理等待,也即是callback咯。callback底層有是怎么做的呢?

  所以,首先,要認識到,瀏覽器的webapi其實是一個獨立出來的api環境,包括捕捉用戶的鼠標點擊,雙擊,滑動,選擇,等等操作。我們不知道瀏覽器內部的線程情況,比如,ui線程負責顯示,什么線程負責repaint這些,什么線程負責解析樹,什么線程負責,不清楚,但是,我們可以推斷的是,webapi是另外的線程在控制,所以,不占用V8的線程。其他的部件也是不占用v8線程的,具體怎么排布可能要去研究瀏覽器內部的實現,而且每個瀏覽器也不一樣。大體上,模型是一致的。

  所以,在這樣的前提下,我們把模型畫出來,如下圖所示:

  webapi管著定時器,管著xhr異步,管著跟用戶的操作,但是,這些都有一個特征,就是callback,callback可以索引到一塊定義好的函數區域,然后,webapi在自身準備好的時候,(這個準備好ready的過程不描述,可能是用戶滾動,移動端上,用戶的操作,或者各種內置的接口)推出callback,把callback交給任務隊列,而事件循環做的事情,就是把任務隊列里面的時間放到執行棧里面去執行。

  好,我們腦補一個xhr的過程,把某個執行的上下文壓入stack里面,然后執行到xhr調用,這個時候,xhr調用執行完退出執行stack,webapi里面預制起了xhr的callback,這個callback是定義好的。然后,執行棧繼續做下面的操作。不同線程不相干。 然后,xhr在自己的process完成之后,把數據結構拿回到callback,然后,callback的索引放到任務隊列里面,這個時候,有兩個while(true)一直跑著,一個是事件循環,一個是執行棧。任務隊列是先進先出,事件循環拿出去,然后放到執行棧里面執行,over。

  好,我們再腦補一個click過程,某個執行上下文壓人stack里面,click的bind,這個時候,bind推出棧,然后,webapi里面聲明了綁定事件,以及callback,然后,等用戶click的時候,callback開始往任務隊列里面壓callback,然后,時間循環又來了,執行callback。


  【本文來源于(微信公眾號:豬豬俠雜談)】

  本文為原創文章,版權歸作者所有,未經授權不得轉載!

【javascript運行環境和機制的介紹】相關文章:

PHP底層的運行機制與原理08-12

CSS和JavaScript腳本實例11-09

職業與環境管理體系的建立和運行08-24

1.5操作系統的運行環境簡單介紹說明11-18

JavaScript中的邏輯判斷符--與!介紹11-18

如何設置java的運行環境10-05

Java程序開發與運行環境11-10

Java程序開發與運行環境11-09

JavaScript的應用11-11

主站蜘蛛池模板: 岳普湖县| 祥云县| 格尔木市| 长阳| 聂荣县| 新沂市| 宜州市| 南和县| 临泉县| 那坡县| 富宁县| 大荔县| 靖边县| 大城县| 白山市| 江山市| 凤城市| 呼和浩特市| 汝州市| 蕉岭县| 治县。| 庆安县| 阿巴嘎旗| 余庆县| 岳阳县| 兰考县| 肃宁县| 洞口县| 鄂尔多斯市| 丽水市| 青河县| 汝城县| 土默特右旗| 哈尔滨市| 青龙| 深圳市| 准格尔旗| 喀什市| 安阳县| 威信县| 肥西县|