Тормозит рисовалка на canvas
Прошу помощи! Ситуация следующая: есть довольно простенькая игрушка раскраска изображения, реализованная на canvas. Она работает, но с течением времени, тормоза становятся всё жёстче.
Дело в том, что пользователь красит не цветом, а текстурой, причём текстура размером в само изображение. Я понимаю, что данный подход видимо и создаёт сильную нагрузку на canvas, но для реализации это было необходимо. Я не очень силён в работе с канвасом. Есть ли способ как-то снизить нагрузку на canvas? Может как-то можно скажем избавляться от нижних слоёв? Я надеюсь, здесь можно выложить ссылку на пример. Показываю с бесплатного хостинга - access denied Заранее, благодарю всех оказавших желание помочь. |
Вложений: 1
На странице слишком много обработчиков событий 50 000 это очень много и чем дольше работает скрипт тем больше обработчиков добовляется
canvas.addEventListener("click", function(event) ..... Срочно читать документацию по «.addEventListener» |
Спасибо большое, за помощь! Я заметил, что многие ненужные вещи у меня загноны в цикл отрисовки и отрабатывают лишнее разы. Таймер, установленный на сайте отрабатывал 10 раз в секунду, его я замедлил до секунды. Есть вещи которые работают на Jquery, а можно было их сделать на CSS - полагаю, что это тоже немного снизит нагрузку на события. Займусь этим в ближайшее время.
Но само собой, самое узкое место, это вызов функции отрисовки при перемещении мыши. Т.е. оно может вызываться вплодь до 2-3 тыс. раз в секунду и с этим уж, видимо, ничего не поделать, только изменить принцип отрисовки, избавившись от событий на перемещение мыши. |
Похоже ты не понял главного
canvas.addEventListener("click", function(event) ... каждый раз когда вызывается функция addEventListener она добавляет еще один обработчики на это событие старые уже добавленные обработчики так же остаются и выполняются т.е. получается ситуация когда на одно движение мышки выполняются 50 000 обработчиков движения мышки вместо одного обработчика. |
Т.е. нужно использовать removeEventListener после отработки события?
canvas.addEventListener('click', function(e){ ... canvas.removeEventListener('click', listener, false); }, false); |
Хотя, нет. Фаер баг пишет, мол нет такого события. Мда похоже не по тем урокам я учился.
Вообще, тормоза больше не ощущаются совсем. Я просто переделал еще функцию отрисовки. У кого то на этом форуме был хороший пример, я взял его за основу (там в событии только координаты мыши были и true/false для функции отрисовки). Так что, мне вообщем, не совсем понятно, проблема осталась или нет. |
Часовой пояс GMT +3, время: 16:09. |