>  기사  >  웹 프론트엔드  >  jquery의 function Ready 활용 분석

jquery의 function Ready 활용 분석

巴扎黑
巴扎黑원래의
2017-06-25 10:17:441466검색

최근 jquery가 준비되어 있다는 댓글을 봤는데 어떤 사람은 느리다고 하는 사람도 있고, 어떤 사람은 빠르다고 하는 사람도 있습니다. 그래서 제가 직접 좀 더 깊이 있는 조사를 해봤습니다. 먼저 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를 사용해야 하는지 명확하게 분석합니다.

Jquery Ready의 실행 프로세스를 분석해 보겠습니다


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

소스 코드를 간략히 살펴보겠습니다

다음은 jquery의 object


 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;   
            }   
        };

j의 준비된 소스 코드입니다. 쿼리의 바인드 준비 , 준비된 콜백 추가 !

바인드Ready의 대략적인 소스 코드를 살펴보겠습니다.


    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의 준비를 실행합니다. 그렇기 때문에 setTiemout(jQuery.ready,1)은 위의 준비된 코드인 ReadyList.add(fn)로 돌아가야 합니다. 비동기식이 아닌 경우 콜백 실행은 ReadyList.add(fn)보다 먼저 이루어집니다. 실행은 jQuery의 ReadyReadyList.fireWith( document, [ jQuery ] )에 있습니다.readylist는 콜백 함수를 관리하는 jquery의 콜백입니다! 확실하지 않은 경우 설명서를 읽어보세요.

참고: 두 가지 준비가 있다는 것을 알 수 있습니다. 이 두 가지는 서로 다릅니다. 하나는 $(document).ready인 jquery.prototype에 배치되고, 다른 하나는 준비 여부를 결정하는 jquery의 개체 메서드입니다

ps: jquery는 심오하고 심오합니다. 기사에 오류가 있으면 정정해 주세요!

위 내용은 jquery의 function Ready 활용 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.