state.entities

پرسیده شده
فعالیت 1087 روز پیش
دیده شده 334 بار
0

با سلام

برای عملکرد اکشن حذف 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 برنامه تاثیری داره؟

فایل پیوست

حسین مولاپور
حسین مولاپور

6 خرداد 00

1
حذف شده

سلام

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

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

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

 

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

 

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

فایل پیوست

مجتبی سوری

توسط

مجتبی سوری

6 خرداد 00