Тема: Collection v4
Показать сообщение отдельно
  #36 (permalink)  
Старый 07.02.2014, 18:39
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от 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 - это на самом деле не массивы, а просто сахар над хешом.

Сообщение от cyber Посмотреть сообщение
сделал тест ради интереса http://jsperf.com/each-test-speed
https://github.com/kobezzza/Collecti...aster/profiler

Но на самом деле forEach не то место, где нужно смотреть, т.к. он быстрый сейчас везде. Большая разница в производительности на всяких выборках (всякие map, filter и т.д.).
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 07.02.2014 в 18:43.
Ответить с цитированием