window.onload เทียบกับ $ (เอกสาร). ready ()


1244

ความแตกต่างระหว่างวิธีการwindow.onloadของJavaScript และ jQuery คือ$(document).ready()อะไร?


2
อาจเป็นไปได้ซ้ำของ$ (เอกสาร) เทียบเท่าโดยไม่มี jQuery
Kzqai

คำตอบส่วนใหญ่ที่นี่ล้าสมัย วิธีการที่ jQuery นำมาใช้ในปัจจุบัน$().ready()ทำให้เกิดไฟหลังจากนั้นwindow.onloadในบางครั้ง
Shikkediel

คำตอบ:


1243

readyเหตุการณ์เกิดขึ้นหลังจากที่เอกสาร HTML ได้รับการโหลดในขณะที่onloadเหตุการณ์เกิดขึ้นต่อมาเมื่อเนื้อหาทั้งหมด (เช่นภาพ) นอกจากนี้ยังได้รับการโหลด

onloadเหตุการณ์เป็นเหตุการณ์มาตรฐานใน DOM ในขณะที่readyเหตุการณ์เป็นเฉพาะกับ jQuery วัตถุประสงค์ของreadyเหตุการณ์คือว่าควรเกิดขึ้นเร็วที่สุดหลังจากที่โหลดเอกสารแล้วดังนั้นโค้ดที่เพิ่มฟังก์ชันการทำงานให้กับองค์ประกอบในหน้าไม่จำเป็นต้องรอให้โหลดเนื้อหาทั้งหมด


153
@baptx: คุณผิด readyเหตุการณ์เป็นที่เฉพาะเจาะจงเพื่อ jQuery ใช้DOMContentLoadedกิจกรรมหากมีอยู่ในเบราว์เซอร์ไม่เช่นนั้นจะทำการจำลอง ไม่มีสิ่งที่เทียบเท่าใน DOM เนื่องจากDOMContentLoadedเหตุการณ์ไม่ได้รับการสนับสนุนในเบราว์เซอร์ทั้งหมด
Guffa

18
ตกลง แต่มีผลลัพธ์เดียวกันกับ DOMContentLoaded บางทีคุณควรระบุสิ่งนี้
baptx

55
@ baptx: ฉันไม่คิดว่ามันจะช่วยลดปัญหาได้ แต่ก็ยังทำไม่ได้
Guffa

17
ทำไมต้องลงคะแนน? หากคุณไม่ได้อธิบายว่าคุณคิดว่าอะไรผิดมันไม่สามารถปรับปรุงคำตอบได้
Guffa

4
ไม่มีเหตุการณ์เช่นonloadนี้ onloadเป็นชื่อของคุณสมบัติวัตถุที่เก็บฟังก์ชันที่จะเรียกใช้เมื่อมีการเรียกใช้loadเหตุการณ์
Scott Marcus

140

window.onloadเป็นเหตุการณ์ JavaScript ที่มีอยู่ในตัว แต่เมื่อการติดตั้งมีความละเอียดอ่อนข้ามเบราว์เซอร์ (Firefox, Internet Explorer 6, Internet Explorer 8 และOpera ) jQuery จะจัดเตรียมdocument.readyสิ่งเหล่านี้ออกมาและไฟทันทีที่ DOM ของหน้าพร้อม (ไม่ต้องรอรูปภาพ ฯลฯ )

$(document).ready(โปรดทราบว่ามันไม่ได้ document.readyซึ่งไม่ได้กำหนด) เป็นฟังก์ชั่น jQuery, การห่อและให้สอดคล้องกับเหตุการณ์ต่อไปนี้:

  • document.ondomcontentready/ document.ondomcontentloaded- เหตุการณ์ใหม่ที่เกิดขึ้นเมื่อโหลด DOM ของเอกสาร (ซึ่งอาจใช้เวลาก่อนที่จะโหลดภาพ ฯลฯ ); อีกครั้งแตกต่างกันเล็กน้อยใน Internet Explorer และในส่วนที่เหลือของโลก
  • และwindow.onload(ซึ่งใช้งานได้แม้ในเบราว์เซอร์รุ่นเก่า) ซึ่งจะทำงานเมื่อโหลดหน้าเว็บทั้งหมด (รูปภาพสไตล์ ฯลฯ )

