<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        理解JS事件循環_javascript技巧

        來源:懂視網 責編:小采 時間:2020-11-27 21:48:26
        文檔

        理解JS事件循環_javascript技巧

        理解JS事件循環_javascript技巧:伴隨著JavaScript這種web瀏覽器腳本語言的普及,對它的事件驅動交互模型,以及它與Ruby、Python和Java中常見的請求-響應模型的區別有一個基本了解,對您是有益的。在這篇文章中,我將解釋一些JavaScript并發模型的核心概念,包括其事件循環和消息隊列,希望能
        推薦度:
        導讀理解JS事件循環_javascript技巧:伴隨著JavaScript這種web瀏覽器腳本語言的普及,對它的事件驅動交互模型,以及它與Ruby、Python和Java中常見的請求-響應模型的區別有一個基本了解,對您是有益的。在這篇文章中,我將解釋一些JavaScript并發模型的核心概念,包括其事件循環和消息隊列,希望能
        伴隨著JavaScript這種web瀏覽器腳本語言的普及,對它的事件驅動交互模型,以及它與Ruby、Python和Java中常見的請求-響應模型的區別有一個基本了解,對您是有益的。在這篇文章中,我將解釋一些JavaScript并發模型的核心概念,包括其事件循環和消息隊列,希望能夠提升你對一種語言的理解,這種語言你可能已經在使用但也許并不完全理解。

        這篇文章是寫給誰的?

        這篇文章是針對在客戶端或服務器端使用或計劃使用JavaScript的web開發人員的。如果你已經精通事件循環,那么這篇文章的大部分對你來說會很熟悉。對于那些還不是很精通的人,我希望能給你提供一個基本的了解,這樣可以更好地幫助你閱讀和編寫日常代碼。

        非阻塞I / O

        在JavaScript中,幾乎所有的I/O都是非阻塞的。這包括HTTP請求,數據庫操作和磁盤讀寫,單線程執行要求在運行期執行一個操作時,提供一個回調函數,然后繼續做其它的事情。當操作已經完成時,消息和已提供的回調函數一起插入到隊列。在將來的某個時候,消息從隊列移除,回調函數觸發。

        雖然這種交互模型可能對已經習慣使用用戶界面的開發人員很熟悉,比如“mousedown,”和“click”事件在某一時刻被觸發。這與通常在服務器端應用程序進行的同步式請求-響應模型是不同的。

        讓我們來比較一下兩小塊代碼,發出HTTP請求到www.google.com和輸出響應到控制臺。首先看看Ruby,配合使用Faraday(一個Ruby 的HTTP 客戶端開發庫):

        執行路徑很容易跟蹤:

        1、執行get方法,執行的線程等待,直到收到響應
        2、從谷歌收到響應并返回給調用者,它存儲在一個變量中
        3、變量的值(在本例中,就是我們的響應)輸出到控制臺
        4、值“Done!“輸出到控制臺
        讓我們使用Node.js和Request庫在JavaScript做同樣的事情:

        表面上看略有不同,實際行為截然不同:

        1、執行請求函數,傳遞一個匿名函數作為回調,當響應在將來某個時候可用時執行回調。
        2、“Done!“立即輸出到控制臺
        3、在將來的某個時候,響應返回和回調執行時,輸出它的內容到控制臺
        事件循環

        將調用者和響應解耦,使得JavaScript在運行期等待異步操作完成和回調觸發時可以做其他事情。但是這些回調在內存中是如何組織的,按什么順序執行?什么導致他們被調用?

        JavaScript運行時包含一個消息隊列,它存儲了需要處理的消息的列表和相關的回調函數。這些消息是以隊列的形式來響應回調函數所涉及的外部事件(如鼠標單擊或收到HTTP請求的響應)的。例如,如果用戶單擊一個按鈕,但沒有提供回調函數,那么也沒有消息會被加入隊列。

        在一次循環,隊列提取下一條消息(每次提取稱為一次“tick”),當事件發生,該消息的回調執行。

        回調函數的調用在調用棧作為初始化frame(片段),由于JavaScript是單線程的,未來的消息提取和處理因為等待棧的所有調用返回而被停止。后續(同步)函數調用會添加新的調用frame到棧(例如,函數init調用函數changeColor)。

        在這個例子中,當用戶單擊“foo”元素時,一條消息(及其回調函數changeColor)會被插入到隊列,并觸發“onclick“事件。當消息離開隊列時,其回調函數changeColor被調用。當changeColor返回(或者是拋出一個錯誤),事件循環仍在繼續。只要函數changeColor存在,并指定為“foo”元素的onclick方法的回調,那么在該元素上單擊會導致更多的消息(和相關的回調changeColor)插入隊列。

        隊列附加消息

        如果一個函數在代碼中按異步調用(比如setTimeout),提供的回調將最終作為一個不同的消息隊列的一部分被執行,它將發生在事件循環的某個未來的動作上。例如:

        由于setTimeout的非阻塞特性,它的回調將在至少0毫秒后觸發,而不是作為消息的一部分被處理。在這個示例中,setTimeout被調用, 傳入了一個回調函數g且延時0毫秒后執行。當我們指定時間到達(當前情況是,幾乎立即執行),一個單獨的消息將被加入隊列(g作為回調函數)。控制臺打印的結果會是像這樣:“foo”,“baz”,“blix”,然后是事件循環的下一個動作:“bar”。如果在同一個調用片段中,兩個調用都設置為setTimeout -傳遞給第二個參數的值也相同-則它們的回調將按照調用順序插入隊列。

        Web Workers

        使用Web Workers允許您能夠將一項費時的操作在一個單獨的線程中執行,從而可以釋放主線程去做別的事情。worker(工作線程)包括一個獨立的消息隊列,事件循 環,內存空間獨立于實例化它的原始線程。worker和主線程之間的通信通過消息傳遞,看起來很像我們往常常見的傳統事件代碼示例。

        首先,我們的worker:

        然后,主要的代碼塊在我們的HTML中以script-標簽存在:

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        理解JS事件循環_javascript技巧

        理解JS事件循環_javascript技巧:伴隨著JavaScript這種web瀏覽器腳本語言的普及,對它的事件驅動交互模型,以及它與Ruby、Python和Java中常見的請求-響應模型的區別有一個基本了解,對您是有益的。在這篇文章中,我將解釋一些JavaScript并發模型的核心概念,包括其事件循環和消息隊列,希望能
        推薦度:
        標簽: 事件 js 了解
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲av无码专区在线播放| 精品视频免费在线| 精品四虎免费观看国产高清午夜| 免费一级做a爰片性色毛片| 亚洲AV无码专区在线电影成人| 人成免费在线视频| 日韩免费一区二区三区在线播放| 在线观看永久免费视频网站| 亚洲精品久久无码| 国产一级一片免费播放i| 日本特黄特色AAA大片免费| 在线观看午夜亚洲一区| 亚洲中文字幕精品久久| 国产精品免费大片| 天天拍拍天天爽免费视频| 日本亚洲成高清一区二区三区| 亚洲一本到无码av中文字幕| 午夜dj在线观看免费视频| 久久精品国产亚洲av麻| 足恋玩丝袜脚视频免费网站| 亚洲免费网站在线观看| 女人18一级毛片免费观看| 国产精品亚洲一区二区三区久久 | 99热在线精品免费播放6| 亚洲性一级理论片在线观看| 拍拍拍又黄又爽无挡视频免费| 亚洲av日韩av天堂影片精品| 四虎免费影院ww4164h| 久久精品国产亚洲av日韩| fc2免费人成在线| 亚洲AV无码之日韩精品| 91免费国产视频| 亚洲午夜久久久精品电影院| 国产成人综合久久精品免费| a毛片视频免费观看影院| 亚洲国产夜色在线观看| www.亚洲精品| 色噜噜的亚洲男人的天堂| 国产成人精品日本亚洲网站| 免费精品人在线二线三线区别| 黄床大片30分钟免费看|