KineticJS потребляет много памяти при удалении и добавлении слоев

Я создаю приложение, в котором хочу воспроизвести движение нескольких пользователей (до 20). У каждого пользователя есть список позиций X,Y (от 20 до 400 позиций). Повтор колеблется от 1 до 10 минут.

Повтор отрисовывается со скоростью 8 кадров в секунду, и это все, что мне нужно. В каждом кадре я удаляю слой, показывающий движение пользователя, и перерисовываю все до следующего момента времени.

Это приложение использует много памяти, и если я повторно запускаю повтор, потребление памяти продолжает увеличиваться (до 8 ГБ). Я попытался использовать Profiler в Google Chrome (версия 27), и кажется, что в памяти есть накопление слоев, хотя я постоянно remove() старые слои.

В следующем коде показан быстрый макет того, что делает приложение.

function draw()
{
    stage.removeChildren();

    var userLayer = new Kinetic.Layer();

    /*
    iterate all data and create lines to signify the movement of a user,
    and add it to userLayer
    */

    stage.add(userLayer);
}

setInterval(draw, 125); // 8 FPS

У меня вопрос, stage.removeChildren() а также Kinetic.Layer().remove() они слой из памяти не удаляют? Или мне нужно обрабатывать это совершенно по-другому?


person Jan    schedule 06.05.2013    source источник


Ответы (1)


Да. «Удалить» удаляет из родительского контейнера. Но объект все еще существует. Вместо этого вы должны использовать «уничтожить».

person lavrton    schedule 06.05.2013