|
cyber, консоль закрой когда тесты делаешь)
а еще у меня реплейсов нет, подразумевается что ВСЕ реплейсы) ну для ui это сделать дешево получается, очень дешево. вот моя функция, работает ядерно быстро function compare(oArr, arr) { var nArr = arr.slice(); var insert = [] var remove = [] for (var i = 0, index; i < oArr.length; i++) { index = nArr.indexOf(oArr[i]); if (index < 0) remove.push(i); else nArr[index] = void 0; } for (var i = 0; i < nArr.length; i++) { if (nArr[i] === void 0) continue; var index = remove.indexOf(i); if (index < 0) insert.push(i); else remove.splice(index, 1); } return { insert: insert, remove: remove } } |
Maxmaxmaximus4,
ты можешь еще компактней писать? (сарказм) Нахрена void 0; почему просто нельзя написать undefined? |
Цитата:
Цитата:
|
Maxmaxmaximus4, нет , я реально индус, у меня ошибка не в новой функции а в старой)
|
ну вот чем я думал когда писал такую проверку
search.forEach(function (elem, i) { if(elem) insert.push(i); }); |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Maxmaxmaximus4, живой пример http://code.jquery.com/jquery-1.10.2.js
|
Poznakomlus, кстати разница есть, но не особо существенная покрайней мере в хроме.
|
Цитата:
Цитата:
а есть какие-то причины этого не делать? Цитата:
|
Цитата:
|
Poznakomlus, а вот forEach нужно убрать нафиг
|
Цитата:
|
Цитата:
|
Maxmaxmaximus4, эм, с forEach в среднем на 10 милесекунд быстрее О_О
|
попробуй ты, а то я что то уже нехрена не пойму.
function compare(fArr,arr) { var search = arr.slice(), insert = [], remove = [], replace = [], leng = fArr.length; for(var i = 0, index; i < leng; i++) { if(fArr[i] === arr[i]){ search[i] = undefined; continue; } index = search.indexOf(fArr[i]); if(!~index) { remove.push(i); continue; } i != index && replace.push({old: i, new: index}); search[index] = undefined; }; for(i = 0, leng = search.length; i < leng; i++ ) { if(search[i] !== undefined) insert.push(i); }; return { remove: remove, insert: insert, replace: replace } } function compare(fArr,arr) { var search = arr.slice(), insert = [], remove = [], replace = [], leng = fArr.length; for(var i = 0, index; i < leng; i++) { if(fArr[i] === arr[i]){ search[i] = undefined; continue; } index = search.indexOf(fArr[i]); if(!~index) { remove.push(i); continue; } i != index && replace.push({old: i, new: index}); search[index] = undefined; }; search.forEach(function (elem, i) { if(elem !== undefined) insert.push(i); }); return { remove: remove, insert: insert, replace: replace } } |
cyber, да мазафака, эти оптимизации хромовские не поймешь)
у меня кстати второй цикл вот такой, я исключаю лишние перемещения которые можно заменить реплейсами for (var i = 0; i < nArr.length; i++) { if (nArr[i] === void 0) continue; var index = remove.indexOf(i); if (index < 0) insert.push(i); else remove.splice(index, 1); } |
Poznakomlus, из какого еще примера? куда перенял? ты вообще о чем? я говорю свойство длинны кэшируется и не вычисляется каждый раз, оно движком кэшируется, что непонятного?
|
Цитата:
П.с эти мудаки нормальную консоль сделали О_О |
Цитата:
Цитата:
|
Цитата:
function compare(oArr, arr) { var nArr = arr.slice(); var insert = [] var remove = [] oArr.forEach(function(val, i) { var index = nArr.indexOf(val); if (index < 0) remove.push(i); else nArr[index] = void 0; }); nArr.forEach(function(val, i) { if (val === void 0) return; var index = remove.indexOf(i); if (index < 0) insert.push(i); else remove.splice(index, 1); }); return { insert: insert, remove: remove } } |
мозила тормоз еще тот...
мозила ие хром |
cyber, чувак, ты чо не умеешь среднее арифметическое вычислять)?
|
Maxmaxmaximus4, зачем?)
Если серьезно то у меня есть функция для сравнения скорости, но мне влом что то делать уже кроме как нажимать кнопку "просмотр" |
Цитата:
по поводу форов, for быстрее function test(callback, cnt) { var time = 0; var i = 100; while (i--) { var j = cnt; var start = Date.now(); while (j--) callback(); time += Date.now() - start } return time / 100; } var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var time = test(function() { for (var i = 0; i < array.length; i++) { array[i] = array.length[i]; } }, 10000) var time2 = test(function() { array.forEach(function(val, i) { array[i] = val }) }, 10000) alert('for ' + time + 'ms'); alert('forEach ' + time2 + 'ms'); |
Maxmaxmaximus4, у меня разницы в скорости нет))
|
Цитата:
|
Цитата:
И вообще уже давно пора валить спать) |
У меня вот тут другая дилемма, я думаю как сделать анимацию появления и исчезнавения, но при том чтобы она была вся на css и при том чтобы мой скрипт после анимации удаления понмиал что анимация кончилась и удалял блок.
|
Maxmaxmaximus4,
http://learn.javascript.ru/css-anima...-transitionend |
cyber, ты не пони, человек будет писать .. короче.
если у элемента на котором нужна анимация висит атрибут animate то всё что может давать анимацию - дает ему анимацию. как? добавлением классов .fade .show .remove и.т.п. и человек у себя в css оформляет эти классы такими какими он хочет видеть состояние элемента во время этого действия. и там он может сделать чо то типа transition = 1s; короче я думаю. |
хм, есть другой вариантик ^_^, ща замутим
|
Цитата:
|
а мне норм
<script src='//mychamber.ru/build/ui.js'></script> <style> body {padding: 40px; overflow-y : scroll; -webkit-user-select : none} .list-item { border : 1px solid black; overflow : hidden; height : 20px; transition : 0.3s; background-color : #bfc7ff; } .list-item.add { height : 0; -webkit-transform : scale(1.1, 4); opacity : 0; background-color : greenyellow; } .list-item.remove { background-color : red; opacity : 0; height : 0; } .list-item.change { opacity : 0.8; background-color : #bbdeff; } </style> <div controller="Chat"> <button click="unshift()">unshift</button> <button click="shift()">shift</button> <button click="insert()">insert</button> <button click="change()">change</button> <button click="reverse()">reverse</button> <ul> <li click="remove($index)" class="list-item" repeat="item in items"> {item.text} </li> </ul> </div> <script> function Chat() { items = [ {text: '21'}, {text: '242'} ] unshift = function() { items.unshift({text: Math.random()}) } shift = function() { items.shift() } insert = function() { items.splice(2, 0, {text: 12312123}) } remove = function(index) { items.splice(index, 1) } change = function() { items[2] = {text: Math.random()} } reverse = function() { items = items.reverse() } } </script> |
осталось доделать сервис $http и пару директив запилить. и можно выпускать 1.0.0 ^_____________________^
а, ну и утечки пофиксить. |
Maxmaxmaximus4,
Не понял Цитата:
|
<script src='//mychamber.ru/build/ui.js'></script> <div controller="User"> Привет {name}, тебе {age} лет! </div> <div controller="User as user"> Привет {user.name}, тебе {user.age} лет! </div> <script> function User() { name = 'Ашот' age = 15 } </script> |
Часовой пояс GMT +3, время: 08:29. |