2014-11-16 3 views
1

Я хочу, чтобы профиль observableArray в KnockoutJS, чтобы увидеть, как долго это займет, чтобы заполнить и отобразить observableArray в HTML.Профилирование KnockoutJS observableArray

Я планировал использовать старый школьный метод, как показано ниже. Являются ли результаты, которые я получу от этого, будут точными? Или есть лучший способ сделать это Профилирование

JavaScript

var arr = [], 
     itemCount = 200; 

    for (var i = 0; i < itemCount; i++) { 
     arr.push('item ' + i); 
    } 

    var t1 = new Date(); 
    var viewModel = { 
     items: ko.observableArray(arr), 
     vmName: ko.observable('View Model') 
    }; 

    ko.applyBindings(viewModel); 
    var t2 = new Date(); 


    console.log(t2 - t1); //Shows the time in milliseconds 

HTML

<div data-bind="foreach: items"> 
    <div data-bind="html: $data"></div> 
</div> 

Graph Я генерируемый из результатов

enter image description here

+0

Возможный дубликат http://stackoverflow.com/questions/16520823/knockout-js-is-too-slow-in-filling-observablearray – Dnyanesh

ответ

1

Как подсказывает ваш график , это в основном правильный путь сделать это. Это связано с тем, что ko.applyBindings является синхронным вызовом. См. Здесь: is ko.applyBindings synchronous or asynchronous?

Я бы сделал небольшую ревизию, так, потому что вам не интересно профилировать время, необходимое для создания наблюдаемых. Однако на этот раз это довольно незначительно и добавит только крошечный, если вообще есть, постоянный к профилированию.

var viewModel = { 
    items: ko.observableArray(arr), 
    vmName: ko.observable('View Model') 
}; 

var t1 = new Date(); 
ko.applyBindings(viewModel); 
var t2 = new Date(); 


console.log(t2 - t1); //Shows the time in milliseconds 
+0

это хорошая практика для профилирования с использованием даты сравнения? – Nipuna

+0

тот другой вопрос. :) Если мой вопрос был полезен для вас, пожалуйста, не забудьте перенести и пометить его как принятый –

+1

@Nips на некоторых браузерах, 'console' предлагает гораздо больше, чем просто' .log'. Взгляните на ['.time',' timeLine', 'timeStamp' или даже' .profile'] (https://developer.chrome.com/devtools/docs/console-api#consoletimelabel). – janfoeh