/ / KineticJS vysoká spotreba pamäte pri odstraňovaní a pridávaní vrstiev - výkon, plátno, plátno html5, kineticjs, spotreba pamäte

Vysoká spotreba pamäte KineticJS pri odstraňovaní a pridávaní vrstiev - výkon, plátno, html5-plátno, kineticjs, spotreba pamäte

Vytváram aplikáciu, kde chcemPrehrajte pohyb niekoľkých používateľov (až 20). Každý užívateľ má zoznam pozícií X, Y (v rozsahu od 20 do 400 pozícií). Opakované prehrávanie sa pohybuje od 1 do 10 minút.

Replay je nakreslená na 8 FPS, čo je všetko, čo požadujem. V každom rámci odstránim vrstvu ukazujúcu pohyb používateľa a všetko prekreslujem až do nasledujúceho časového bodu.

Táto aplikácia využíva veľa pamäte, a ak ipri opakovanom spustení sa spotreba pamäte zvyšuje (až 8 GB). Skúsil som použiť Profiler v prehliadači Google Chrome (verzia 27) a zdá sa, že v pamäti sú nahromadené vrstvy, aj keď neustále remove() staré vrstvy.

Nasledujúci kód zobrazuje rýchly prehľad toho, čo aplikácia robí.

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

Moja otázka je, stage.removeChildren() a tiež Kinetic.Layer().remove(), neodstraňujú vrstvu z pamäte? Alebo to musím zvládnuť úplne iným spôsobom?

odpovede:

1 pre odpoveď č. 1

Áno. „Odstrániť“ sa odstraňuje z rodičovského kontajnera. Objekt však stále existuje. Namiesto toho musíte použiť „zničiť“.