Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: для новичков > Таймеры и уничтожение объектов. |
Автор: PsiMagistr 26.3.2019, 15:08 | ||
Ребята, как JS уничтожает свои объекты? Я создал класс и одно из полей является тикающим таймером. Сразу после создания объекта этот таймер начинает тикать в нем. Дотикивает до нужного мне значения и очищается clearTimeout. Сами же мои объекты создаются через другой таймер в программе.
Не будет ли утечек памяти при этом? Не останутся ли висеть мертвые объекты? |
Автор: ksnk 26.3.2019, 16:24 |
PsiMagistr, В приведенном коде нет переменных, и нечему утекать. Добавлено через 2 минуты и 59 секунд setTimeout - функция, которая тикнет не более одного раза. До тех пор, пока она не сработает - ответственная за функцию setEgg область видимости не будет удалена. Также не будут удалены все ее собственные переменные |
Автор: PsiMagistr 26.3.2019, 17:21 | ||
Спасибо. Вод полный код описания объекта. (класса) Там рекурсивный вызов сеттаймаут.
Сам объект рождается в другом месте кода. Тоже через таймер. Каждую секунду новый объект. Моя программа работает, но я волнуюсь насчет утечек. |
Автор: ksnk 26.3.2019, 17:42 |
Утечки памяти, обычно. ловятся не просмотром кода, а профайлером. https://developer.chrome.com/devtools/docs/heap-profiling - вот так, например |
Автор: PsiMagistr 27.3.2019, 10:44 | ||
Спасибо большое. Если б я еще в этом понимал. ( |
Автор: ksnk 27.3.2019, 11:37 |
https://habr.com/ru/post/309318/ Вот - то же, но расшифровано и по русски. В гуглопоиске тоже нужно разбираться ;) |
Автор: PsiMagistr 27.3.2019, 12:33 |
Это я читал. Спасибо большое. У меня в хроме даже профилировщик совсем по др. выглядит. Кстати никому код "Ну погоди" не нужен? Чистый джс, только что сделал. https://nupogodi.000webhostapp.com/ |
Автор: ksnk 28.3.2019, 18:04 |
Кнопку Старт и Пауза нужно визуально отделить от игровых кнопок. Так они путаются с игровыми кнопками - если играть мышкой - мешает ![]() Ну и в оригинальной игре ускорялись яйца со временем, или их гуще становилось - а тут, вроде нет такого. А так, конечно забавно https://www.youtube.com/watch?v=vGfAsXQ3FuI - вот примерно так выглядел оригинал если скопировать именно такое расположение кнопок и добавить звук - будет больше ностальгирующих ;) |
Автор: _zorn_ 28.3.2019, 20:01 |
И иголкой "время настраивать" )) |
Автор: PsiMagistr 29.3.2019, 13:50 | ||
Спасибо, друзья. Да я ускорение не делал... Яйца с интервалом в 2 сек спавнятся. Ребят, а если одну большую спрайт карту сделать это побыстрее будет, чем загруз 25 отдельных изображений? |
Автор: ksnk 29.3.2019, 15:17 |
Обычно делают одну картинку со всеми спрайтами и показывают их бякграундом со смещением. Получается стартовая загрузка страницы чуть быстрее. Хотя на быстродействии игры не скажется. |
Автор: PsiMagistr 29.3.2019, 15:43 | ||
Спасибо большое... А то я эти спрайты три дня резал... ). Звуки добавил. Но, блин, хостинг не грузит - 404 и все по барабану ему. Видать ограничение какое-то. Дома звук идет нормально. |
Автор: PsiMagistr 29.3.2019, 16:37 | ||||
Я хотел бы уяснить одну тонкость, если можно:
Какой из двух таймеров сработает раньше, если они оба настроены на одинаковый отрезок времени? Или сработает по ходу кода - сначала первый (4 строка), потом второй (11 строка)? Как JS разруливает подобное? Спасибо большое. |
Автор: ksnk 29.3.2019, 16:53 |
PsiMagistr, Звук нужно вставлять тегом audio. Вероятнее всего их потребуется несколько, клик времени и разбитые-пойманные яйца. У тега на JS есть возможность порулить проигрыванием. Сами теги можно и скрыть, но общая кнопка отключения-включения музыки должна быть. Таймеры - вещь непредсказуемая, зависящая от реализации и броузера. Скорее всего, они сработают первый раз в том же порядке как написано, а вот последующие разы уже как получится поставить. Лучше не увлекаться слишком большим количеством таймеров на странице |
Автор: PsiMagistr 29.3.2019, 17:05 | ||||
Я попробовал без тега через прямое создание объекта.
Дома такое работает, хост отвечает при загрузке аудио 404й ошибкой. Пути верные. Насчет таймеров расстроился. У меня игра на таймерах. Внутри каждого яйца вшит таймер + таймер который порождает сами яйца. Я думал они всегда по ходу кода срабатывают.. Но вроде пока работает. setInterval не использую. Использую рекурсивно вызываемый setTimeout. |
Автор: PsiMagistr 10.4.2019, 13:20 |
Изменен алгоритм игры "Ну погоди". Добавлено автоматическое изменение скорости падения яиц. https://nupogodi.000webhostapp.com/ |
Автор: PsiMagistr 10.4.2019, 16:25 |
Была глубокая переработка. Игра стала однотаймерной. Дорогостоящая функция splice в алгоритме удаления элемента из массива заменена. Исправлена критическая ошибка из-за которой ресурсы игры могли не загружаться. |
Автор: PsiMagistr 12.4.2019, 13:46 |
Зацените! https://nupogodi.000webhostapp.com/ Управление - A - влево вверх. Z - влево вниз, H - вправо вверх, B - вправо вниз, Esc - пауза. Пробел - старт новой игры. Соберите 500 золотых яиц и останьтесь в живых. Не берите коричневые. Красные яйца позволяют немного подлечиться. Каждое упущенное золотое яйцо и взятое коричневое ведет к потере жизней. |
Автор: PsiMagistr 16.4.2019, 14:01 |
Решена проблема со звуковоспроизведленитем. Звук воспроизводится в браузерах последних версий, имеющих поддержку формата mp3 |
Автор: PsiMagistr 16.4.2019, 14:01 |
Решена проблема со звуковоспроизведленитем. Звук воспроизводится в браузерах последних версий, имеющих поддержку формата mp3 |
Автор: ОльгаБетецкая 2.5.2019, 10:02 |
Обратитесь к профессионалу, у меня были аналогичные проблемы. Я обратилась к мастеру по созданию и продвижению сайтов Сергею Малахову. Он создал: - Уникальный дизайн - Систему управления СМС - Наполнение контентом - Адаптивную верстку - И сделал мне подарок — 1 год хостинга и домен в подарок. Подробнее о его услугах Вы можете посмотреть на сайте https://malakhov.site/ |