Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Ускорение onmousemove и редеринга (https://javascript.ru/forum/events/8375-uskorenie-onmousemove-i-rederinga.html)

Ilyan 22.03.2010 16:15

Ускорение onmousemove и редеринга
 
Делаю веб-редактор изображений
http://graphing.ru/d.php?i=none.jpg

Вот если бы кисть оставляла за собой не зернистый след, если быстро вести мышкой - цены бы ему не было. Особенно зернистость проявляется в FF.

Там суть очень простая - на страницу вешается onmousemove с функцией, которая рисует див с абсолютной позицией.

var child = document.createElement('div');
child.style.position = 'absolute';
child.style.left = x+'px';
child.style.top = y+'px';
document.getElementById('content').appendChild(child);
//и т.д.

Без особой надежды на ответ, но все же спрошу. Можно ли что-то придумать, чтобы облегчить браузеру процесс редеринга точек? Пробовал методом тыка, ожидая "а вдруг": заменить див на span, p и другие теги, создавать новый див посредством innerHTML (в последнем случае все только усугубилось).

subzey 22.03.2010 18:03

Эмм… почитайте про html 5 canvas.

Ilyan 22.03.2010 18:44

Цитата:

Сообщение от subzey (Сообщение 48622)
Эмм… почитайте про html 5 canvas.

Вектором точечные рисунки?

Kolyaj 22.03.2010 18:50

Канвас не вектор.

Ilyan 22.03.2010 18:58

Цитата:

Сообщение от Kolyaj (Сообщение 48636)
Канвас не вектор.

Я думал, для векторной графики. Тоесть закрашенные области он будет вставлять быстрее, чем браузер добавляет dom элемент?

Kolyaj 22.03.2010 18:59

Не знаю, не тестил. А как это связано?

Ilyan 22.03.2010 19:01

Связано с чем?

subzey 22.03.2010 19:52

Ilyan,
в десятки раз быстрее. Ну, и, плюс, субпиксельный рендер.

Ilyan 22.03.2010 19:59

Цитата:

Сообщение от subzey (Сообщение 48644)
Ilyan,
в десятки раз быстрее. Ну, и, плюс, субпиксельный рендер.

Спасибо, буду эксперементировать.

Ilyan 22.03.2010 21:26

Цитата:

Сообщение от subzey (Сообщение 48644)
Ilyan,
в десятки раз быстрее. Ну, и, плюс, субпиксельный рендер.

Проверил, увы, еще медленнее отрисовывает точки по onmousemove. Использвал http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm

Gvozd 22.03.2010 21:36

Цитата:

Сообщение от Ilyan
Можно ли что-то придумать, чтобы облегчить браузеру процесс редеринга точек?

а не в нем проблема-то.
выведите в консоль фаербага координаты мыши по onmousemove, не трогая DOM и будете неприятно удивлены, при быстром движении мышью.
так что единственный способ убрать зернистость-интерполировать движение мыши.
самым простым вариантом будет линейная интерполяция между двумя последними точками.
когда вам надо будет рисовать плавные линии, то тут уже что-то посложнее придется использовать, например кубические сплайны

Ilyan 22.03.2010 21:39

Цитата:

Сообщение от Gvozd (Сообщение 48668)
а не в нем проблема-то.
выведите в консоль фаербага координаты мыши по onmousemove, не трогая DOM и будете неприятно удивлены, при быстром движении мышью.
так что единственный способ убрать зернистость-интерполировать движение мыши.
самым простым вариантом будет линейная интерполяция между двумя последними точками.
когда вам надо будет рисовать плавные линии, то тут уже что-то посложнее придется использовать, например кубические сплайны

Понял, спасибо.

subzey 22.03.2010 23:40

Странно. На канвасе даже псевдо-трехмерные игры делают с приличним fps. Сотню точек в секунду на середнячковой машине он точно выдерживает. Проверьте, не тормозит ли обвертка для всего этого.

PepeL 23.03.2010 02:16

Цитата:

Использвал http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm
Это вроде не canvas.

Nekromancer 23.03.2010 11:32

cloneNode работает быстрее чем createElement

Ilyan 23.03.2010 16:49

Всем спасибо за ответы, сделал по совету Gvozd, соединением линиями. Зернистость пропала. http://graphing.ru/d.php?i=none.jpg

Осталось только с ие подружить.


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