Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Оптимизация скрипта (https://javascript.ru/forum/misc/18935-optimizaciya-skripta.html)

ejik 20.07.2011 18:18

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

monolithed 20.07.2011 18:54

Цитата:

Сообщение от ejik
Событие вызывается очень часто, хотелось бы чтобы оно выполнялось еще быстрее и не заметнее..

что значит не заметней?

Aetae 20.07.2011 23:03

Чтоб быстрее - не исплльзовать jQ, а так лень разбираться.

melky 21.07.2011 08:59

сжал минификатором и выложил? что за ужасные имена переменных?

я бы постыдился такой код выкладывать.

ejik 21.07.2011 12:39

Цитата:

Сообщение от monolithed (Сообщение 114473)
что значит не заметней?

Когда функция выполняется секунду - две, провисание гуи очень заметно...

Цитата:

я бы постыдился такой код выкладывать.
Смысл то что закрывается под переменными с странными названиями или не важен или очевиден, как по мне. Видимо вы со мной не согласны, и скорее всего правы)

Я думаю в этом месте можно быстрее:
if ((x < step || parseInt(x / step) == parseFloat(x / step)) && x > -1 )

Суть если кратно step, то проводить действие. Бредовое решение было)
Например так:
if ((x < step || x% step == 0) && x > -1

в 2 раза быстрее

и прочел, что Math.max() - не самое быстрое решение.

Видно моя постановка вопроса вас не заинтересовала. Спасибо за внимание:)

melky 21.07.2011 17:23

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% своего времени будет объект расфасовывать, что вы ей вскормили

лучше напрямую через стиль написать.

...
заинтересовала. просто код ужасен. не для людей, я бы сказал :)

ejik 21.07.2011 19:03

и вправду погорячился выкладывать такой на суд людской :)

за гнобление jQuery спасибо, избавлюсь.

на будущее исправлюсь, слишком часто мне последнее время подобные задачки выпадают.

Есть такой вопросик стоит ли подобная оптимизацию делать, закешировал одну арифметическую операцию
этот код:
if ((y < step || parseInt(a/b) == parseFloat(a/b)

в этот:
var y_s = a/ b;
if ((y < step || parseInt(y_s) == parseFloat(y_s)

B@rmaley.e><e 21.07.2011 20:43

Подобные оптимизации Вам ничего не дадут.
Самые дорогие операции - это работа с DOM'ом. Минимизируйте их количество и почитайте о redraw / reflow и их оптимизации.

melky 21.07.2011 21:02

замени parseInt хаками.

сделай в глобальную переменную, потом delete её

не знаю, что за парадокс, но во всех новых браузерах, короче говоря, доступ к глобалке быстрее, чем к локалке

а вообще, залазь на jsperf.com и сравнивай, сколько душе угодно :)

kobezzza 21.07.2011 21:52

Цитата:

доступ к глобалке быстрее, чем к локалке
Оо как так, ведь для доступа к глобалке нужно лезть во внешний [[scope]]. Мистика Оо

melky 22.07.2011 00:20

Цитата:

Сообщение от kobezzza (Сообщение 114708)
Оо как так, ведь для доступа к глобалке нужно лезть во внешний [[scope]]. Мистика Оо

а вот так. :) я уже создавал тему, где спрашивал, почему так.

и все учебники твердят, что в глобали медленней. фиг там.

дать пруф?

Kolyaj 22.07.2011 10:10

Цитата:

Сообщение от melky
сделай в глобальную переменную, потом delete её

Переменные не удаляются.

Цитата:

Сообщение от melky
доступ к глобалке быстрее, чем к локалке

Не надо оптимизировать то, что не тормозит. Не надо оптимизировать то, что не тормозит. Не надо оптимизировать то, что не тормозит. Не надо оптимизировать то, что не тормозит. Не надо оптимизировать то, что не тормозит.

Нафига уродовать код ради мифического ускорения?

kobezzza 22.07.2011 23:06

Цитата:

Сообщение от melky (Сообщение 114759)
дать пруф?

Дай, интересно посмотреть:)

melky 22.07.2011 23:32

http://jsperf.com/global-vs-local

^_^

я сейчас неправ.

но буквально два месяца назад мерял - было так.


Часовой пояс GMT +3, время: 21:22.