জাভাস্ক্রিপ্ট setTimeoutএবং setInterval( অন্যান্য ) টাইমার ফাংশন দুটি (বেশিরভাগ ব্যবহৃত) হয় ) রয়েছে
এই দুটি পদ্ধতির একই স্বাক্ষর রয়েছে। তারা কল ব্যাক ফাংশন নেয় এবং প্যারামিটার হিসাবে সময় বিলম্ব করে।
setTimeoutবিলম্বের পরে কেবল একবার কার্যকর করে যেখানে setIntervalপ্রতি বিলম্ব মিলিসেকের পরে কলব্যাক ফাংশন কল করে চলে।
এই দুটি পদ্ধতিই একটি পূর্ণসংখ্যা শনাক্তকারীকে ফেরত দেয় যা টাইমার শেষ হওয়ার আগে সেগুলি সাফ করার জন্য ব্যবহার করা যেতে পারে।
clearTimeoutএবং clearIntervalএই দুটি পদ্ধতিই উপরের ফাংশনগুলি থেকে setTimeoutএবং একটি পূর্ণসংখ্যার শনাক্তকারী গ্রহণ করেsetInterval
উদাহরণ:
setTimeout
alert("before setTimeout");
setTimeout(function(){
alert("I am setTimeout");
},1000); //delay is in milliseconds
alert("after setTimeout");
আপনি যদি উপরের কোডটি চালান তবে দেখতে পাবেন এটি সতর্কতা before setTimeoutএবং তারপরে after setTimeoutঅবশেষে এটি সতর্ক করেI am setTimeout 1 সেকেন্ড (1000 মিমি) এর পরে
উদাহরণ থেকে আপনি যা লক্ষ্য করতে পারেন তা setTimeout(...)হ'ল অ্যাসিনক্রোনাস যার অর্থ এটি পরবর্তী বিবৃতিতে যাওয়ার আগে টাইমারটি বিচ্ছুরিত হওয়ার অপেক্ষা রাখে না অর্থাৎalert("after setTimeout");
উদাহরণ:
setInterval
alert("before setInterval"); //called first
var tid = setInterval(function(){
//called 5 times each time after one second
//before getting cleared by below timeout.
alert("I am setInterval");
},1000); //delay is in milliseconds
alert("after setInterval"); //called second
setTimeout(function(){
clearInterval(tid); //clear above interval after 5 seconds
},5000);
আপনি যদি উপরের কোডটি চালান তবে আপনি দেখতে পাবেন যে এটি সতর্কতা অবলম্বন করে before setIntervalএবং after setIntervalশেষ পর্যন্ত এটি I am setInterval1 সেকেন্ড (1000 মিমি) এর পরে 5 বার সতর্কতা দেয় কারণ সেটটাইমআউটটি 5 সেকেন্ডের পরে টাইমার সাফ করে দেয় বা অন্য 1 সেকেন্ডে আপনি সতর্কতা পেয়ে যাবেন I am setIntervalইনফিনিটিলি।
অভ্যন্তরীণভাবে ব্রাউজারটি কীভাবে তা করে?
আমি সংক্ষেপে ব্যাখ্যা করব।
জাভাস্ক্রিপ্টে ইভেন্টের সারি সম্পর্কে আপনার জানতে হবে তা বুঝতে। ব্রাউজারে একটি ইভেন্টের সারি প্রয়োগ করা হয়েছে। যখনই কোনও ইভেন্ট জেএসে ট্রিগার হয়ে যায় তখন এই সমস্ত ইভেন্টের (যেমন ক্লিক ইত্যাদি)) এই সারিটিতে যুক্ত করা হয়। যখন আপনার ব্রাউজারে কার্যকর করার কিছুই নেই এটি সারি থেকে একটি ইভেন্ট নেয় এবং একে একে একে কার্যকর করে।
এখন, যখন আপনি কল করেন setTimeoutবা setIntervalআপনার কলব্যাক ব্রাউজারে একটি টাইমারে নিবন্ধিত হয়ে যায় এবং নির্দিষ্ট সময়সীমা শেষ হওয়ার পরে এটি ইভেন্টের কাতারে যুক্ত হয়ে যায় এবং শেষ পর্যন্ত জাভাস্ক্রিপ্ট ক্রুটি থেকে ইভেন্টটি নিয়ে এটি কার্যকর করে।
এটি এরকম হয়, কারণ জাভাস্ক্রিপ্ট ইঞ্জিনটি একক থ্রেডযুক্ত এবং তারা একবারে কেবল একটি জিনিস কার্যকর করতে পারে। সুতরাং, তারা অন্যান্য জাভাস্ক্রিপ্ট কার্যকর করতে পারে না এবং আপনার টাইমারকে ট্র্যাক করতে পারে। এই কারণেই এই টাইমারগুলি ব্রাউজারের সাথে নিবন্ধিত হয়েছে (ব্রাউজারটি একক থ্রেডযুক্ত নয়) এবং এটি টাইমারকে ট্র্যাক রাখতে এবং টাইমার শেষ হওয়ার পরে সারিতে একটি ইভেন্ট যুক্ত করতে পারে।
একই ক্ষেত্রে ঘটবে setIntervalইভেন্টটি নির্দিষ্ট ব্যবধানের পরে এটি সাফ না হওয়া বা ব্রাউজার পৃষ্ঠা রিফ্রেশ না হওয়া পর্যন্ত পুনরায় সারিতে যুক্ত করা হবে।
বিঃদ্রঃ
আপনি এই ফাংশনগুলিতে বিলম্ব প্যারামিটারটি কলব্যাকটি কার্যকর করতে সর্বনিম্ন বিলম্বের সময়। কারণ টাইমারটির মেয়াদ শেষ হওয়ার পরে ব্রাউজারটি জাভাস্ক্রিপ্ট ইঞ্জিন দ্বারা চালিত হওয়ার জন্য কাতারে ইভেন্টটি যুক্ত করে তবে কলব্যাকের সম্পাদন আপনার সারির ইভেন্টের অবস্থানের উপর নির্ভর করে এবং ইঞ্জিনটি একক থ্রেডযুক্ত হওয়ার ফলে এটি সমস্ত ইভেন্টগুলি কার্যকর করবে because এক এক করে সারিতে।
সুতরাং, আপনার অন্যান্য কোড থ্রেডটি ব্লক করে এবং কাতারে কী আছে তা প্রক্রিয়া করার জন্য সময় না দিলে বিশেষত কল হতে নির্দিষ্ট বিলম্বের সময়ের চেয়ে বেশি সময় নিতে পারে।
এবং আমি জাভাস্ক্রিপ্ট উল্লেখ হিসাবে একক থ্রেড। সুতরাং, যদি আপনি থ্রেডটি দীর্ঘ সময়ের জন্য অবরুদ্ধ করেন।
এই কোডটি পছন্দ করুন
while(true) { //infinite loop
}
আপনার ব্যবহারকারী কোনও বার্তা পেয়ে যাবেন যা পৃষ্ঠায় সাড়া দিচ্ছে না ।
setTimeout(function(){/*YourCode*/},1000);