انسپلاش پر کرس لیورانی کی تصویر

ڈیبونس بمقابلہ تھروٹل بمقابلہ قطار پھانسی

ہمارے پاس انٹرنیٹ پر بہت سارے مضامین موجود ہیں جن کی وضاحت کرتی ہے کہ ڈیبینسنگ ، تھروٹلنگ کیا ہے اور ان میں کیا فرق ہے۔ لیکن میں نے اکثر پایا ، لمبا ، مبہم اور پیچیدہ کوڈ مثالوں (اگر کوئی ہے) کے ساتھ تھا۔

لہذا میں ان کے لئے آسان کام کرنے والے کوڈ کی مثال کے ساتھ سامنے آیا ہوں تاکہ یہ تصور ایک لمحے میں حاصل کر سکے۔ آسان سے شروع کریں ، ڈیبونس۔

ڈیبون کرنا

کسی فنکشن کو ڈیبٹ کرنے کا کام اس وقت آتا ہے جب اسے مستقل طور پر بلایا جارہا ہے اور ہم چاہتے ہیں کہ اگر آخری کال کے بعد وقت گزر گیا تو کسی خاص مدت کے بعد اس پر عمل درآمد کروائیں۔

یہ ان معاملات میں کارگر ثابت ہوتا ہے جہاں ہم کارکردگی کو بہتر بنانے کے لئے ہینڈلر کو فون کرنے سے پہلے صورتحال کو مستحکم کرنا چاہتے ہیں۔ مجھے ملنے والی ڈیبونس کی ایک بہترین مثال جیہی ٹامپکنز کے اس بلاگ میں تھی

ڈیبون کرنے کے ل we ، ہمارے پاس اپنی درخواست میں خود سے کچھ بچت کی خصوصیت موجود ہوگی۔ ایپلی کیشن پر آٹو سیونگ کی مدد سے جب بھی صارف اپ ڈیٹ کرتا ہے یا اس میں کوئی تعامل ہوتا ہے ہر بار ہماری درخواست کی حالت کو بچانے کی کوشش کرتا ہے۔ ریاست کو بچانے سے پہلے یہ یقینی بنانا 5 سیکنڈ انتظار کرتا ہے کہ کوئی اور اپ ڈیٹ یا بات چیت نہیں کی گئی ہے بصورت دیگر یہ نئی ریاست کو ریکارڈ کرتی ہے اور اس عمل کو دہراتی ہے۔ اگر کوئی تعامل ہوتا ہے تو وہ اپنے ٹائمر کو دوبارہ 5 سیکنڈ کے لئے دوبارہ مرتب کرتا ہے۔

فنکشن آغاز (فنک ، ویٹ ٹائم) {
    ویر ٹائم آؤٹ؛

    واپسی تقریب () {
        کلیئر ٹائم آؤٹ (ٹائم آؤٹ)؛
        ٹائم آؤٹ = سیٹ ٹائم آؤٹ (فنک ، ویٹ ٹائم)؛
    }؛
}؛

اس پر چلتا ہے ، یہ کہ کتنا آسان آغاز ہوسکتا ہے۔

گلا گھونٹنا

اس تکنیک کا زیادہ مناسب نام لیا گیا ہے۔ جب کسی فنکشن کو مستقل طور پر بلایا جارہا ہو تو اس کے بارے میں گفتگو کرنا فائدہ مند ہوتا ہے اور ہم چاہتے ہیں کہ ہر ایکس سیکنڈ میں ایک بار اس پر عمل درآمد کیا جائے۔ اس کی ایک عمدہ مثال اسکرول ہینڈلر یا ریزائز ہینڈلر ہوگی ، جہاں ہم ہینڈلر کو ایک مقررہ مدت میں ایک بار پھانسی دینا چاہتے ہیں یہاں تک کہ اگر فنکشن کو مسلسل بلایا جارہا ہو۔

فنکشن تھروٹل (فنک ، ویٹ ٹائم) {
    var ٹائم آؤٹ = null؛
    var پچھلے = 0؛

    ور بعد = فنکشن () {
        گزشتہ = تاریخ.نو ()؛
        ٹائم آؤٹ = null؛
        فنک ()؛
    }؛

    واپسی تقریب () {
        var now = تاریخ.نو ()؛
        var बाकी = ویٹ ٹائم - (اب - پچھلا)؛
        اگر (باقی <= 0 || باقی> انتظار وقت) {
            اگر (ٹائم آؤٹ) {
                کلیئر ٹائم آؤٹ (ٹائم آؤٹ)؛
            }
            بعد میں ()؛
        } دوسری صورت میں اگر (! ٹائم آؤٹ) {// منسوخ ٹائم آؤٹ -> کوئی عمل درآمد نہیں
            
            ٹائم آؤٹ = سیٹ ٹائم آؤٹ (بعد میں ، باقی)؛
        }
    }؛
}؛

اضافی: قطار میں کھڑا ہونا

لانچ اور تھروٹل کی طرح ، فنکشن کالز کی قطار بھی لگائی جاسکتی ہے۔ اس میں اس فنکشن کو جس وقت کہا جاتا ہے اس پر عملدرآمد کیا جاتا ہے لیکن ہر عمل سے پہلے انتظار کا ایک مقررہ وقت ہوتا ہے۔ یہ میرے لئے حال ہی میں اس وقت کام آیا جب میں ایک لائبریری استعمال کررہا تھا اور ایک مسئلے کی طرف راغب ہوا جس میں متعدد بار بغیر کسی تاخیر کے مسئلے کا سبب بن رہا تھا۔ (استعمال کے دوسرے معاملات بھی ہوسکتے ہیں :))

فنکشن قطار (فنک ، ویٹ ٹائم) {
    var funcQueue = []؛
    var isWaiting؛

    var executeFunc = فنکشن (پیرام) {
        isWaiting = true؛
        فنک (پیرام)؛
        سیٹ ٹائم آؤٹ (پلے ، ویٹ ٹائم)؛
    }؛

    var play = فنکشن () {
        isWaiting = غلط؛
        اگر (funcQueue.length) {
            var پیرامس = funcQueue.shift ()؛
            اجراءفنک (پیرام)؛
        }
    }؛

    واپسی کی تقریب (پیرامیوں) {
        اگر (انتظار ہے) {
            funcQueue.push (params)؛
        } دوسری {
            اجراءفنک (پیرام)؛
        }
    }
}؛

نتیجہ اخذ کرنا

اس سے پہلے کہ آپ اصلاح کی تکنیک کا فیصلہ کریں ، ایک قدم پیچھے ہٹیں اور سوچیں کہ کون سا اس معاملے کا بہترین نتیجہ پیش کرے گا۔ ہمیشہ ایسا ہی ہوتا ہے جو زیادہ پرفارمنس ہوگا۔

براہ کرم بلا جھجھک کوئی جواب دیں یا کوئی سوالات یا تجاویز کے ساتھ مجھے ٹویٹ کریں۔