Mantengo Process Explorer abierto e inspecciono la columna "Bytes privados" del proceso firefox.exe. Después de pulsar el botón "Añadir" en este ejemplo:Knockout.js consume demasiada memoria
<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>
Con este código:
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());
});
(también ver this jsfiddle)
experimento que los bytes privados tomadas por Firefox ha aumentado alrededor 50-100 MByte.
El tiempo de ejecución es también bastante largo cuando lo comparo con implementaciones que carecen de dependencias, teniendo en cuenta este ejemplo:
<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>
Con este código:
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());
});
(también ver this jsfiddle)
Mi pregunta: ¿El rendimiento es inherente al utilizar Knockout.js o estoy haciendo algo mal?
Esta es una buena idea, pero desafortunadamente no ayuda con el problema de memoria. ¡Buen blog por cierto! – kahoon
Espero ver esto yo mismo en algún momento. Sin embargo, ayuda con la memoria si empujas varios elementos de la manera que mostré arriba en lugar de uno por uno. –