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ť“.