Оптимизация скрипта
есть идеи как можно оптимизировать данный скрипт, сделал все, на что хватило моих знаний, уверен что где-то можно сделать быстрее, но вот где?
:write:
drag: function (v) {
if (M.k == 'd') {
var a= aps;
var x = M.X_pX + v.pageX;
var step = 5;
if ((x < step || parseInt(x / step) == parseFloat(x / step)) && x > -1 ){
E.css({ left: x });
if (a)
a.left.value = x;
}
var y = M.Y_pY + v.pageY;
var y_s = y / step;
if ((y < step || parseInt(y_s) == parseFloat(y_s)) && y > -1){
E.css({ top: y });
if (a)
a.top.value = y;
}
}
else{
var w = Math.max(v.pageX - M.pX + M.W, 0);
var h = Math.max(v.pageY - M.pY + M.H, 0);
E.css({ width: w, height: h});
if (aps) {
aps.width.value = w;
aps.height.value = h;
}
}return false;
}
aps - обьект с дом елементами E - jquery - обьект Событие вызывается очень часто, хотелось бы чтобы оно выполнялось еще быстрее и не заметнее... |
Цитата:
|
Чтоб быстрее - не исплльзовать jQ, а так лень разбираться.
|
сжал минификатором и выложил? что за ужасные имена переменных?
я бы постыдился такой код выкладывать. |
Цитата:
Цитата:
Я думаю в этом месте можно быстрее: if ((x < step || parseInt(x / step) == parseFloat(x / step)) && x > -1 ) Суть если кратно step, то проводить действие. Бредовое решение было) Например так: if ((x < step || x% step == 0) && x > -1 в 2 раза быстрее и прочел, что Math.max() - не самое быстрое решение. Видно моя постановка вопроса вас не заинтересовала. Спасибо за внимание:) |
if ((x < step || parseInt(x / step) == parseFloat(x / step)) && x > -1 ){
E.css({ left: x });
if (a)
a.left.value = x;
}
о, жара .. и без единого комментария .. math.max и правда verrryy sloow а еще использование jquery тоже само по себе не ускоряет процесс - функция css 80% своего времени будет объект расфасовывать, что вы ей вскормили лучше напрямую через стиль написать. ... заинтересовала. просто код ужасен. не для людей, я бы сказал :) |
и вправду погорячился выкладывать такой на суд людской :)
за гнобление jQuery спасибо, избавлюсь. на будущее исправлюсь, слишком часто мне последнее время подобные задачки выпадают. Есть такой вопросик стоит ли подобная оптимизацию делать, закешировал одну арифметическую операцию этот код: if ((y < step || parseInt(a/b) == parseFloat(a/b) в этот: var y_s = a/ b; if ((y < step || parseInt(y_s) == parseFloat(y_s) |
Подобные оптимизации Вам ничего не дадут.
Самые дорогие операции - это работа с DOM'ом. Минимизируйте их количество и почитайте о redraw / reflow и их оптимизации. |
замени parseInt хаками.
сделай в глобальную переменную, потом delete её не знаю, что за парадокс, но во всех новых браузерах, короче говоря, доступ к глобалке быстрее, чем к локалке а вообще, залазь на jsperf.com и сравнивай, сколько душе угодно :) |
Цитата:
|
| Часовой пояс GMT +3, время: 11:08. |