আপনি পরিবর্তনশীল স্ক্রিপ্ট লোড হচ্ছে না হয় অথবা তাদের হিসাবে চিহ্নিত defer
বা async
, তারপর স্ক্রিপ্ট পৃষ্ঠা সম্মুখীন অনুক্রমে লোড করা হয়। এটি বাহ্যিক স্ক্রিপ্ট বা একটি ইনলাইন স্ক্রিপ্ট কিনা তা বিবেচ্য নয় - তারা পৃষ্ঠায় যে ক্রমটি সম্মুখীন হয়েছে সেভাবে তাদের সম্পাদন করা হয়। বাহ্যিক স্ক্রিপ্টগুলির পরে আসা ইনলাইন স্ক্রিপ্টগুলি সমস্ত বাহ্য স্ক্রিপ্টগুলি লোড করা এবং চালানো না হওয়া অবধি রাখা হয়।
অ্যাসিঙ্ক স্ক্রিপ্টগুলি (সেগুলিকে অ্যাসিঙ্ক হিসাবে নির্দিষ্ট করা যায় তা নির্বিশেষে) লোড করুন এবং একটি অনির্দেশ্য ক্রমে চালিত করুন। ব্রাউজারটি এগুলিকে সমান্তরালে লোড করে এবং যা খুশি তাই সেগুলি চালানো বিনামূল্যে is
একাধিক অ্যাসিঙ্ক জিনিসগুলির মধ্যে কোনও অনুমানযোগ্য অর্ডার নেই। যদি কারও কাছে পূর্বাভাসযোগ্য আদেশের প্রয়োজন হয়, তবে এ্যাসঙ্ক স্ক্রিপ্টগুলি থেকে লোড বিজ্ঞপ্তিগুলির জন্য নিবন্ধকরণ করে এবং উপযুক্ত জিনিসগুলি লোড করা হলে জাভাস্ক্রিপ্ট কল ম্যানুয়ালি সিকোয়েন্সিং করে কোড করতে হবে।
যখন কোনও স্ক্রিপ্ট ট্যাগ গতিশীলভাবে .োকানো হয়, কার্যকর করা আদেশ কীভাবে আচরণ করে তা ব্রাউজারের উপর নির্ভর করবে। আপনি দেখতে পারেন ফায়ারফক্স এই রেফারেন্স নিবন্ধে কীভাবে আচরণ করে । সংক্ষেপে, ফায়ারফক্সের নতুন সংস্করণগুলি স্ক্রিপ্ট ট্যাগটি অন্যথায় সেট না করা হলে অ্যাসিঙ্কে ডায়নামিকভাবে যুক্ত স্ক্রিপ্ট ট্যাগকে ডিফল্ট করে।
async
লোড হওয়ার সাথে সাথে একটি স্ক্রিপ্ট ট্যাগ চালানো যেতে পারে। প্রকৃতপক্ষে, ব্রাউজার পার্সারকে অন্য যা কিছু করছিল তা থেকে বিরতি দিতে এবং সেই স্ক্রিপ্টটি চালাতে পারে। সুতরাং, এটি সত্যিই প্রায় যে কোনও সময় চলতে পারে। যদি স্ক্রিপ্টটি ক্যাশে করা থাকে তবে এটি প্রায় সাথে সাথেই চলতে পারে। স্ক্রিপ্টটি লোড হতে কিছুটা সময় নিলে পার্সার শেষ হওয়ার পরে এটি চলতে পারে। একটি জিনিস মনে রাখবেন async
যে এটি যে কোনও সময় চলতে পারে এবং সেই সময়টি অনুমানযোগ্য নয়।
defer
পুরো পার্সারটি না হওয়া পর্যন্ত অপেক্ষা সহ একটি স্ক্রিপ্ট ট্যাগ এবং তারপরে যে সমস্ত স্ক্রিপ্টগুলি চিহ্নিত defer
হয়েছিল তার ক্রমযুক্ত চিহ্নিত করে চালায় । এটি আপনাকে বেশ কয়েকটি স্ক্রিপ্ট চিহ্নিত করতে দেয় যা একে অপরের উপর নির্ভর করে defer
। ডকুমেন্ট পার্সার শেষ না হওয়া পর্যন্ত তারা সবাই স্থগিত হয়ে যাবে, তবে তারা নির্ভরতা সংরক্ষণের জন্য যে ক্রম সম্মুখীন হয়েছিল তার ক্রম কার্যকর করবে। আমি মনে করি defer
স্ক্রিপ্টগুলি এমন একটি কাতারে ফেলে দেওয়া হয়েছে যা পার্সার হয়ে যাওয়ার পরে প্রক্রিয়া করা হবে। প্রযুক্তিগতভাবে, ব্রাউজারটি যে কোনও সময় পটভূমিতে স্ক্রিপ্টগুলি ডাউনলোড করতে পারে তবে পার্সার পৃষ্ঠাটি বিশ্লেষণ এবং চিহ্নযুক্ত নয় defer
বা কোনও ইনলাইন স্ক্রিপ্টগুলি পার্সিং এবং চালনা না করা অবধি পার্সার কার্যকর বা ব্লক করবে না async
।
এই নিবন্ধটি থেকে একটি উদ্ধৃতি এখানে:
স্ক্রিপ্ট-সন্নিবেশিত স্ক্রিপ্টগুলি আইই এবং ওয়েবকিটগুলিতে সংশ্লেষজনকভাবে সঞ্চালিত হয়, তবে অপেরা এবং প্রাক-4.0 ফায়ারফক্সে সিঙ্ক্রোনালিভাবে কার্যকর হয়।
এইচটিএমএল 5 স্পেসের প্রাসঙ্গিক অংশটি (নতুন কমপ্লায়েন্ট ব্রাউজারগুলির জন্য) এখানে । অ্যাসিঙ্ক আচরণ সম্পর্কে সেখানে অনেকগুলি লেখা আছে। স্পষ্টতই, এই অনুমানটি পুরানো ব্রাউজারগুলিতে (বা ম্যাল-কনফর্মিং ব্রাউজারগুলি) প্রযোজ্য নয় যার আচরণ সম্ভবত আপনাকে নির্ধারণের জন্য পরীক্ষা করতে হবে।
এইচটিএমএল 5 স্পেকের একটি উদ্ধৃতি:
তারপরে, পরিস্থিতি বর্ণনা করে এমন নীচের বিকল্পগুলির মধ্যে প্রথমে অনুসরণ করা উচিত:
যদি উপাদানের একটি সিআরসি বৈশিষ্ট্য থাকে এবং উপাদানটির একটি ডিফার অ্যাট্রিবিউট থাকে এবং উপাদানটিকে "পার্সার-সন্নিবেশিত" হিসাবে চিহ্নিত করা হয়, এবং উপাদানটির একটি অ্যাসিঙ্ক বৈশিষ্ট্য না থাকে
তবে উপাদানটির তালিকার শেষের দিকে যোগ করতে হবে স্ক্রিপ্টগুলি কার্যকর করা হবে যখন ডকুমেন্ট উপাদান তৈরি করে এমন পার্সারের নথির সাথে যুক্ত বিশ্লেষণ শেষ করে।
নেটওয়ার্কিং টাস্ক সোর্সটি যে কার্যটি টাস্কের কাতারে রাখে একবার আনার সময় অ্যালগরিদম শেষ হয়ে গেলে অবশ্যই উপাদানটির "পার্সার-এক্সিকিউটড হওয়ার জন্য প্রস্তুত" পতাকা সেট করতে হবে। পার্সার স্ক্রিপ্টটি কার্যকর করতে পরিচালনা করবে।
যদি উপাদানের একটি সিআরসি বৈশিষ্ট্য থাকে এবং উপাদানটিকে "পার্সার-সন্নিবেশিত" হিসাবে চিহ্নিত করা হয়, এবং উপাদানটির একটি অ্যাসিঙ্ক বৈশিষ্ট্য থাকে না
তবে উপাদানটি পার্সার নথির পার্সিং-ব্লকিং স্ক্রিপ্টের মুলতুবি থাকে। (ডকুমেন্টে একবারে কেবল একটির মতো স্ক্রিপ্ট থাকতে পারে))
নেটওয়ার্কিং টাস্ক সোর্সটি যে কার্যটি টাস্কের কাতারে রাখে একবার আনার সময় অ্যালগরিদম শেষ হয়ে গেলে অবশ্যই উপাদানটির "পার্সার-এক্সিকিউটড হওয়ার জন্য প্রস্তুত" পতাকা সেট করতে হবে। পার্সার স্ক্রিপ্টটি কার্যকর করতে পরিচালনা করবে।
যদি উপাদানটিতে একটি এসসিআর বৈশিষ্ট্য না থাকে এবং উপাদানটিকে "পার্সার-সন্নিবেশিত" হিসাবে চিহ্নিত করা হয়, এবং এইচটিএমএল পার্সার বা এক্সএমএল পার্সারের নথিতে স্ক্রিপ্টগুলি ব্লক করে এমন একটি স্টাইল শীট থাকে যা উপাদানটি হয় উপাদানটি তৈরি করে এমন পার্সারের নথির পার্সিং-ব্লকিং স্ক্রিপ্ট মুলতুবি। (ডকুমেন্টে একবারে কেবল একটির মতো স্ক্রিপ্ট থাকতে পারে))
উপাদানটির "পার্সার-এক্সিকিউটড হতে প্রস্তুত" পতাকা সেট করুন। পার্সার স্ক্রিপ্টটি কার্যকর করতে পরিচালনা করবে।
যদি উপাদানটির একটি সিআরসি বৈশিষ্ট্য থাকে, একটি অ্যাসিঙ্ক বৈশিষ্ট্য না থাকে এবং এতে "ফোর্স-অ্যাসিঙ্ক" পতাকা সেট থাকে না তবে উপাদানটি স্ক্রিপ্টগুলির তালিকার শেষে যুক্ত করা উচিত যা যত তাড়াতাড়ি সম্ভব যুক্ত হওয়ার সাথে সাথে কার্যকর করা হবে স্ক্রিপ্ট উপাদান নথির সাথে স্ক্রিপ্ট অ্যালগরিদম প্রস্তুত শুরু করার সময়।
আনারিং অ্যালগরিদম শেষ হয়ে গেলে নেটওয়ার্কিং টাস্ক সোর্সটি টাস্ক কাতারে যে কার্যটি স্থাপন করে তা অবশ্যই নিম্নলিখিত পদক্ষেপগুলি চালাবেন:
স্ক্রিপ্টগুলির তালিকায় যদি উপাদানটি এখন প্রথম উপাদান না হয় যা যত তাড়াতাড়ি সম্ভব এটি উপরে যুক্ত করা হয়েছিল কার্যকরভাবে চিহ্নিত করা হবে , তবে উপাদানটিকে প্রস্তুত হিসাবে চিহ্নিত করুন তবে স্ক্রিপ্টটি কার্যকর না করেই এই পদক্ষেপগুলি বাতিল করে দিন।
সম্পাদন: স্ক্রিপ্টগুলির এই তালিকায় প্রথম স্ক্রিপ্ট উপাদানটির সাথে সম্পর্কিত স্ক্রিপ্ট ব্লকটি কার্যকর করুন যা যত তাড়াতাড়ি সম্ভব ক্রমানুসারে কার্যকর করা হবে।
এই স্ক্রিপ্টগুলির তালিকা থেকে প্রথম উপাদানটি সরিয়ে ফেলুন যা যত তাড়াতাড়ি সম্ভব ক্রমে কার্যকর করা হবে।
যদি স্ক্রিপ্টগুলির এই তালিকাটি যত তাড়াতাড়ি সম্ভব কার্যকর করা হবে তবে এখনও খালি নয় এবং প্রথম এন্ট্রি ইতিমধ্যে প্রস্তুত হিসাবে চিহ্নিত করা হয়েছে, তবে পদক্ষেপের লেবেলযুক্ত প্রয়োগটিতে ফিরে যান।
যদি উপাদানের একটি সিআরসি বৈশিষ্ট্য থাকে তবে অবশ্যই স্ক্রিপ্টগুলির সেটটিতে উপাদানটি যুক্ত করতে হবে যা স্ক্রিপ্ট অ্যালগরিদম শুরু করার সময় স্ক্রিপ্ট উপাদানটির নথি হিসাবে যত তাড়াতাড়ি সম্ভব কার্যকর করা হবে।
নেটওয়ার্কিং টাস্ক সোর্স যে কাজটি টাস্কের সারিটিতে স্থাপন করে একবার আনার জন্য অ্যালগরিদম শেষ হয়ে গেলে স্ক্রিপ্ট ব্লকটি কার্যকর করতে হবে এবং তারপরে স্ক্রিপ্টগুলির সেট থেকে উপাদানটি সরিয়ে ফেলতে হবে যা যত তাড়াতাড়ি সম্ভব কার্যকর করা হবে।
অন্যথায় ব্যবহারকারীর এজেন্টকে অবশ্যই স্ক্রিপ্ট ব্লকটি সম্পাদন করতে হবে, অন্য স্ক্রিপ্টগুলি ইতিমধ্যে কার্যকর করা থাকলেও।
জাভাস্ক্রিপ্ট মডিউল স্ক্রিপ্টগুলি সম্পর্কে কী type="module"
?
জাভাস্ক্রিপ্টটির এখন সিনট্যাক্সের মতো মডিউল লোডিংয়ের জন্য সমর্থন রয়েছে:
<script type="module">
import {addTextToBody} from './utils.mjs';
addTextToBody('Modules are pretty cool.');
</script>
বা, src
বৈশিষ্ট্য সহ:
<script type="module" src="http://somedomain.com/somescript.mjs">
</script>
সহ সমস্ত স্ক্রিপ্টগুলি type="module"
স্বয়ংক্রিয়ভাবে বিশিষ্টতা দেওয়া হয় defer
। এটি তাদের পৃষ্ঠার অন্যান্য লোডিংয়ের সাথে সমান্তরালভাবে (যদি ইনলাইন না হয়) ডাউনলোড করে এবং সেগুলি ক্রমে চালায় তবে পার্সার শেষ হওয়ার পরে।
মডিউল স্ক্রিপ্টগুলি এমন async
বৈশিষ্ট্যও দেওয়া যেতে পারে যা যত তাড়াতাড়ি সম্ভব ইনলাইন মডিউল স্ক্রিপ্টগুলি সঞ্চালিত হবে, পার্সারটি না হওয়া পর্যন্ত অপেক্ষা না করা এবং অন্য async
স্ক্রিপ্টগুলির সাথে সম্পর্কিত কোনও নির্দিষ্ট ক্রমে স্ক্রিপ্টটি চালানোর জন্য অপেক্ষা না করা ।
একটি নিখুঁত দরকারী টাইমলাইন চার্ট রয়েছে যা এখানে এই নিবন্ধে মডিউল স্ক্রিপ্টগুলি সহ স্ক্রিপ্টগুলির বিভিন্ন সংমিশ্রণের সংগ্রহ এবং সম্পাদন দেখায়: জাভাস্ক্রিপ্ট মডিউল লোড হচ্ছে ।