Temat: js-object-create-vs-new-function
Te dwa kody wklejone to akurat są na szybko napisane testy zużycia pamięci (bez użycia json,a to jest testowanie strikte "classy" vs " obiektu") . json użyje w swoim serwerze jako ze tak się wyrażę nośnik danych czyli kiedy gracz wchodzi na stronę ma wybór stworzenia gry lub dołączenia do losowej lub zagrania z znajomym . Kiedy jest full zgłoszonych użytkowników w grze, zaczyna się dana gra na początku jest inicjowana scena czyli tworzenie tablicy lokalnej w grze:
var gracze = new Int32Array(<iloscgraczy>);
a następnie przydzielenie każdemu graczowi obiektu z json (cos jako wzór)np:
otrzymam do 2 graczy takie coś:
gracz[0]=<obj_z_jsona>;
gracz[1]=<obj_z_jsona>;
//bo
gracz[0] = <obj_z_jsona>;
// to jest to samo co
gracz[0]=object.create(<obj_z_jsona>);
no i potem reszta... losowanie pięter,losowanie skrzynek ,itd a następnie jest odpalana pętla odświeżająca grę która działa właśnie cały czas na tych obiektach
Tak w skrócie działanie mojej gry :) myślę ,że korzystanie z czystego obiektu jest lepsze bo w moim przypadku wiele razy działam na obiektach graczy a zużycie ramu jest trochę większe niż w przypadku "klasy" :)Teraz mam problem z wyciekiem pamięci :/ to prawdopodobnie właśnie przez to korzystanie z metody "obiektu" . Nie wiecie jak zwolnić pamięć w node? tu próbuje nadpisać null wyciąć indexy i nic wręcz ram jest bardziej zapychany :/
var express = require('express'),
app = express(),
server = require('http').createServer(app);
server.listen(3000);
var testf =
{
d :["asd23","sdfsdf"],
s :function(f,l)
{
var o = {x:f,y:l};
}
},
ar =[];
var f =-1;
var fi = 0;
var las =0;
var sum= las-fi;
function k(){
for (var s =0; s<=100;s++)
{
f++;
if (s==0) fi = process.memoryUsage().heapUsed;
if (s==1000000) las = process.memoryUsage().heapUsed;
ar[s] = testf; //Object.create( testf);
ar[s].d[0] = s+"asd";
ar[s].s(s,s); //ar[f].y +=2;
}
console.log (fi/1000000+" "+las/1000000+ " zuzycie ramu dla "+s+" obj to "+ (las-fi)/1000000);
console.log( process.memoryUsage());
}
k();
setTimeout(function()
{
ar.splice(0,1000000); //nie oczyszcza
ar=null; //nie oczyszcza
console.log ("czyszczenie" );
console.log( process.memoryUsage());
},15000);
Dziękuje pozdrawiam Rafras :)
Ten post został edytowany przez Autora dnia 28.09.15 o godzinie 08:28