亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

jquery ready函數深入分析

2020-01-26 14:26:51
字體:
來源:轉載
供稿:網友

最近看一些關于jquery ready 有人說他緩慢,有人說他快,說法不一。 于是自己深入研究一下。首先看了一下jquery 文檔 關于ready 的描述

While JavaScript provides the load event for executing code when a page is rendered, this event does not get triggered until all assets such as images have been completely received. In most cases, the script can be run as soon as the DOM hierarchy has been fully constructed. The handler passed to .ready() is guaranteed to be executed after the DOM is ready, so this is usually the best place to attach all other event handlers and run other jQuery code. When using scripts that rely on the value of CSS style properties, it's important to reference external stylesheets or embed style elements before referencing the scripts.In cases where code relies on loaded assets (for example, if the dimensions of an image are required), the code should be placed in a handler for the load event instead.

翻譯一下

雖然JavaScript提供了load事件,當頁面渲染完成之后會執行這個函數,在所以元素加載完成之前,這個函數不會被調用,例如圖像。但是在大多數情況下,只要DOM結構加載完,腳本就可以盡快運行。傳遞給.ready()的事件句柄在DOM準備好后立即執行,因此通常情況下,最好把綁定事件句柄和其他jQuery代碼都到這里來。但是當腳本依賴于CSS樣式屬性時,一定要在腳本之前引入外部樣式或內嵌樣式的元素。  
 
如果代碼依賴于需加載完的元素(例如,想獲取一個圖片的尺寸大小),應該用.load()事件代替,并把代碼放到load事件句柄中。    

依照文檔上面的說明,在頁面內有大量文檔結構,圖片資源時候,ready 是快于 load 的。文檔里面也清晰的分析了什么時候用ready 什么時候用load。

下面分析一下jquery ready 的運行流程

