ডোমকন্টেন্টলয়েড এবং লোড ইভেন্টের মধ্যে পার্থক্য


উত্তর:


191

থেকে মজিলা ডেভেলপার কেন্দ্র :

স্ট্রোলশিট, চিত্র এবং সাবফ্রেমগুলি লোডিং শেষ করার জন্য অপেক্ষা না করেই ডকুমেন্টটি সম্পূর্ণ লোড এবং পার্স করা হয়ে গেলে ডমকনটেন্টলয়েড ইভেন্টটি বরখাস্ত করা হয় (লোড ইভেন্টটি সম্পূর্ণ লোড হওয়া পৃষ্ঠাটি সনাক্ত করতে ব্যবহার করা যেতে পারে)।


27
ফাইআই, একই এমডিএন লিঙ্ক [এখন] এও বলেছে: "দ্রষ্টব্য: স্টাইলশীট ব্লক স্ক্রিপ্ট এক্সিকিউশনটি লোড করে, সুতরাং আপনার <লিঙ্ক rel =" স্টাইলশিট "...> এর পরে যদি একটি <script> থাকে তবে পৃষ্ঠাটি পার্সিং শেষ হবে না - এবং ডোমকন্টেন্টলয়েড আগুন জ্বালাবে না - যতক্ষণ না স্টাইলশিটটি লোড হয়। "
নিক

10
@ নিক এই পৃষ্ঠাটি কারণ দেয়। এইচটিএমএল 5 আরকস / এন / টিউটোরিয়ালস / ইন্টার্নালস / হাউউ ব্রাউজারসওয়ার্ক যদিও আমি পৃষ্ঠাটিতে ভিডিওটি দেখার পরামর্শ দিচ্ছি।
abhisekp

1
@ অভিসেকপি চমৎকার টিউটোরিয়াল যদিও ভিডিও লিঙ্কটি এখন অপ্রচলিত
সুপি

সুতরাং রেন্ডার ট্রিটি ডোমকন্টেন্টলয়েড ফায়ার করার পরে তৈরি করা হয়েছে। তবে ডিওএমকন্টেন্টলয়েডগুলি বিকাশকারী.মোজিলা.অর্গ.ইন- ইউএস / ডকস / ওয়েবে / এপিআই / উইন্ডো/… অনুযায়ী লোড শেষ করতে ইমেজ / সাব-রিসোর্স / সাবফ্রেমগুলির জন্য অপেক্ষা করে না । আপনি কি জানেন যে এই চিত্রগুলি / সাবফ্রেমগুলি / সাব রিসোর্সগুলি রেন্ডার ট্রি দ্বারা নির্মিত হওয়ার পরে এটি ডাকা হয়েছিল, বা রেন্ডার ট্রিটি এখনও নির্মিত হচ্ছিল যখন তারা ইতিমধ্যে ডোম গাছ দ্বারা ডাকা হয়েছিল? অন্য কথায়, রেন্ডার ট্রি এই চিত্রগুলি / সাবফ্রেমগুলি / সাবসোর্সগুলি ডাউনলোড করতে সংযোগগুলির একটি গোছকে ট্রিগার করে বা তাদের ডাউনলোডগুলি ইতিমধ্যে প্রগতিতে ছিল?
12fmffqqg3

83

DOMContentLoadedঘটনা গুলি যত তাড়াতাড়ি করে DOM অনুক্রমের সম্পূর্ণরূপে নির্মাণ করা হয়েছে, হবে loadঘটনা এটা করতে হবে যখন সমস্ত চিত্র ও উপ-ফ্রেম সমাপ্ত লোড আছে।

DOMContentLoadedবেশিরভাগ আধুনিক ব্রাউজারগুলিতে কাজ করবে, তবে আইই 9 এবং তারপরের IE সহ নয় । আইই এর পুরানো সংস্করণগুলিতে এই ইভেন্টটির নকল করার জন্য কিছু কর্মসীমা রয়েছে , যেমন jQuery লাইব্রেরিতে ব্যবহৃত যেমন, তারা IE নির্দিষ্ট onreadystatechange ইভেন্ট সংযুক্ত করে ।


