|
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:48. |