Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Websockets проблемы с памятью. (https://javascript.ru/forum/dom-window/26058-websockets-problemy-s-pamyatyu.html)

luxor1992 24.02.2012 00:52

Websockets проблемы с памятью.
 
Всем здравствуйте!

Вот необходимо мне для проекта использовать websockets. Реализую я доступ к ним с помощью dojo, серверный язык - php 5.3.5... apache 2.2.20

Сначала вроде бы все работает нормально. Но если подержать приложение часок другой включенным, то можно заметить, что занят большой объем оперативной памяти именно этим процессом (смотрю по монитору ресурсов). И эта память продолжает угрожающе расти.

Из-за чего это происходит и можно ли от этого как-нибудь избавиться?

Заранее спасибо!

tadjik1 24.02.2012 10:36

попробуйте оптимизировать код

Nekromancer 24.02.2012 12:21

luxor1992,
на сервере или в клиенте растёт память?

luxor1992 24.02.2012 18:19

В общем по всякому тестировал, убирал то одни, то другие куски,
выяснил, что утечка происходит на клиенте и, скорее всего, не из-за вебсокетов, точнее вебсокеты могут только ухудшать утечку, но не являться главной её причиной.

luxor1992 25.02.2012 11:17

Выяснил, что утечку вызывают вовсе не вебсокеты,
а метод updateSeries и render диаграммы, которую я обновляю "онлайн".

можете что-нибудь подсказать? Это ошибка в реализации updateSeries или моя лажа?

setInterval(function repetition() {

newData1 = 10000;

for (var i = 0; i < dataLineChart.length - 1; i++) {
dataLineChart[i] = dataLineChart[i+1];
}

dataLineChart[dataLineChart.length - 1] = newData1;

lineChart.updateSeries("Line", dataLineChart);
lineChart.render();

newData2[0] = 2000; newData2[1] = 3000; newData2[2] = 6000; newData2[3] = 10000;

for (var i = 0; i < dataLineChart.length; i++) {
dataBarChart[i] = newData2[i];
}

barChart.updateSeries("Bar", dataBarChart);
barChart.render();
}, 1);

Данные массива тестовые, не обращайте внимания.

Nekromancer 25.02.2012 13:13

luxor1992,
На интервал таймера посмотрели бы хоть. Самая явная проблема.

luxor1992 25.02.2012 13:38

Может я чего не понимаю, но причем здесь интервал? Ну пусть будет 100.
Память будет заполняться просто медленнее, но так же верно и неотвратимо.

Я поставил 1, чтобы эффект быстрее был виден. Чтобы ради тестирования не приходилось по полчаса сидеть перед монитором, чтобы наконец убедиться, что memory leak присутствует.

На других форумах/сайтах речь идет вообще о неправильной реализации render() в 1.7
например, вот здесь: http://bugs.dojotoolkit.org/ticket/14589

Nekromancer 25.02.2012 13:58

luxor1992,
Здесь нет экстрасенсов, что бы узнать, что находится в тех функциях которые могут утекать. Если вы знаете причину, можете попробовать устранить её, всем будет полезно.

luxor1992 25.02.2012 14:03

Эти функции находятся в общем доступе на оф. сайте dojo.

В общем, неважно, попробую решить проблему сам.

Но буду рад, если есть еще какие-нибудь соображения по этому поводу!


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