یہ سمجھنا کہ جاوا اسکرپٹ کوڈ کو کیسے چلاتا ہے: ہم وقت ساز اور غیر مطابقت پذیر پیٹرن
JavaScript ایک واحد تھریڈ والی زبان ہے، یعنی یہ ایک وقت میں کوڈ کی ایک لائن پر عمل کرتی ہے۔ یہ سمجھنا کہ یہ ہم وقت ساز اور غیر مطابقت پذیر دونوں کاموں کو کیسے ہینڈل کرتا ہے ڈویلپرز کے لیے بہت ضروری ہے۔ اکثر، اس موضوع کے بارے میں سوالات تکنیکی انٹرویوز میں ظاہر ہوتے ہیں، جس سے ان تصورات کو اچھی طرح سمجھنا ضروری ہو جاتا ہے۔
جب ڈویلپرز جیسے افعال استعمال کرتے ہیں۔ مقررہ وقت یا وعدے۔، عمل درآمد کا بہاؤ پہلے تھوڑا سا غیر متوقع لگتا ہے۔ تاہم، ایک واضح ڈھانچے کی پیروی کرکے، آپ درست ترتیب کا تعین کر سکتے ہیں جس میں آپ کے کوڈ کے مختلف حصے عمل میں آئیں گے۔ اس سے نمٹنے کے دوران یہ خاص طور پر اہم ہے۔ کال بیکس اور تقریب کی قطاریں.
اس مثال میں، ہم اس بات کو توڑیں گے کہ کس طرح جاوا اسکرپٹ مطابقت پذیر کاموں کو ہینڈل کرتا ہے۔ console.log اور متضاد آپریشن جیسے مقررہ وقت اور وعدے۔. اس وضاحت کے اختتام تک، آپ کو واضح طور پر سمجھ آجائے گی کہ JavaScript کا ایونٹ لوپ کس طرح کاموں کو ترجیح دیتا ہے اور اس پر کارروائی کرتا ہے۔
یہ مضمون JavaScript میں عمل درآمد کی ترتیب کا تعین کرنے میں آپ کی مدد کرنے کے لیے ڈیزائن کیا گیا ہے، انٹرویو کے سوالات سے نمٹنے یا غیر مطابقت پذیر کوڈ کو ڈیبگ کرنے کے دوران ایک مفید مہارت۔ آئیے تصورات کو واضح طور پر ظاہر کرنے کے لیے ایک عملی مثال میں غوطہ لگائیں۔
حکم | استعمال کی مثال |
---|---|
setTimeout() | یہ فنکشن ایک مخصوص تاخیر کے بعد کوڈ پر عمل درآمد کو شیڈول کرتا ہے۔ اس کا استعمال غیر مطابقت پذیر کاموں کی تقلید کرنے کے لیے کیا جاتا ہے، جیسے کارروائیوں میں تاخیر یا ایونٹ کے لوپ میں کارروائیوں کو موخر کرنا۔ مثال میں، یہ لاگنگ "B" اور "E" کے عمل میں تاخیر کے لیے استعمال ہوتا ہے۔ |
Promise.resolve() | ایک وعدہ بناتا ہے جو فوری طور پر حل ہوجاتا ہے۔ یہ اس وقت مفید ہے جب آپ کو غیر مطابقت پذیر کوڈ پر عمل درآمد کرنے کی ضرورت ہو لیکن کسی بیرونی حالت کا انتظار کرنے کی ضرورت نہیں ہے۔ مثال میں، اس کا استعمال "B" کے بعد متضاد طور پر "D" کو لاگ کرنے کے لیے کیا جاتا ہے۔ |
then() | یہ طریقہ ایک وعدے کے ساتھ کال بیک منسلک کرتا ہے جو وعدہ کے حل ہونے پر عمل میں لایا جائے گا۔ یہ یقینی بناتا ہے کہ غیر مطابقت پذیر کام مکمل ہونے کے بعد کچھ کوڈ چلے گا۔ یہاں، یہ یقینی بناتا ہے کہ حل شدہ وعدے کے بعد "D" لاگ کیا گیا ہے۔ |
Event Loop | ایونٹ لوپ ایک ایسا طریقہ کار ہے جو جاوا اسکرپٹ میں غیر مطابقت پذیر کاموں کے عمل کو سنبھالتا ہے۔ اگرچہ براہ راست کمانڈ نہیں ہے، اس کے فنکشن کو سمجھنا کوڈ میں کارروائیوں کی ترتیب کی وضاحت کرنے کے لیے اہم ہے۔ موجودہ اسٹیک کو صاف کرنے کے بعد یہ کال بیک قطار سے کاموں پر کارروائی کرتا ہے۔ |
Microtask Queue | حل شدہ وعدوں جیسے کاموں کے لیے یہ ترجیحی قطار ہے۔ مائیکرو ٹاسک (جیسے حل شدہ وعدے) کو ایونٹ لوپ کی ٹاسک قطار (جیسے سیٹ ٹائم آؤٹ کال بیکس) کے کاموں سے پہلے عمل میں لایا جاتا ہے۔ یہی وجہ ہے کہ "D" "E" سے پہلے لاگ کرتا ہے۔ |
Console.log() | ڈیبگنگ کے مقاصد کے لیے کنسول پر پیغامات پرنٹ کرنے کے لیے استعمال کیا جاتا ہے۔ اس تناظر میں، یہ اس ترتیب کو ٹریک کرنے میں مددگار ہے جس میں ہم وقت ساز اور غیر مطابقت پذیر کوڈ پر عمل ہوتا ہے۔ |
Callback Queue | کال بیک قطار ان کاموں کو اسٹور کرتی ہے جو موجودہ کوڈ کے عمل کے مکمل ہونے کے بعد انجام دینے کے لیے تیار ہیں، جیسے کہ سیٹ ٹائم آؤٹ کو پاس کیے گئے فنکشنز۔ ایونٹ لوپ ان کاموں کو کال اسٹیک پر لے جاتا ہے۔ |
Zero Delay | جب ایک setTimeout() تاخیر 0 پر سیٹ کی جاتی ہے، تو کال بیک تمام مطابقت پذیر کاموں اور مائیکرو ٹاسک کے مکمل ہونے کے بعد عمل میں لایا جاتا ہے۔ مثال میں، "E" کے ساتھ کال بیک "D" کے بعد چلتا ہے حالانکہ اس کی تاخیر 0 ہے۔ |
Asynchronous Execution | یہ ایک پروگرامنگ پیراڈائم ہے جہاں کچھ آپریشنز مین کوڈ فلو سے الگ چلتے ہیں، جاوا اسکرپٹ کو نیٹ ورک کی درخواستوں یا ٹائمرز جیسے کاموں کو مین تھریڈ کو بلاک کیے بغیر ہینڈل کرنے کی اجازت دیتا ہے۔ |
جاوا اسکرپٹ پر عمل درآمد کے بہاؤ کی تلاش: ہم وقت ساز بمقابلہ غیر مطابقت پذیر کوڈ
جاوا اسکرپٹ میں، ہم وقت ساز اور غیر مطابقت پذیر کوڈ کے نفاذ کے حکم کو سمجھنا ضروری ہے، خاص طور پر جب مقررہ وقت اور وعدے۔. سمجھنے کا کلیدی تصور یہ ہے کہ ایونٹ لوپ پہلے ہم وقت ساز کاموں کو کیسے پروسیس کرتا ہے اور پھر قطار میں لگے غیر مطابقت پذیر کاموں کو سنبھالنے کے لیے آگے بڑھتا ہے۔ مثال کے طور پر فراہم کردہ کوڈ میں، پہلے دو لاگز ("A" اور "F") ہم آہنگ ہیں، مطلب کہ وہ کوڈ میں ظاہر ہونے والی ترتیب کے مطابق عمل میں لایا جاتا ہے۔ جس لمحے ان پر عمل درآمد ہوتا ہے، اسکرپٹ فوری طور پر غیر مطابقت پذیر کاموں کو شیڈول کرتا ہے جیسے بعد میں پروسیسنگ کے لیے سیٹ ٹائم آؤٹ۔
سیٹ ٹائم آؤٹ فنکشن آپریشنز کو موخر کرنے کا ایک عام طریقہ ہے، جس سے عملدرآمد کے بہاؤ میں تاخیر کا احساس پیدا ہوتا ہے۔ اس صورت میں، دونوں مقررہ وقت فنکشنز کا استعمال کنسول لاگز "B" اور "E" کو ایونٹ کی قطار میں شامل کرنے کے لیے کیا جاتا ہے۔ یہ نوٹ کرنا ضروری ہے کہ اگرچہ "E" میں 0 ملی سیکنڈ کی تاخیر ہے، لیکن یہ موجودہ مطابقت پذیر کارروائیوں اور مائیکرو ٹاسکس مکمل ہونے کے بعد بھی قطار میں کھڑا ہے۔ مزید پیچیدہ JavaScript کاموں کے لیے عمل درآمد کے آرڈر کا تعین کرنے کے لیے اس لطیف فرق کو سمجھنا بہت ضروری ہے۔
پہلے کے اندر مقررہ وقت کال بیک، لاگ "B" پہلے پرنٹ کیا جاتا ہے کیونکہ یہ اب بھی ہم وقت ساز ٹاسک قطار کا حصہ ہے، جو ترجیح لیتا ہے۔ پھر، اس کال بیک کے اندر، ایک حل شدہ وعدہ کے ساتھ بنایا جاتا ہے۔ وعدہ۔ حل. یہ ایک مائیکرو ٹاسک کو متحرک کرتا ہے جو یقینی بناتا ہے کہ لاگ "D" "B" کے بعد ہوتا ہے لیکن اہم ایونٹ کی قطار میں کسی دوسرے کام سے پہلے۔ مائیکرو ٹاسک قطار میں رکھے جانے والے وعدوں کا یہ رویہ وہی ہے جو "D" کو دوسرے سیٹ ٹائم آؤٹ کال بیک لاگ "E" سے پہلے لاگ ان ہونے کی اجازت دیتا ہے۔ اس طرح، مائیکرو ٹاسک معیاری غیر مطابقت پذیر کاموں پر ترجیح دیتے ہیں۔
حتمی عمل درآمد کے آرڈر کا خلاصہ کرنے کے لیے: "A" اور "F" کو ہم آہنگی کے ساتھ لاگ کیا جاتا ہے، اس کے بعد "B"، جو پہلے سیٹ ٹائم آؤٹ کے ذریعے قطار میں ہوتا ہے۔ حل شدہ وعدہ "D" کو مائکرو ٹاسک کے طور پر اگلا لاگ کرنے کا سبب بنتا ہے۔ آخر میں، "E" کو آخری لاگ کیا گیا ہے کیونکہ یہ دوسرے کا حصہ ہے۔ مقررہ وقت کال بیک انٹرویو کے سوالات کے جوابات دیتے وقت یا حقیقی زندگی کے پروجیکٹس میں غیر مطابقت پذیر کوڈ کو ڈیبگ کرتے وقت جاوا اسکرپٹ کے عمل درآمد کے بہاؤ کی یہ سمجھ، مطابقت پذیر کاموں، ایونٹ لوپ اور مائیکرو ٹاسک کو یکجا کرنا انمول ہے۔
مختلف منظرناموں میں جاوا اسکرپٹ کے ہم وقت ساز اور غیر مطابقت پذیر عمل کو سمجھنا
یہ اسکرپٹ جاوا اسکرپٹ کے ایونٹ لوپ میکانزم کو ہم وقت ساز اور غیر مطابقت پذیر کارروائیوں کے مرکب کا استعمال کرتے ہوئے ظاہر کرتا ہے۔
console.log("A");
setTimeout(() => {
console.log("B");
Promise.resolve("C").then(() => console.log("D"));
}, 1000);
setTimeout(() => console.log("E"), 0);
console.log("F");
جاوا اسکرپٹ کے عمل کا تجزیہ کرنا: ایونٹ لوپ پر فوکس
یہ مثال پچھلے ایک پر بنتی ہے، یہ ظاہر کرتی ہے کہ ایونٹ لوپ مختلف ٹائمنگ منظرناموں میں قطار میں لگے کاموں کو کیسے پروسیس کرتا ہے۔
console.log("Start");
setTimeout(() => {
console.log("Middle");
}, 500);
Promise.resolve().then(() => {
console.log("Promise 1");
});
console.log("End");
JavaScript کے ایونٹ لوپ اور ٹاسک کی ترجیحات میں گہرا غوطہ لگائیں۔
جاوا اسکرپٹ کے غیر مطابقت پذیر سلوک کا ایک اہم پہلو ہے۔ ایونٹ لوپ، جو کال بیکس، وعدوں اور دیگر غیر مطابقت پذیر کوڈ کے عمل کو سنبھالنے کے لیے ذمہ دار ہے۔ یہ ایونٹ لوپ مسلسل چیک کرتا ہے کہ آیا کال اسٹیک خالی ہے، اور اگر یہ ہے، تو یہ کال بیک کیو اور مائیکرو ٹاسک قطار سے کاموں کو پروسیس کرتا ہے۔ یہ سمجھنا کہ ان قطاروں میں کاموں کو کس طرح ترجیح دی جاتی ہے اس بات کو یقینی بنانے کے لیے ضروری ہے کہ کوڈ توقع کے مطابق برتاؤ کرے، خاص طور پر جب ہینڈلنگ مقررہ وقت اور ایک ساتھ وعدے.
مائیکرو ٹاسک قطار کال بیک قطار پر فوقیت رکھتی ہے۔ جیسے کام وعدے کی قراردادیں مائیکرو ٹاسک قطار میں رکھے جاتے ہیں، یعنی کال بیک قطار سے کسی بھی تاخیر سے کام کرنے سے پہلے ان پر عمل درآمد ہو جاتا ہے، چاہے سیٹ ٹائم آؤٹ میں صفر کی تاخیر ہو۔ یہی وجہ ہے کہ کوڈ کی مثال میں، وعدے سے لاگ "D" کو دوسرے سیٹ ٹائم آؤٹ سے لاگ "E" سے پہلے عمل میں لایا جاتا ہے۔ کوڈ لکھتے وقت ڈویلپرز کے لیے اس کو سمجھنا بہت ضروری ہے جو غیر متوقع رویے سے بچنے کے لیے غیر مطابقت پذیر کارروائیوں کو ملا دیتا ہے۔
حقیقی دنیا کی ایپلی کیشنز میں، غیر مطابقت پذیر آپریشنز جیسے API کالز یا ٹائمر اکثر مطابقت پذیر کوڈ کے ساتھ تعامل کرتے ہیں۔ یہ جان کر کہ ایونٹ لوپ، کال بیک قطار، اور مائیکرو ٹاسک قطار کیسے کام کرتی ہے، ڈویلپر اپنے کوڈ کے نتائج کی بہتر پیش گوئی کر سکتے ہیں۔ یہ خاص طور پر اہم ہے جب کارکردگی کو بہتر بنانا یا پیچیدہ اسکرپٹس کو ڈیبگ کرنا جہاں دونوں غیر مطابقت پذیر آپریشنز اور ہم وقت ساز کوڈ اکثر تعامل کرتے ہیں۔
جاوا اسکرپٹ ایگزیکیوشن آرڈر پر اکثر پوچھے گئے سوالات
- جاوا اسکرپٹ میں ایونٹ لوپ کیا ہے؟
- ایونٹ لوپ وہ طریقہ کار ہے جسے جاوا اسکرپٹ غیر مطابقت پذیر کارروائیوں کے عمل کو منظم کرنے اور ترجیح دینے کے لیے استعمال کرتا ہے، جیسا کہ setTimeout یا Promises.
- کیسے کرتا ہے setTimeout کام
- setTimeout ایک مخصوص تاخیر کے بعد ایک کال بیک کو انجام دینے کے لیے شیڈول کرتا ہے، لیکن اسے کال بیک قطار میں رکھا جاتا ہے اور تمام مطابقت پذیر کوڈ اور مائیکرو ٹاسک پر کارروائی کے بعد ہی اس پر عمل درآمد کیا جاتا ہے۔
- کیوں کرتا ہے a Promise a سے پہلے حل کریں۔ setTimeout 0 کی تاخیر کے ساتھ؟
- وعدوں کو مائیکرو ٹاسک قطار میں رکھا جاتا ہے، جس کی ترجیح کال بیک قطار پر زیادہ ہوتی ہے، جہاں setTimeout کال بیکس رکھے گئے ہیں۔
- کال بیک قطار اور مائکرو ٹاسک قطار میں کیا فرق ہے؟
- کال بیک قطار کے لیے استعمال کیا جاتا ہے۔ setTimeout اور دیگر غیر مطابقت پذیر آپریشنز، جبکہ مائکرو ٹاسک قطار جیسے کاموں کو سنبھالتی ہے۔ Promise قراردادیں اور کال بیکس سے پہلے ان پر کارروائی کرتا ہے۔
- پھانسی کا حکم کس کے لیے ہے؟ console.log فراہم کردہ مثال میں بیانات؟
- ترتیب "A"، "F"، "B" "D" "E" ہے، جس طرح سے ہم وقت ساز اور غیر مطابقت پذیر کاموں کو ایونٹ لوپ کے ذریعے ہینڈل کیا جاتا ہے۔
جاوا اسکرپٹ کے ایگزیکیوشن ماڈل کو لپیٹنا
کس طرح مہارت حاصل کرنے کے لیے جاوا اسکرپٹ کے ایونٹ لوپ کو سمجھنا اہم ہے۔ متضاد جیسے آپریشنز مقررہ وقت اور وعدے۔ پھانسی دی جاتی ہیں. یہ ڈویلپرز کو اس بات کو یقینی بنانے میں مدد کرتا ہے کہ ان کا کوڈ توقع کے مطابق برتاؤ کرے اور متعدد کاموں کو سنبھالتے وقت عام خرابیوں سے بچ سکے۔
اس مثال میں، "A"، "F"، "B"، "D" اور "E" کا حتمی عمل درآمد کا حکم یہ بتاتا ہے کہ کس طرح مائیکرو ٹاسکس (وعدے) سیٹ ٹائم آؤٹ سے کال بیکس پر ترجیح دیتے ہیں۔ یہ علم انٹرویو کے سوالات اور حقیقی زندگی کے کوڈنگ چیلنجوں کے لیے انمول ہے۔
جاوا اسکرپٹ ایگزیکیوشن آرڈر کے حوالے اور ذرائع
- JavaScript میں ایونٹ لوپ اور ٹاسک کی ترجیح کے تصورات کی وضاحت کرتا ہے۔ MDN ویب دستاویزات - ایونٹ لوپ
- کے رویے پر بحث کرتا ہے۔ وعدے۔ اور مقررہ وقت غیر مطابقت پذیر جاوا اسکرپٹ کوڈ کے نفاذ میں۔ جاوا اسکرپٹ کی معلومات - مائیکرو ٹاسک قطار
- جاوا اسکرپٹ کی مثالوں کا استعمال کرتے ہوئے ہم وقت ساز اور غیر مطابقت پذیر کاموں کے لیے عمل درآمد کی ترتیب کی وضاحت کرتا ہے۔ freeCodeCamp - جاوا اسکرپٹ کے وعدوں کو سمجھنا