16
มีความเข้าใจผิดเล็กน้อยที่นี่: loadเหตุการณ์windowถูกนำไปใช้อย่างสมเหตุสมผลในเบราว์เซอร์อย่างสม่ำเสมอ ปัญหาที่ jQuery และไลบรารี่อื่นกำลังพยายามแก้ไขนั้นเป็นปัญหาที่คุณกล่าวถึงซึ่งloadเหตุการณ์นั้นไม่ได้ถูกไล่ออกจนกว่าทรัพยากรที่ขึ้นต่อกันทั้งหมดเช่นอิมเมจและสไตล์ชีตจะโหลดซึ่งอาจใช้เวลานานหลังจากโหลด DOM ทั้งหมดแล้ว แสดงผลและพร้อมสำหรับการโต้ตอบ กรณีที่เกิดเพลิงไหม้ในเบราว์เซอร์ได้มากที่สุดเมื่อ DOM พร้อมที่จะเรียกว่าไม่DOMContentLoaded DOMContentReady
Tim Down

2
@Tim Down: เหตุผลเป็นคำสำคัญที่นี่; อย่างน้อยวัตถุบางอย่างที่ใช้ในการดมกลิ่นจำเป็นถึงแม้จะมีonload(มีความแตกต่าง wrt FF / IE / Opera) สำหรับDOMContentLoadedคุณถูกต้องทั้งหมด แก้ไขเพื่อชี้แจง
Piskvor ออกจากอาคาร

คุณดมกลิ่นวัตถุชนิดใด
Tim Down

1
@ Tim ลง: ฉันรู้ว่าโอเปร่ามีแต่เรียกเหตุการณ์ที่มันเล็กน้อยโวหาร (ทริกเกอร์น่าเชื่อถือdocument.onloadก็สามารถใช้งานได้) เท่าที่ window.onload ไป: window.onload = fn1;window.onload=fn2;- เฉพาะ fn2 เท่านั้นที่จะเรียกใช้ onload เว็บโฮสติ้งฟรีบางแห่งแทรกรหัสของตัวเองลงในเอกสารและบางครั้งสิ่งนี้ก็ทำให้รหัสในหน้า
Piskvor ออกจากอาคาร

1
การเขียน "document.ready" ไม่ถูกต้องหรือไม่ วัตถุเอกสารไม่มีวิธีการที่พร้อมวัตถุ jQuery จะส่งคืนจากการเรียก $ (เอกสาร) โปรดแก้ไขคำตอบนี้ถ้าฉันพูดถูกเพราะมันสับสนมาก
A. Sallai

87

$(document).ready()เป็นเหตุการณ์ jQuery $(document).ready()วิธีการของ JQuery จะถูกเรียกใช้ทันทีที่ DOM พร้อม (ซึ่งหมายความว่าเบราว์เซอร์แยกวิเคราะห์ HTML และสร้างแผนผัง DOM) สิ่งนี้ทำให้คุณสามารถเรียกใช้รหัสได้ทันทีที่เอกสารพร้อมที่จะจัดการ

ตัวอย่างเช่นหากเบราว์เซอร์รองรับเหตุการณ์ DOMContentLoaded (เบราว์เซอร์ที่ไม่ใช่ IE หลายตัว) ก็จะเริ่มทำงานในเหตุการณ์นั้น (โปรดทราบว่าเหตุการณ์ DOMContentLoaded ถูกเพิ่มไปยัง IE ใน IE9 + เท่านั้น)

สามารถใช้ไวยากรณ์สองแบบสำหรับสิ่งนี้:

$( document ).ready(function() {
   console.log( "ready!" );
});

หรือเวอร์ชั่นย่อ:

$(function() {
   console.log( "ready!" );
});

ประเด็นหลักสำหรับ$(document).ready():

  • มันจะไม่รอให้โหลดภาพ
  • ใช้เพื่อเรียกใช้ JavaScript เมื่อโหลด DOM เสร็จสมบูรณ์ ใส่ตัวจัดการเหตุการณ์ที่นี่
  • สามารถใช้งานได้หลายครั้ง
  • แทนที่$ด้วยjQueryเมื่อคุณได้รับ "$ ไม่ได้ถูกกำหนด"
  • ไม่ได้ใช้ถ้าคุณต้องการจัดการภาพ ใช้$(window).load()แทน

