JavaScript-ում զանգվածների իտերացիայի կատարողականություն
JavaScript-ում զանգվածների իտերացիայի կատարողականություն — Ո՞ր մեթոդն է ամենաարագը
JavaScript-ում զանգվածների վրա իտերացիայի (կրկնության) տարբեր եղանակներ կան։ Բայց երբ ունենք մեծ տվյալների զանգվածներ կամ performance-ին զգայուն հավելված, ճիշտ մեթոդի ընտրությունը կարող է լուրջ տարբերություն տալ։
Այս հոդվածում համեմատելու ենք ամենահայտնի մեթոդները՝ իրենց արագությամբ, ընթեռնելիությամբ և օգտագործման նպատակով։
Մեթոդ | Նկարագրություն |
for | Դասական for loop |
while | Սովորական while ցիկլ |
for...of | ES6-ից՝ iterable-ների վրա |
forEach | Array մեթոդ, callback-ով |
map | Նոր զանգված վերադարձնելու համար |
reduce | Արժեքի կուտակման համար |
for...in | Աշխատում է ինդեքսների վրա (փոխարենը զանգվածի վրա չի առաջարկվում) |
const arr = Array.from({ length: 1_000_000 }, (_, i) => i); console.time('for'); for (let i = 0; i < arr.length; i++) { arr[i] * 2; } console.timeEnd('for'); console.time('for-of'); for (const num of arr) { num * 2; } console.timeEnd('for-of'); console.time('forEach'); arr.forEach(num => num * 2); console.timeEnd('forEach'); console.time('map'); arr.map(num => num * 2); console.timeEnd('map');
Բոլորն անում են նույն գործողությունը՝ բազմապատկում են 2-ով։ Մենք չափում ենք միայն կատարման ժամանակը։
Մեթոդ | Արագություն | Պարզ սինտաքս |
for | 🏆 Ամենաարագ | Բարձր |
while | Շատ արագ | Միջին |
for...of | Միջին | Բարձր |
forEach | Դանդաղ | Բարձր |
map | Դանդաղ | Բարձր |
reduce | Ամենադանդաղներից | Միջին |
for...in | ❌ Վատ է զանգվածների համար | Միջին |
Դասական for ցիկլը ունի ամենացածր աբստրակցիան, և JavaScript engine-ները (ինչպես V8-ը Chrome-ում) այն լավագույնս օպտիմալացնում են։ Բացի այդ, այն չի օգտագործում callback, ինչը նվազեցնում է ֆունկցիայի կանչերի բեռը։
Ցանկություն | Օգտագործիր |
Ամենաարագ կատարում | for կամ while |
Մաքուր և ընթեռնելի կոդ | map, forEach |
Կուտակում արժեքի մեջ | reduce |
Դինամիկ break/continue | for, for...of |
ԴFunctional ոճ | map, filter, reduce |
await array.forEach(async (item) => { await something(item); // ❌ async չի աշխատի as expected });
Օգտագործիր for...of async/await-ի դեպքում.
for (const item of array) { await something(item); // ✅ async OK }
Երբ աշխատում ես մեծ զանգվածների հետ կամ performance-ը կարևոր է, օգտագործիր for կամ while։ Բայց եթե readability-ն առաջնային է, և տվյալների քանակը քիչ է՝ օգտվիր map, forEach, կամ reduce-ից։ Իսկ եթե performance-sensitive հավելված ես գրում (օրինակ՝ խաղ, վիզուալիզացիա կամ real-time dashboard), միշտ benchmark արա տարբերակները։