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]]. Мистика Оо


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