window.onload()เป็นฟังก์ชัน JavaScript ดั้งเดิม window.onload()เหตุการณ์ fires เมื่อเนื้อหาทั้งหมดในหน้าเว็บของคุณมีการโหลดรวมทั้ง DOM (ที่ด็อม), โฆษณาแบนเนอร์และภาพ ความแตกต่างระหว่างทั้งสองก็คือว่าในขณะที่เราสามารถมีได้มากกว่าหนึ่ง$(document).ready()ฟังก์ชั่นเราสามารถมีonloadฟังก์ชั่นเดียวเท่านั้น


4
จุดด้อย: การสนทนาของ IE เป็นคำที่ไม่ดี ไม่ใช่ว่า IE (8 และก่อนหน้านี้) "ไม่สามารถดำเนินการอย่างปลอดภัย"จนกว่าเอกสาร ReadyState จะเสร็จสมบูรณ์นั่นคือ IE ไม่มีเหตุการณ์ DOMContentLoaded ไม่ใช่เรื่องของ "ความปลอดภัย" แต่มีคุณลักษณะที่ขาดหายไปใน IE เพิ่มใน IE 9
ToolmakerSteve

คุณถูกต้องดังนั้นฉันจึงแก้ไขคำตอบเพื่อแสดงความคิดเห็นและขอบคุณ!
James Drinkard

คุณพูดว่า "จะไม่รอให้โหลดรูปภาพ" ไฟล์อื่น ๆ ที่สำคัญที่สุดคือ js? บ่อยครั้งก่อนที่จะเรียกฟังก์ชั่นจากไฟล์อื่น - ฉันจำเป็นต้องรู้ว่ามันถูกโหลดหรือไม่
Darius.V

นี่เป็นอีกหัวข้อหนึ่งโดยสิ้นเชิง แต่ถ้าฉันเข้าใจสิ่งที่คุณถามมันขึ้นอยู่กับว่าคุณจัดโครงสร้างหน้าของคุณอย่างไรรวมถึงลำดับที่คุณวางไฟล์ js นี่คือลิงค์สำหรับรายละเอียดเพิ่มเติม: ablogaboutcode.com/2011/06/14/… HTH, James
James Drinkard

ทำไมบางคนต้องการใช้ $ (เอกสาร). ready () หลาย ๆ ครั้ง
Usman

43

ของ Windows โหลดเหตุการณ์ fires เมื่อเนื้อหาทั้งหมดที่อยู่ในหน้าของคุณจะโหลดอย่างเต็มที่รวมทั้ง DOM (ด็อม) เนื้อหาและAsynchronous JavaScript , เฟรมและภาพ คุณยังสามารถใช้ body onload = ทั้งสองเหมือนกัน; window.onload = function(){}และ<body onload="func();">เป็นวิธีการใช้เหตุการณ์เดียวกันที่แตกต่างกัน

$document.readyเหตุการณ์ฟังก์ชั่นjQueryรันเร็วกว่าwindow.onloadและถูกเรียกใช้เมื่อโหลด DOM (โมเดลวัตถุเอกสาร) บนหน้าของคุณ มันจะไม่รอให้ภาพเฟรมที่จะได้รับการโหลดอย่างเต็มที่

ที่นำมาจากบทความต่อไปนี้: วิธีการที่$document.ready()แตกต่างจากwindow.onload()


ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุด!
Haoyu Chen

3
ฉันอาจเห็นด้วยถ้ามันไม่ได้คัดลอกคำต่อคำ
Kevin B

23

$(document).ready(function() {

    // Executes when the HTML document is loaded and the DOM is ready
    alert("Document is ready");
});

