Tworzę aplikację tam, gdzie chcęodtworzyć ruch kilku użytkowników (do 20). Każdy użytkownik ma listę pozycji X, Y (od 20 do 400 pozycji). Powtórka trwa od 1 do 10 minut.
Powtórka odbywa się przy 8 FPS, co jest wszystkim, czego potrzebuję. W każdej klatce usuwam warstwę pokazującą ruch użytkownika i przerysowuję wszystko do następnego momentu.
Ta aplikacja zużywa dużo pamięci, a jeśli japonownie uruchom powtórkę, zużycie pamięci stale rośnie (do 8 GB). Próbowałem użyć Profilera w Google Chrome (wersja 27) i wydaje się, że w pamięci jest nagromadzenie warstw, mimo że ciągle remove()
stare warstwy.
Poniższy kod pokazuje szybki przykład działania aplikacji.
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
Moje pytanie brzmi, stage.removeChildren()
i również Kinetic.Layer().remove()
, czy nie usuwają warstwy z pamięci? Czy też muszę sobie z tym poradzić w zupełnie inny sposób?
Odpowiedzi:
1 dla odpowiedzi № 1Tak. „Usuń” usuwa z kontenera nadrzędnego. Ale obiekt wciąż istnieje. Zamiast tego musisz użyć „zniszcz”.