да ну нафиг, это уже явное читерство
Цитата:
Да ну быть такого не может, ладно сделаю нормальные тесты когда будет время... |
Цитата:
Вот пример такого цикла: Collection._tmpCycle["1,false,false,true,el > 1,,,,,false,false,false,true,false,true,false,false,false,false"] = function anonymous(data, length, fLength, callback, aFilter, filter, id) { var i = -1, j = 0, el, key, aProto = []; var cloneObj, aLength, dLength = data.length - 1; cloneObj = data; aLength = cloneObj.length; for (i = -1; ++i < aLength;) { key = i; el = cloneObj[i]; if (el > 1) { callback(el); } } }; Можно заметить, что в callback передаётся всего один параметр, не передаётся this и не проверяется return false, т.к. в исходном callback этого ничего и нет, а фильтр вообще был проинлайнен (el > 1), отсюда и профит. Сам цикл также написан в читерной форме: for (i = -1; ++i < aLength;) { |
kobezzza, я кажеться начал понимать как у тебя работает.
Ты создаешь функцию, с 2мя вариантами обработки массива и потом ее кешируешь, live я так понял это "живые" коллекции? if (live) { iFn += 'for (i = -1; ++i < cloneObj.length;) {'; } else { iFn += 'aLength = cloneObj.length;' + 'for (i = -1; ++i < aLength;) {'; } но я всеравно не пойму почему этот вариант который используешь ты, быстрее чем var leng = arr.length; while(leng--) { callback(context, arr[leng], leng, arr); } |
Цитата:
Только вариантов обработки может быть очень много и зависит это от входных параметров и типа данных. live значит без кеширования начальной длины для массивов: https://github.com/kobezzza/Collection#opt_live Цитата:
context, arr[leng], leng, arr, а у меня только когда надо. |
Цитата:
|
Цитата:
|
тьфу блин, у меня ошибка в коде была, теперь все норм
Цитата:
var leng = arr.length; while(leng--) { callback(arr[leng], leng, arr); } |
Цитата:
|
Цитата:
Посмотри сколько параметров поддерживает у меня forEach https://github.com/kobezzza/Collecti...%D 0%BE%D0%B2 В цикле будут только те проверки, которые нужны. В callback передаются только те параметры, которые в ней юзаются (чем больше параметров передаётся, тем ниже скорость). Фильтры могут инлайнится: т.е. тело функции подставляется в цикл, т.е. без вызова функции и т.д. |
Цитата:
|
Выпустил версию 4.2.0. Теперь для методов add и addOrSet по умолчанию создаётся контекст в случае если он не задан, отключить это поведение можно с помощью параметра create = false.
var a = {}; $C(a).add(10, {name: 'foo', context: 'base > bar'}); a.base.bar.foo // 10 // *** var b = {}; $C(b).add(10, {name: 'foo', context: 'base > bar', create: false}); // error: bar is not defined |
Часовой пояс GMT +3, время: 06:13. |