// .load() method deprecated from jQuery 1.8 onward
$(window).on("load", function() {

     // Executes when complete page is fully loaded, including
     // all frames, objects and images
     alert("Window is loaded");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>


22

ข้อควรระวังในการใช้$(document).ready()กับ Internet Explorer หากคำขอ HTTP ถูกขัดจังหวะก่อนที่จะโหลดเอกสารทั้งหมด (ตัวอย่างเช่นในขณะที่หน้ากำลังสตรีมไปยังเบราว์เซอร์จะมีการคลิกลิงก์อื่น) IE จะเรียกใช้$(document).readyเหตุการณ์

หากรหัสใด ๆ ใน$(document).ready()เหตุการณ์อ้างอิงถึงวัตถุ DOM อาจมีอยู่สำหรับวัตถุเหล่านั้นที่จะไม่พบและข้อผิดพลาดของ Javascript สามารถเกิดขึ้นได้ ป้องกันการอ้างอิงของคุณไปยังวัตถุเหล่านั้นหรือเลื่อนรหัสที่อ้างอิงวัตถุเหล่านั้นไปยังเหตุการณ์ window.load

ฉันไม่สามารถทำซ้ำปัญหานี้ในเบราว์เซอร์อื่น ๆ (โดยเฉพาะ Chrome และ Firefox)


IE เวอร์ชันใด ฉันรู้ว่าฉันควรสนใจความเข้ากันได้ แต่มันยากที่จะใช้กับ IE เป็นที่ยอมรับหรือไม่ที่จะใช้ document.ready สำหรับ JavaScript เพียงอย่างเดียว?
โมนิก้า


22

เคล็ดลับเล็กน้อย:

มักจะใช้window.addEventListenerเพิ่มเหตุการณ์ไปที่หน้าต่าง เพราะวิธีการที่คุณสามารถรันโค้ดในตัวจัดการเหตุการณ์ที่แตกต่างกัน

รหัสที่ถูกต้อง:

window.addEventListener('load', function () {
  alert('Hello!')
})

window.addEventListener('load', function () {
  alert('Bye!')
})

รหัสไม่ถูกต้อง:

window.onload = function () {
  alert('Hello!') // it will not work!!!
}

window.onload = function () {
  alert('Bye!') 
}

นี่เป็นเพราะ onload เป็นเพียงคุณสมบัติของวัตถุซึ่งถูกเขียนทับ

โดยการเปรียบเทียบกับaddEventListenerมันจะดีกว่าที่จะใช้$(document).ready()มากกว่า onload


3
สิ่งนี้ไม่ตอบคำถามที่ถาม

17

เหตุการณ์ที่เกิดขึ้น

$(document).on('ready', handler)เชื่อมโยงกับเหตุการณ์ที่พร้อมจาก jQuery ตัวจัดการที่เรียกว่าเมื่อ DOM ที่จะโหลด สินทรัพย์เช่นภาพอาจจะยังคงมีการขาดหายไป มันจะไม่ถูกเรียกถ้าเอกสารพร้อมในเวลาที่มีผลผูกพัน jQuery ใช้DOMContentLoaded -Eventเพื่อทำการจำลองถ้าไม่พร้อมใช้งาน

$(document).on('load', handler)เป็นเหตุการณ์ที่จะเริ่มทำงานเมื่อโหลดทรัพยากรทั้งหมดจากเซิร์ฟเวอร์ โหลดรูปภาพแล้ว ในขณะที่onloadเป็นเหตุการณ์ HTML แบบดิบพร้อมสร้างโดย jQuery

ฟังก์ชั่น

$(document).ready(handler)จริงเป็นสัญญา ตัวจัดการจะถูกเรียกทันทีหากเอกสารพร้อมในเวลาที่เรียก มิฉะนั้นจะผูกกับready-Event

ก่อน jQuery 1.8 , ดำรงอยู่ในฐานะที่เป็นชื่อแทน$(document).load(handler)$(document).on('load',handler)

อ่านเพิ่มเติม


คุณช่วยอธิบาย $ (เอกสาร). load (handler) ทำงานเหมือนกับการผูกกับโหลดเหตุการณ์ได้ไหม ไม่เหมือน $ .fn.ready มันจะไม่โทรผ่านทันทีหรือ
Nabeel Khan

ฉันคิดว่าคุณสับสนโดย$.fn.loadที่ไม่ได้ทำหน้าที่เป็นตัวยึดเหตุการณ์อีกต่อไป ในความเป็นจริงมันล้าสมัยตั้งแต่ jquery 1.8 ฉันอัปเดตตามนั้น
abstraktor

16

$(document).ready()เป็นjQueryเหตุการณ์ซึ่งเกิดขึ้นเมื่อเอกสาร HTML ได้รับการโหลดอย่างเต็มที่ในขณะที่window.onloadเหตุการณ์เกิดขึ้นต่อมาเมื่อทุกอย่างรวมทั้งภาพบนหน้าเว็บโหลด

window.onload ยังเป็นเหตุการณ์จาวาสคริปต์ที่แท้จริงใน DOM ในขณะที่$(document).ready()เหตุการณ์เป็นวิธีการใน jQuery

$(document).ready() มักจะเป็น wrapper สำหรับ jQuery เพื่อให้แน่ใจว่าองค์ประกอบทั้งหมดที่โหลดเข้ามาเพื่อใช้ใน jQuery ...

ดูซอร์สโค้ด jQuery เพื่อทำความเข้าใจว่ามันทำงานอย่างไร:

jQuery.ready.promise = function( obj ) {
    if ( !readyList ) {

        readyList = jQuery.Deferred();

        // Catch cases where $(document).ready() is called after the browser event has already occurred.
        // we once tried to use readyState "interactive" here, but it caused issues like the one
        // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
        if ( document.readyState === "complete" ) {
            // Handle it asynchronously to allow scripts the opportunity to delay ready
            setTimeout( jQuery.ready );

        // Standards-based browsers support DOMContentLoaded
        } else if ( document.addEventListener ) {
            // Use the handy event callback
            document.addEventListener( "DOMContentLoaded", completed, false );

            // A fallback to window.onload, that will always work
            window.addEventListener( "load", completed, false );

        // If IE event model is used
        } else {
            // Ensure firing before onload, maybe late but safe also for iframes
            document.attachEvent( "onreadystatechange", completed );

            // A fallback to window.onload, that will always work
            window.attachEvent( "onload", completed );

            // If IE and not a frame
            // continually check to see if the document is ready
            var top = false;

            try {
                top = window.frameElement == null && document.documentElement;
            } catch(e) {}

            if ( top && top.doScroll ) {
                (function doScrollCheck() {
                    if ( !jQuery.isReady ) {

                        try {
                            // Use the trick by Diego Perini
                            // http://javascript.nwbox.com/IEContentLoaded/
                            top.doScroll("left");
                        } catch(e) {
                            return setTimeout( doScrollCheck, 50 );
                        }

                        // detach all dom ready events
                        detach();

                        // and execute any waiting functions
                        jQuery.ready();
                    }
                })();
            }
        }
    }
    return readyList.promise( obj );
};
jQuery.fn.ready = function( fn ) {
    // Add the callback
    jQuery.ready.promise().done( fn );

    return this;
};

นอกจากนี้ฉันได้สร้างภาพด้านล่างเป็นข้อมูลอ้างอิงอย่างรวดเร็วสำหรับทั้งสอง

ป้อนคำอธิบายรูปภาพที่นี่


1
สวยงามหมายถึงเอกสารเป็นจุดบวก .. ขอบคุณ
Irf

13

window.onload: เหตุการณ์ JavaScript ปกติ

document.ready: เหตุการณ์ jQuery เฉพาะเมื่อโหลด HTML ทั้งหมดแล้ว


11

สิ่งหนึ่งที่จำ (หรือฉันควรจะพูดว่าการเรียกคืน) คือการที่คุณไม่สามารถสแต็คเหมือนที่คุณสามารถมีonload readyในคำอื่น ๆ jQuery มายากลช่วยให้หลาย ๆreadyบนหน้าเดียวกัน onloadแต่คุณไม่สามารถทำเช่นนั้นด้วย

สุดท้ายonloadจะลบล้างonloads ก่อนหน้าใด ๆ

วิธีที่ดีในการจัดการกับสิ่งนั้นคือฟังก์ชั่นที่เขียนโดย Simon Willison ที่เห็นได้ชัดและอธิบายไว้ในการใช้ฟังก์ชั่นโหลด JavaScript หลายรายการ

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

// Example use:
addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
addLoadEvent(function() {
  /* More code to run on page load */
});

11

Document.ready(เหตุการณ์ jQuery) จะเริ่มทำงานเมื่อองค์ประกอบทั้งหมดอยู่ในตำแหน่งและสามารถอ้างอิงได้ในรหัส JavaScript แต่เนื้อหาไม่จำเป็นต้องโหลด Document.readyดำเนินการเมื่อมีการโหลดเอกสาร HTML

$(document).ready(function() {

    // Code to be executed
    alert("Document is ready");
});

window.loadแต่จะรอหน้าจะโหลดได้อย่างเต็มที่ ซึ่งรวมถึงเฟรมภายในรูปภาพและอื่น ๆ

$(window).load(function() {

    //Fires when the page is loaded completely
    alert("window is loaded");
});

5

เหตุการณ์ document.ready เกิดขึ้นเมื่อมีการโหลดเอกสาร HTML และwindow.onloadเหตุการณ์จะเกิดขึ้นในภายหลังเสมอเมื่อมีการโหลดเนื้อหาทั้งหมด (รูปภาพ ฯลฯ )

คุณสามารถใช้document.readyเหตุการณ์ได้หากคุณต้องการแทรกแซง "ก่อน" ในกระบวนการเรนเดอร์โดยไม่ต้องรอให้โหลดรูปภาพ หากคุณต้องการภาพที่ (หรืออื่น ๆ "เนื้อหา") พร้อมก่อนสคริปต์ของคุณ "ไม่อะไร" window.onloadคุณจะต้องรอจนกว่า

ตัวอย่างเช่นถ้าคุณมีการดำเนินการเป็น "สไลด์โชว์" window.onloadรูปแบบและคุณจำเป็นต้องดำเนินการคำนวณขึ้นอยู่กับขนาดของภาพที่คุณอาจต้องการที่จะรอจนกว่า มิฉะนั้นคุณอาจประสบปัญหาการสุ่มขึ้นอยู่กับความเร็วในการโหลดภาพ สคริปต์ของคุณจะทำงานพร้อมกับเธรดที่โหลดรูปภาพ หากสคริปต์ของคุณมีความยาวเพียงพอหรือเซิร์ฟเวอร์นั้นเร็วพอคุณอาจไม่สังเกตเห็นปัญหาหากภาพเกิดขึ้นในเวลาที่กำหนด แต่วิธีปฏิบัติที่ปลอดภัยที่สุดจะช่วยให้สามารถโหลดรูปภาพได้

document.readyอาจเป็นเหตุการณ์ที่ดีสำหรับคุณที่จะแสดงเครื่องหมาย "กำลังโหลด ... " แก่ผู้ใช้และเมื่อwindow.onloadใดก็ตามที่คุณสามารถเขียนสคริปต์ที่ต้องการทรัพยากรที่โหลดเสร็จแล้วจากนั้นจึงลบเครื่องหมาย "กำลังโหลด ... "

ตัวอย่าง :-

// document ready events
$(document).ready(function(){
     alert("document is ready..");
})

// using JQuery
$(function(){
   alert("document is ready..");
})

// window on load event
function myFunction(){
  alert("window is loaded..");
}
window.onload = myFunction;

2

window.onloadเป็นฟังก์ชั่น inbuilt JavaScript window.onloadทริกเกอร์เมื่อหน้า HTML โหลด window.onloadสามารถเขียนได้เพียงครั้งเดียว

document.readyเป็นฟังก์ชั่นของห้องสมุด jQuery document.readyทริกเกอร์เมื่อ HTML และรหัส JavaScript, CSS และรูปภาพทั้งหมดที่รวมอยู่ในไฟล์ HTML ถูกโหลดอย่างสมบูรณ์ document.readyสามารถเขียนได้หลายครั้งตามความต้องการ


"window.onload is function" ไม่ถูกต้องเนื่องจาก @ Илья-Зеленькоแสดงให้เห็นว่ามันเป็นคุณสมบัติและไม่ใช่ฟังก์ชั่น รายละเอียด: developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/ขณะที่. ready () เป็นฟังก์ชันและคาดว่าจะมีตัวจัดการ
vik

1

เมื่อคุณพูด$(document).ready(f)คุณบอกให้สคริปต์เอนจิ้นทำสิ่งต่อไปนี้:

  1. รับเอกสารออบเจ็กต์และพุชเนื่องจากไม่อยู่ในขอบเขตโลคัลจึงต้องทำการค้นหาตารางแฮชเพื่อค้นหาว่าเอกสารอยู่ที่ไหนโชคดีที่เอกสารถูกผูกไว้ทั่วโลกดังนั้นจึงเป็นการค้นหาเดียว
  2. ค้นหาวัตถุ$และเลือกมันเนื่องจากมันไม่ได้อยู่ในขอบเขตมันจะต้องทำการค้นหาตารางแฮชซึ่งอาจหรือไม่อาจมีการชน
  3. ค้นหาวัตถุในขอบเขตทั่วโลกซึ่งเป็นอีกหนึ่งการค้นหาตารางแฮชหรือฟังก์ชั่นการผลักดันวัตถุและเริ่มต้นมัน
  4. การเรียกใช้readyออบเจกต์ที่เลือกซึ่งเกี่ยวข้องกับการค้นหาตารางแฮชอีกอันในวัตถุที่เลือกเพื่อค้นหาเมธอดและเรียกใช้
  5. เสร็จแล้ว

ในกรณีที่ดีที่สุดนี่คือการค้นหาตารางแฮช 2 อัน แต่ไม่สนใจงานหนักที่ทำโดย jQuery โดยที่$อ่างครัวของอินพุตที่เป็นไปได้ทั้งหมดถึง jQuery ดังนั้นแผนที่อื่นน่าจะส่งแบบสอบถามเพื่อจัดการตัวแก้ไขที่ถูกต้อง

หรือคุณสามารถทำสิ่งนี้:

window.onload = function() {...}

ซึ่งจะ

  1. ค้นหาหน้าต่างวัตถุในขอบเขตส่วนกลางหาก JavaScript ได้รับการปรับให้เหมาะสมที่สุดจะรู้ว่าเนื่องจากไม่มีการเปลี่ยนแปลงหน้าต่างวัตถุจะมีวัตถุที่เลือกอยู่แล้วจึงไม่จำเป็นต้องทำสิ่งใด
  2. วัตถุฟังก์ชั่นจะถูกผลักบนตัวถูกดำเนินการสแต็ค
  3. ตรวจสอบว่าonloadเป็นคุณสมบัติหรือไม่โดยทำการค้นหาตารางแฮชเพราะมันจะเรียกว่าเหมือนฟังก์ชั่น

ในกรณีที่ดีที่สุดจะต้องเสียค่าใช้จ่ายในการค้นหาตารางแฮชเดียวซึ่งจำเป็นเพราะonloadต้องดึงข้อมูล

ตามหลักการแล้ว jQuery จะรวบรวมแบบสอบถามของพวกเขาไปยังสตริงที่สามารถวางเพื่อทำสิ่งที่คุณต้องการให้ jQuery ทำ แต่ไม่มีการแจกจ่าย jQuery แบบรันไทม์ วิธีนี้คุณมีตัวเลือกอย่างใดอย่างหนึ่ง

  1. ทำ jquery แบบไดนามิกเช่นเดียวกับที่เราทำในวันนี้
  2. มี jQuery รวบรวมแบบสอบถามของคุณไปยังสตริง JavaScript บริสุทธิ์ที่สามารถส่งผ่านไปยัง Eval เพื่อทำสิ่งที่คุณต้องการ
  3. คัดลอกผลมาจาก 2 evalโดยตรงในรหัสของคุณและข้ามค่าใช้จ่ายของ

0

window.onload จัดทำโดย DOM api และมีข้อความระบุว่า "เหตุการณ์โหลดเกิดขึ้นเมื่อโหลดทรัพยากรที่กำหนด"

"เหตุการณ์โหลดเกิดขึ้นเมื่อสิ้นสุดกระบวนการโหลดเอกสาร ณ จุดนี้วัตถุทั้งหมดในเอกสารอยู่ใน DOM และอิมเมจสคริปต์ลิงก์และเฟรมย่อยทั้งหมดเสร็จสิ้นการโหลดแล้ว" DOM onload

แต่ใน jQuery $ (document) .ready () จะทำงานเฉพาะเมื่อหน้า Document Object Model (DOM) พร้อมสำหรับโค้ด JavaScript เพื่อเรียกใช้งาน นี้ไม่รวมถึงภาพสคริปต์ iframes ฯลฯเหตุการณ์พร้อม jQuery

ดังนั้นเมธอดพร้อมใช้ jquery จะรันเร็วกว่าเหตุการณ์ dom onload

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.