Utrzymuję otwarty Process Explorer i sprawdzam kolumnę "Private Bytes" procesu firefox.exe. Po naciśnięciu przycisku „Dodaj” w tym przykładzie:Knockout.js zużywa zbyt dużo pamięci
<script id="tmplComment" type="text/x-jquery-tmpl">
<div>
<span>Comment: </span>
<span data-bind="text: $data"></span>
</div>
</script>
<input type="button" id="btnAdd" value="Add"/>
<div id="Content" data-bind="template: {name: 'tmplComment', foreach: Comments}">
</div>
Z tym kodem:
var vm = {Comments: ko.observableArray(["a", "b"])};
ko.applyBindings(vm);
$("#btnAdd").click(function()
{
for(var i = 0; i<500; i++)
vm.Comments.push(i.toString());
});
(patrz również this jsfiddle)
doświadczam, że prywatne bajty podjęte przez Firefox wzrosła o 50-100 MB.
Czas realizacji jest również dość długo, gdy porównać go do implementacji brakuje śledzenia zależności, biorąc pod uwagę ten przykład:
<script id="tmplComment" type="text/x-jquery-tmpl">
<div>
<span>Comment: </span>
<span data-bind="text: $data"></span>
</div>
</script>
<input type="button" id="btnAdd" value="Add"/>
<div id="Content" data-bind="template: {name: 'tmplComment', foreach: Comments}">
</div>
Z tym kodem:
var vm = {Comments: ko.observableArray(["a", "b"])};
ko.applyBindings(vm);
$("#btnAdd").click(function()
{
for(var i = 0; i<500; i++)
vm.Comments.push(i.toString());
});
(patrz również this jsfiddle)
Moje pytanie: Czy słaba wydajność wynika z używania Knockout.js lub czy robię coś nie tak?
To jest miły wgląd, ale niestety nie pomaga problem z pamięcią. Miły blog BTW! – kahoon
Mam nadzieję, że w pewnym momencie zajrzę w to samo. Pomaga jednak pamięci, jeśli przesuniesz wiele elementów w sposób pokazany powyżej, a nie jeden po drugim. –