تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ حسین مولاپور
state.entities
مجتبی سوری حل شده توسط مجتبی سوری

با سلام

برای عملکرد اکشن حذف todo‌های کامل شده اگه به جای روش شما از این روش استفاده کنیم perfomance بالاتری نداره آیا؟

 

             Object.values(state.entities).forEach(todo => {
                 if(todo.done) {
                     delete state.entities[todo.id];
                 }
             })

در کد بالا باید دو بار حلقه زده بشه یکبار برای جداسازی value‌ها و یکبار هم برای اعمال حذف طبق آرایه جداسازی شده


            for(const todoId in state.entities) {
                if(state.entities[todoId].done) {
                    delete state.entities[todoId];
                }
            }

ولی در این کد در مجموع یک حلقه بیشتر زده نمیشه می‌خواستم ببینم برای برنامه‌های بزرگ آیا استفاده از کد پایین روی perfomance برنامه تاثیری داره؟

سلام

یکی از محاسن یا معایب JS این هست که شما یک عملیات رو میتونید به چندین روش انجام بدید. 

یک نکته مهمی رو همین اول بگم کدهایی رو که من مینویسم به هیچ عنوان وحی منزل نیست هر کجا که به نظرت دیدی روش بهتری هست حتما از روش بهتر استفاده بکن. در بعضی از کدها مثل همین مورد اگر وقت داشته باشید و کامل فکر بکنید قطعا راه حل‌های بهتری هم باشه

من شخصا توصیه میکنم تا زمانی که نیاز نشده ذهنتون رو درگیر این موارد که کدوم پرفورمنس بهتری داره نکنید. دلیلشم این هست از هر کدوم استفاده بکنید واقعا آنچان تاثیری روی performance برنامه نداره و اصلا به چشم نمیاد. تفاوت این کدها مثلا در چندهزار تا مورد شاید ملموس باشه!

 

در قالب benchmark هایی که انجام شده راه حل دوم سریعتر هست ولی در بعضی از شرایط هم دیده شده که روش اول سریع‌تر انجام شده!! در نهاییت بعصی از benchmark‌ها هم هست که میگه هر دو روش خوب نیست و بهتر از حلقه for (بدون استفاده از in) استفاده بکنید سرعت بهتری رو خواهید داشت

 

اگر این موضوع رو بخوای به صورت دقیق نرر بدی باید شرایط سنجیده بشه و خیلی از موارد میتونه اثر گذار باشه.

بهترین پاسخ
مجتبی سوری ۰۶ خرداد ۱۴۰۰، ۱۲:۴۴