জাভাস্ক্রিপ্ট সিংগেল-থ্রেডেড এনভায়রনমেন্টে চলার জন্য ডিজাইন করা হয়েছে, অর্থাৎ একাধিক স্ক্রিপ্ট একসাথে চলতে পারে না। এমন পরিস্থিতি কল্পনা করুন যেখানে আপনাকে UI ইভেন্ট হ্যান্ডেল করতে হচ্ছে, বড় পরিমাণ API ডেটা কোয়েরি ও প্রসেস করতে হচ্ছে, এবং DOM ম্যানিপুলেট করতে হচ্ছে।
CPU ইউটিলাইজেশন বেশি থাকলে জাভাস্ক্রিপ্ট ব্রাউজার হ্যাং করে দেবে। একটি সিম্পল উদাহরণ যেখানে জাভাস্ক্রিপ্ট বড় লুপ চালাচ্ছে:
<!DOCTYPE HTML>
<html>
<head>
<title>Big for loop</title>
<script>
function bigLoop(){
for (var i = 0; i <= 10000; i += 1){
var j = i;
}
alert("Completed " + j + " iterations");
}
function sayHello(){
alert("Hello sir....");
}
</script>
</head>
<body>
<input type="button" onclick="bigLoop();" value="Big Loop" />
<input type="button" onclick="sayHello();" value="Say Hello" />
</body>
</html>
"Big Loop" বাটনে ক্লিক করলে নিচের ছবির মতো হয়:
উপরোক্ত সমস্যাটি Web Workers দিয়ে সমাধান করা যায়, যারা কমপিউটেশনালি ব্যয়বহুল টাস্ক আলাদা থ্রেডে চালিয়ে UI-কে ইন্টারাপ্ট করবে না।