7
আপনি "এই ইভেন্ট" বলার সময় আপনি কোন ইভেন্টটির উল্লেখ করছেন?
টম হাবার্ড

2
"এই ইভেন্ট" = ডোমকন্টেন্টলয়েড। এটি আই 8 তে কাজ করে না। আপনার যদি সমর্থন করার দরকার হয় তবে সিএমএস-এর সাথে লিঙ্কটি রয়েছে এমন workaround ব্যবহার করুন
জান ডের্ক

53

পার্থক্যটি নিজে দেখুন:

ডেমো

মাইক্রোসফ্ট আইই থেকে

বর্তমান পৃষ্ঠার পার্সিং সম্পূর্ণ হওয়ার সাথে সাথে ডমকন্টেন্টলয়েড ইভেন্টটি জ্বলে উঠল; সমস্ত ফাইল বিজ্ঞাপন এবং ইমেজ সহ সমস্ত সংস্থান থেকে লোড করা শেষ করলে লোড ইভেন্টটি জ্বলে ওঠে। জটিল ওয়েব পৃষ্ঠাগুলিতে ইউআই কার্যকারিতা হুকআপ করার জন্য ডমকন্টেন্টলয়েড একটি দুর্দান্ত ইভেন্ট।

থেকে মজিলা ডেভেলপার নেটওয়ার্ক

স্ট্রোলশিট, চিত্র এবং সাবফ্রেমগুলি লোডিং শেষ করার জন্য অপেক্ষা না করেই ডকুমেন্টটি সম্পূর্ণ লোড এবং পার্স করা হয়ে গেলে ডমকনটেন্টলয়েড ইভেন্টটি বরখাস্ত করা হয় (লোড ইভেন্টটি সম্পূর্ণ লোড হওয়া পৃষ্ঠাটি সনাক্ত করতে ব্যবহার করা যেতে পারে)।


না DOMContentLoadedগ্যারান্টি সব স্ক্রিপ্ট (মুলতবি / ASYNC সহ) লোড করা হয়েছে কেন? স্ক্রিপ্টগুলি সম্পর্কে এখানে কিছু বলা হয় না: বিকাশকারী.মোজিলা.আর.ইন.ইউএস
সের্গেই

@ সার্জি নোপ অ্যাসিঙ্ক রিসোর্স - যেমন <স্ক্রিপ্ট async src = app.js /> - বাকি পৃষ্ঠাগুলির থেকে স্বাধীনভাবে লোড করা হয় অতএব
DOMContentLoAD সংস্থানটি

1
@ মেহরাদসাদেগ আমি আপনাকে ভুল বলে মনে করি! এমডিএন ডকুমেন্টেশন থেকে : ডিফার অ্যাট্রিবিউট সহ স্ক্রিপ্টগুলি স্ক্রিপ্টটি লোড না করে এবং মূল্যায়ন শেষ না হওয়া পর্যন্ত DOMContentLoaded ইভেন্টটিকে গুলি চালানো থেকে বিরত রাখবে। : আপনি যে এটা নিশ্চিত করেছে, এই তাই প্রশ্ন কটাক্ষপাত করা করতে পারেন stackoverflow.com/questions/42950574/...
radzak

1
@ জাতিমির আমি মনে করি ডিফার এবং অ্যাসিঙ্ক বৈশিষ্ট্যের আলাদা আচরণ রয়েছে।
মেহরাদ সাদেঘ

1
@ জাতিমির খুশী আপনি যেভাবেই পোস্ট করেছেন, কারণ আপনার অবদানটি নিখুঁতভাবে ছিল, আমি যা খুঁজছিলাম! ধন্যবাদ!
রবার্ট ওয়াইল্ডিং

