কম্পিউটার টিউটোরিয়াল

JavaScript-এ নির্দিষ্ট সময় পর ফাংশন রান করার পদ্ধতি (setTimeout)

আপনি যেকোনো JavaScript ফাংশনের এক্সিকিউশন বিলম্বিত করতে বিল্ট-ইন setTimeout() মেথড ব্যবহার করতে পারেন।

মান লইয়া আপনি ৩ সেকেন্ড পর একটি অ্যালার্ট ডায়লগ দেখাতে চান।

প্রথমে ৩ সেকেন্ড কে মিলিসেকেন্ড (ms) এ কনভার্ট করুন, যা ৩০০০ms, এবং তারপর ফাংশন সেট আপ করুন:

setTimeout(function() { alert("That’s 3 seconds!") }, 3000)

উপরের কোডটি একটি আনোনিমাস (নেমলেস) ফাংশন, যা বাস্তব জীবনে খুব প্র্যাক্টিক্যাল নয়, কারণ এটি শুধু একবার ব্যবহার করা যায়, এবং নন-ডেসক্রিপ্টিভ।

এখানে একই ফাংশনালিটি, কিন্তু একটি নামকরণ করা, ফাংশন এক্সপ্রেশন:-এ:

const delayThreeSeconds = function() { alert("That’s 3 seconds!") } setTimeout(delayThreeSeconds, 3000)

এখন আপনি আপনার ডिले ফাংশনটি প্রজেক্টের যেকোনো জায়গায় রিইউজ করতে পারেন delayThreeSeconds ভেরিয়েবল রেফারেন্স করে।

setTimeout ডিলে সাজেশন — প্রিসাইজ নয়

অধিকাংশ লোক জানেন না যে setTimeout-এ আপনি যে টাইম সেট করেন সেটি ন্যূনতম ফাংশন-এক্সিকিউশন ডিলে — সঠিক পরিমাণ নয় যে এক্সিকিউট হতে কতক্ষণ লাগবে।

তাই আপনি যদি ৩০০০ms (৩ সেকেন্ড) সেট করেন, আপনার ফাংশন এক্সিকিউট হতে অনেক বেশি সময় লাগতে পারে কারণ JavaScript সিঙ্ক্রোনাস, এটি একবারে এক টাস্ক রান করে।

সুতরাং যদি আপনার ওয়েবসাইটে অন্যান্য অনেক JavaScript ফাংশন টাস্ক থাকে যেগুলো আপনার setTimeout ফাংশনের আগে এক্সিকিউট হওয়ার জন্য সেট করা থাকে, তবে সেগুলো প্রথমে কমপ্লিট হতে হবে, এবং এতে কয়েক মিলিসেকেন্ড থেকে শুরু করে কয়েক সেকেন্ড পর্যন্ত লাগতে পারে।

একটি বড় ডিলে ঘটাতে পারে যদি আপনার ফাংশনগুলোর একটা এক্সটার্নাল সোর্স থেকে বড় স্ক্রিপ্ট লোড করার ওপর ডিপেন্ডেন্ট থাকে। এ ধরনের ট্র্যাপে নতুনরা বা অভিজ্ঞ ডেভেলপাররাও পড়ে যেতে পারেন।

এই সব কারণে setTimeout কিছুটা অনপ্রেডিক্টেবল, অথবা কমপক্ষে অনরিলায়েবল যদি আপনার পিন-পয়েন্ট প্রিসিশন দরকার হয়।

এই সমস্যা বড়টুকু এড়ানোর একটি সহজ উপায়

যদি আপনার প্রজেক্টে কোনো নির্দিষ্ট ফাংশন থাকে যেনা প্রিসাইজ টাইমিং ক্রিটিক্যাল, সেটি অন্য সব ফাংশনের আগে রান করার জন্য সেট করুন। এটি কমপক্ষে নিশ্চিত করবে যে আপনার সবচেয়ে গুরুত্বপূর্ণ ফাংশন যত দ্রুত সম্ভব রান করছে।

তবুও, আপনার সবচেয়ে ক্রিটিক্যাল ফাংশন যদি অন্য কোডের আগে এক্সিকিউট হওয়ার জন্য সেট করা থাকে, তবুও কিছু এক্সিকিউশন ডিলে হতে পারে।

উদাহরণস্বরূপ, যদি ইউজারের ব্রাউজারে একসাথে অনেক অ্যডঅন/এক্সটেনশন ইনস্টল করা থাকে। সেটি JavaScript-এ রান করে (অন্যান্য জিনিসের পাশাপাশি) এবং আপনার ওয়েবসাইটের কোড এক্সিকিউশনে সেটি কতটুকু বা কোনো ডিলে করবে সেটি প্রেডিক্ট করা অসম্ভব।

এই সব কারণেই পারফরম্যান্স এত গুরুত্বপূর্ণ টপিক, এবং সব ব্রাউজার ও একাধিক ডিভাইসে আপনার কোডের পারফরম্যান্স টেস্ট করা জরুরি কনসিস্টেন্ট ইউজার এক্সপেরিয়েন্সের জন্য।

জানা দরকার: আপনি আজ যা শিখলেন সেটি setInterval মেথডের ওপরও প্রযোজ্য, পার্থক্য হলো সেটি রিপিটেডলি রান করে, — setTimeout একবার রান করে।

  1. জাভাস্ক্রিপ্টে ফাংশন কনস্ট্রাক্টর দিয়ে ফাংশন আহ্বান (invoke) করা

  2. জাভাস্ক্রিপ্টে map ফাংশন ব্যবহার করে সময় নির্দিষ্ট টাইমফ্রেমে আছে কিনা যাচাই করা

  3. দুটি অ্যাসিঙ্ক্রোনাস ফাংশন সম্পূর্ণ হলে একটি ফাংশন কিভাবে চালাবেন - জাভাস্ক্রিপ্ট

  4. পাইথনে হাই-প্রিসিশন টাইম কীভাবে মাপবেন?