0

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

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

Это приложение использует много памяти, и если я повторно запускаю повтор, потребление памяти увеличивается (до 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(), они не удалить слой из памяти? Или мне нужно справиться с этим совершенно по-другому?

ответ

1

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