29

DOMContentLoaded==window.onDomReady()

Load==window.onLoad()

দস্তাবেজ "প্রস্তুত" না হওয়া পর্যন্ত কোনও পৃষ্ঠা নিরাপদে হেরফের করা যায় না। jQuery আপনার জন্য এই প্রস্তুতির অবস্থা সনাক্ত করে। কোডটি $ (দস্তাবেজ) এর মধ্যে অন্তর্ভুক্ত রয়েছে ready কোডটি $ (উইন্ডো) এর অন্তর্ভুক্ত রয়েছে load

দেখুন: http://learn.jquery.com/ using-jquery-core / docament- तैयार/


1
প্রশ্ন jQuery সম্পর্কে নয়।
ব্যবহারকারী 34660

4
@ ব্যবহারকারী 34660 এটি নয়, তবে তা বুঝতে সহায়ক।
অ্যান্ডারসন

16
  • ডোমকন্টেন্টলয়েড : পয়েন্টটি চিহ্নিত করে যখন উভয় ডিওএম প্রস্তুত থাকে এবং এমন কোনও স্টাইলশিট নেই যা জাভাস্ক্রিপ্ট সম্পাদন অবরুদ্ধ করে - যার অর্থ আমরা এখন (সম্ভাব্যভাবে) রেন্ডার ট্রি তৈরি করতে পারি। অনেক জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক তাদের নিজস্ব যুক্তি সম্পাদন শুরু করার আগে এই ইভেন্টটির জন্য অপেক্ষা করে। এই কারণে ব্রাউজারটি ইভেন্ট স্টার্ট এবং ইভেন্টএন্ড টাইমস্ট্যাম্পগুলি ক্যাপচার করে যাতে এটি কার্যকর করতে কত সময় লেগেছিল তা ট্র্যাক করার অনুমতি দেয়।

  • লোডএভেন্ট : প্রতিটি পৃষ্ঠার চূড়ান্ত পদক্ষেপ হিসাবে ব্রাউজারটি লোড করে একটি "অনলোড" ইভেন্ট যা অতিরিক্ত অ্যাপ্লিকেশন যুক্তিকে ট্রিগার করতে পারে।

উৎস


আমি যদি জেএস-তে url সহ কোনও স্ক্রিপ্ট ট্যাগগুলি রাখি তবে তারা কি ডোমকন্টেন্টলয়েডের আগে বা পরে লোড করবে?
পাভান

0

আমাদের জন্য কাজ করে এমন কিছু কোড এখানে। আমরা এমএসআইইকে হিট এবং মিস করতে দেখেছি DomContentLoaded, অতিরিক্ত সংস্থানগুলি ক্যাশ না করাতে কিছুটা বিলম্ব হবে বলে মনে হচ্ছে (আমাদের কনসোল লগিংয়ের উপর ভিত্তি করে 300 মিমি অবধি), এবং যখন তারা ক্যাশ করা হয় তখন এটি খুব দ্রুত ট্রিগার হয়। সুতরাং আমরা এমআইএসইয়ের জন্য একটি ফ্যালব্যাক নিয়েছিলাম। আপনার বাহ্যিক জেএস ফাইলগুলির আগে বা পরে ট্রিগার হ'ল আপনি doStuff()ফাংশনটি ট্রিগার করতে চান DomContentLoaded

// detect MSIE 9,10,11, but not Edge
ua=navigator.userAgent.toLowerCase();isIE=/msie/.test(ua);

function doStuff(){
    //
}
if(isIE){
    // play it safe, very few users, exec ur JS when all resources are loaded
    window.onload=function(){doStuff();}
} else {
    // add event listener to trigger your function when DOMContentLoaded
    if(document.readyState==='loading'){
        document.addEventListener('DOMContentLoaded',doStuff);
    } else {
        // DOMContentLoaded already loaded, so better trigger your function
        doStuff();
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.