|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.08.2016, 21:09 | #1 |
Пользователь
Регистрация: 04.04.2011
Сообщений: 63
|
Помогите найти утечку памяти
Здравствуйте. Есть страница обновляемая по таймеру раз в секунду, на странице таблица, в каждой строке понадобилось сделать выпадающее меню, нашёл в сети скрипт менюшки (сам я не кодил на JS до этого) всё бы хорошо, да каждую секунду браузер сжирает по 100-200кб оперативы, медленно но верно, соответственно через какое то время начинает жутко тормозить, налицо явная утечка памяти.
Код:
P.S. Что касается остановки и запуска таймера, это я уже дописал, что бы останавливать таймер на время показа меню, иначе оно просто закрывалось при обновлении таблицы) Последний раз редактировалось Adult_Master; 08.08.2016 в 21:17. |
08.08.2016, 22:53 | #2 |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
Ну ты ведь не весь код показал. Здесь есть вещи, которые могли бы вызвать незначительные проблемы + версия jQ старая вроде как, вроде до 1.7 где-то (в новых версиях юзают метод .off() для анбайнда события).
В теле таймере скорей всего трабла, а его как раз нет. UPD еще работа с dom через innerHTML относительно затратна, в этом тоже может копаться проблема.
Alar, верни репу!
|
08.08.2016, 23:04 | #3 |
Пользователь
Регистрация: 04.04.2011
Сообщений: 63
|
Код:
autorefresh - это чекбокс на странице, позволяющий отключать автообновление. В localStorage сохраняю его состояние, что бы при переходе на другую страницу и возврате на эту его состояние сохранялось. Ещё раз повторюсь, весь код собирал сам по кускам и примерам из и-нета, с JS до этого не работал ни разу. Дальше идёт код заполнения таблицы с помощью foreach, если нужно могу и его выложить, но я пробовал вовсе убирать таблицу - утечки есть. Т.е. дело явно не в таблице. Версия JS - jquery-3.1.0.min.js Последний раз редактировалось Adult_Master; 08.08.2016 в 23:09. |
08.08.2016, 23:20 | #4 |
Пользователь
Регистрация: 04.04.2011
Сообщений: 63
|
Пока постил ответ самому пришла идея:
вот на этой странице я вызываю $(document).ready(function(), насколько я понял это событие окончательной загрузки страницы, в нем запускается таймер, по которому в блок подгружается вторая страница с таблицей, дело в том что в ней тоже есть событие $(document).ready(function(), может просто при каждой сработке таймера таймер пересоздаётся заново, а т.к. переменная var timer; глобальная она и не высвобождается после отработки функции reloadTimer ? P.S. В других ЯП я и сам стараюсь избегать глобальных переменных, но тут не придумал ничего лучше что бы управлять таймером из других функций. Последний раз редактировалось Adult_Master; 08.08.2016 в 23:24. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите найти утечку | garuna | Общие вопросы Delphi | 4 | 14.01.2016 05:56 |
Задача-найти объем оперативной памяти по шестнадцатеричному адресу последнего байта оперативной памяти | Ksana Alex | Помощь студентам | 4 | 14.11.2013 15:51 |
Задача - найти объём памяти, который требуется для хранения изображения | Александр95 | Помощь студентам | 5 | 13.10.2011 20:17 |
Найти и исправить ошибку. (Ссылки, указатели, утечка памяти) С,С++ | ZanLeO | Общие вопросы C/C++ | 8 | 09.08.2010 13:00 |