$(handler) or $(document).ready(handler) →  ready() → bindReady() → 執行readyList.add( fn ) fn

 大致看一下源碼

 下面是jquery 的 對象的 ready 源碼

 jQuery.fn = jQuery.prototype = {        constructor: jQuery,        init: function( selector, context, rootjQuery ) {          // HANDLE: $(function)          // Shortcut for document ready          // 如果函數,則認為是DOM ready句柄          if ( jQuery.isFunction( selector ) ) {            return rootjQuery.ready( selector );          }        },              ready: function( fn ) {          // Attach the listeners          jQuery.bindReady(); // 綁定DOM ready監聽器,跨瀏覽器,兼容標準瀏覽器和IE瀏覽器                // Add the callback             readyList.add( fn );// 將ready句柄添加到ready異步句柄隊列                return this;        }      };  

 調用jquery 的 bindReady ,  增加ready回調!

  下面看一下 bindReady 大致源碼

bindReady: function() { // jQuery.bindReady          if ( readyList ) {            return;          }           readyList =jQuery.Callbacks( "once memory" )// 初始化ready異步事件句柄隊列           // Catch cases where $(document).ready() is called after the          // browser event has already occurred.          // 如果DOM已經完畢,立即調用jQuery.ready          if ( document.readyState === "complete" ) {            // Handle it asynchronously to allow scripts the opportunity to delay ready            // 重要的是異步            return setTimeout( jQuery.ready, 1 );          }        //下面是一些防御性的編程 故此省略    ......}

   這個應該很清楚  document.readyState == 'complete' 就會 執行 jquery 的 ready ,我很困惑的是為什么是 setTiemout(jQuery.ready,1) ,請返回上面看ready 的代碼, readyList.add( fn ), 如果不是異步的,執行回調的就會放到 readyList.add( fn )之前了,因為執行是在jQuery 的ready 里面 readyList.fireWith( document, [ jQuery ] );readylist 是jquery 的callbacks ,就是管理回調函數的!不清楚的可以看看文檔。

注:你會發現有兩個ready,這兩個是不同的,一個放到 jquery.prototype 就是我們$(doucument).ready這個,另一個是jquery的對象方法判斷是否已經ready了的方法

ps : jquery博大精深,文章有錯誤之處,還請各位指正!

 以上就是對 jquery ready的資料整理,后續繼續整理相關資料,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品免费久久久久久| 国产欧美在线看| 亚洲第一精品自拍| 国产mv免费观看入口亚洲| 精品国产乱码久久久久久虫虫漫画| 欧美—级高清免费播放| 亚洲精品视频久久| 国产一区二区三区三区在线观看| 国产91在线播放精品91| 久久久精品视频在线观看| 亚洲精品一区二区久| 神马国产精品影院av| 亚洲免费影视第一页| 国产伦精品免费视频| 成人黄色片网站| 美女精品久久久| 一区二区欧美日韩视频| 国产日韩欧美夫妻视频在线观看| 国产精品视频精品视频| 色狠狠av一区二区三区香蕉蜜桃| 欧美寡妇偷汉性猛交| 亚洲日韩欧美视频一区| 色偷偷偷亚洲综合网另类| 97在线视频免费看| 日韩av在线网页| 亚洲精品国产综合区久久久久久久| 日韩电影大全免费观看2023年上| 欧美精品videos另类日本| 欧美日韩成人在线视频| 亚洲人成电影网站| 亚洲精品中文字幕女同| 国产福利成人在线| 国产丝袜视频一区| 亚洲成av人片在线观看香蕉| 夜色77av精品影院| 中文字幕欧美国内| 欧美高清视频一区二区| 在线a欧美视频| 国产欧美一区二区三区久久| 国产亚洲一区二区精品| 中文字幕在线视频日韩| 性欧美视频videos6一9| 久久国产精品99国产精| 国产精品青青在线观看爽香蕉| 日韩hd视频在线观看| 亚洲欧美自拍一区| 亚洲最新av在线网站| 自拍偷拍亚洲区| 欧美在线视频一区二区| 国产精品自拍视频| 久久久免费在线观看| 欧美重口另类videos人妖| 欧美日韩中文字幕在线视频| 久久国产精品久久久久久| 亚洲第一精品久久忘忧草社区| 午夜精品理论片| 国产成人福利夜色影视| 国产精品久久久久久av下载红粉| 久久99精品国产99久久6尤物| 久久中文字幕一区| 91成人在线视频| 疯狂做受xxxx高潮欧美日本| 欧美日韩黄色大片| 国产成人精品视频在线| 成人在线一区二区| 亚洲国内高清视频| 国产成人精品久久二区二区91| 尤物九九久久国产精品的特点| 98精品国产自产在线观看| 亚洲a成v人在线观看| 欧美一级淫片aaaaaaa视频| 精品国产91久久久久久| 欧美日韩综合视频网址| www.久久草.com| 国模精品系列视频| 久久艹在线视频| 中文字幕精品一区久久久久| 麻豆国产精品va在线观看不卡| 亚洲第一免费网站| 久久久久久久久久久av| 欧美成人精品xxx| 中文字幕日本精品| 日本久久久久久久久久久| 在线国产精品视频| 91精品视频免费观看| 亚洲情综合五月天| 久久国产精品影视| 欧美日韩在线视频一区| 亚洲福利在线看| 国产在线视频不卡| 欧美大片在线看免费观看| 色婷婷综合成人av| 国产日韩亚洲欧美| 福利精品视频在线| 欧美成人午夜免费视在线看片| 国产精品白丝jk喷水视频一区| 欧美日韩xxxxx| 亚洲夜晚福利在线观看| 久久久国产视频| 久久69精品久久久久久久电影好| 国产日韩欧美另类| 欧美日韩亚洲91| 日韩av网站在线| 亚洲精品理论电影| 91在线国产电影| 日韩久久免费电影| 久久精品视频在线观看| 日本久久亚洲电影| 亚洲欧美日本另类| 夜夜嗨av一区二区三区四区| 91久久综合亚洲鲁鲁五月天| 91精品国产高清| 欧美第一黄网免费网站| 日韩精品久久久久久福利| 欧美激情在线观看| 久久久免费精品| 色狠狠av一区二区三区香蕉蜜桃| 成人黄色影片在线| 91久久久国产精品| 亚洲女同性videos| 日韩中文字幕网站| 亚洲精品成人久久电影| 欧美大片网站在线观看| 日韩av在线免费播放| 国产精品视频999| 国产成人在线精品| 精品视频在线观看日韩| 亚洲精品久久久久久久久久久| 国产亚洲精品美女久久久| 综合久久五月天| 亚洲精品在线观看www| 91精品国产自产在线老师啪| 国产成人精品综合久久久| 亚洲国产精品悠悠久久琪琪| 91极品视频在线| 国产丝袜一区视频在线观看| 久久精品视频免费播放| 91丝袜美腿美女视频网站| 欧美日韩午夜视频在线观看| 欧美极品少妇与黑人| 在线观看91久久久久久| 国产成人精品电影| 亚洲女同精品视频| 97精品国产97久久久久久春色| 色小说视频一区| 久久99久久99精品中文字幕| 欧美最猛性xxxxx免费| 中文字幕亚洲在线| 欧美激情中文网| 精品亚洲夜色av98在线观看| 亚洲已满18点击进入在线看片| 欧美性视频网站| 中文字幕日韩精品有码视频| 成人有码视频在线播放| 日韩精品高清视频| 久久精品99久久久久久久久| 精品成人国产在线观看男人呻吟| 91免费人成网站在线观看18| 国产精品国产三级国产aⅴ浪潮| 国产精品视频永久免费播放| 国产精品狼人色视频一区| 成人激情视频在线观看| 欧美日韩视频在线| 久久免费视频在线观看|