Оптимизация скрипта
есть идеи как можно оптимизировать данный скрипт, сделал все, на что хватило моих знаний, уверен что где-то можно сделать быстрее, но вот где?
: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, время: 00:39. |