|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.03.2014, 09:57 | #1 |
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
Один таймер vs много таймеров - дайте совет
Здраствуйте.
Встала такая задача: Есть большой массив объектов, которые следует отобразить на canvas. Объекты постоянно движутся с разной скоростью. Отображать буду с помощью requestAnimationFrame(), вызывая метод draw(), который будет брать текущие координаты объекта и по каким-то правилам его рисовать в данных координатах. Возникла задача менять координаты всех объектов с наименьшими проблемами с перфомансом. Первая идея была такая: Ну, окей есть у нас объект. Он движется. Запускаем таймер, который раз в n миллисикунд меняет кординаты Код HTML:
setInterval(move, n) Проблема в том, что объектов может быть много, например, 200. И изменение координат некоторых объектов должно происходить быстро. В итоге получаю 200 таймеров, которые раз, с кажем, 20 миллисекунд производят расчеты. Возникла другая идея. Сделать один глобальный таймер, который обнавляется, скажем, раз в 5 миллисекунд. И у каждого объекта раз в эти 5 миллисекунд высчитывать новые координаты на основе скорости этого объекта. Оправдывает ли себя такой подход или же больщой разницы с перформансом не будет?
No name. Just Linel.
Последний раз редактировалось Linel; 30.03.2014 в 09:59. |
30.03.2014, 11:12 | #2 |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
Вот начал с верной мысли, а дальше что-то намудрил)
requestAnimationFrame() это и есть таймер, зачем тебе другие? Тебе лишь нужно будет отслеживать тайм-штамп и в зависимости от задержки отображения высчитывать все нужные координаты для каждого отдельно взятого движущегося объекта. Обычная инкапсуляция. Однако обычный холст может тормозить со всей этой радостью. Возможно стоит глянуть в сторону webGL.
Alar, верни репу!
|
30.03.2014, 11:39 | #3 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,547
|
Очень сомневаюсь, что такой интервал сработает.
E-Mail: arigato.freelance@gmail.com
|
31.03.2014, 00:36 | #4 |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
тока проверял, минималка на моей машине в хроме получилась 2мс...именно тауймаут, однако при этом страница ничем загружена не была...
Alar, верни репу!
|
31.03.2014, 00:50 | #5 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,547
|
То есть если в такой таймер поставить команду tick++, то через 10 секунд tick==5000?
E-Mail: arigato.freelance@gmail.com
|
31.03.2014, 05:04 | #6 | |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
Цитата:
То есть если ты запустил таймер, скажем с алертом таймштампа на 5мс, а после него закинул вычисление факториала от 1000, то асинхронный код подождет своей очереди. Бонус: Код:
Попробуй этот код на простой странице, типа этого форума и на тяжкой, типа примеров webGL.
Alar, верни репу!
|
|
31.03.2014, 05:17 | #7 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,547
|
Я спрашивал не про загруженность, а на пустой странице даст он тебе tick==5000 или нет? И если нет, то на сколько он будет меньше.
E-Mail: arigato.freelance@gmail.com
|
31.03.2014, 08:00 | #8 | |
Форумчанин
Регистрация: 15.02.2012
Сообщений: 821
|
Цитата:
У себя проверил код - давало 495 (для 2 сек) и около 2470 (для 10 сек) на странице ya.ru. Код:
^-.-^ My GitHub
Последний раз редактировалось Fenex; 31.03.2014 в 08:10. |
|
31.03.2014, 11:40 | #9 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,547
|
Вот такой код, тестирую на пустой странице:
Код:
Firefox: 2002 - 392 - 6 Opera: 2000 - 409 - 5 Chrome: 2001 - 412 - 5 Safari: 2002 - 410 - 5 Maxthon: 2001 - 416 - 5 Нигде интервал 2 не получается. E-Mail: arigato.freelance@gmail.com
Последний раз редактировалось Arigato; 31.03.2014 в 12:05. |
31.03.2014, 17:43 | #10 | |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
У меня мб просто комп мощнее)
Цитата:
Какая версия?
Alar, верни репу!
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дайте совет | digital-stream | HTML и CSS | 3 | 09.07.2012 11:59 |
дайте совет! | Cassius | Общие вопросы Delphi | 6 | 10.12.2011 02:43 |
Дайте совет | Михаил70 | Свободное общение | 17 | 14.09.2009 20:52 |
Дайте совет! | Arch100 | Помощь студентам | 2 | 11.10.2008 01:40 |