Сообщение от cyber
|
kobezzza, хотел спросить насчет реализации forEach, по сути этот метод только перебирает массивы и только по числовым индексам (без использования Object.keys или for in), почему он тогда медленнее подобной реализации (в хроме критически медленне) и что может не так быть в этой реализации?
function each(callback, context) {
var leng = this.length;
for(var i = 0; i < leng; i++) {
if(context)
callback.call(context, this[i], i, this);
else
callback(this[i], i, this);
}
}
|
Если я правильно тебя понял, то ты спрашиваешь, почему Array.prototype.forEach медленнее твоей реализации?
На самом деле нельзя сказать точно: медленнее или нет, т.к. в некоторых случаях JIT VM может эффективно скомпилить тот или иной код, а иногда нет. Лучше всех на данный момент с такими оптимизациями справляется ИЕ11.
Но в большинстве случаев падение скорости в нативных методах связано с тем, что стандартные массивы в JS - это на самом деле не массивы, а просто сахар над хешом.
https://github.com/kobezzza/Collecti...aster/profiler
Но на самом деле forEach не то место, где нужно смотреть, т.к. он быстрый сейчас везде. Большая разница в производительности на всяких выборках (всякие map, filter и т.д.).