3

Я использую knockout.repeat сделать динамический массив столбцов со следующими данными:Нокаут с массивами, динамические столбцы

var columns = ko.observableArray([ 
    new Column(1), 
    new Column(2), 
    new Column(3), 
    new Column(4), 
    new Column(5) 
}); 

var array = ko.observableArray([1..95]); 

данных назначается следующим образом с отображением выбывание:

mappingConfig = { 
    create: function (options) { 
     return new Row(options.data); 
    } 
}; 
ko.mapping.fromJS(data, mappingCOnfig, array); 

следующим образом:

<div data-bind="repeat: {foreach: array, item: '$row'}"> 
     <div data-bind="repeat: {foreach: column, item: '$col'}"> 
      <input data-bind="value: $row()[$col().Name]"/> 
     </div> 
    </div> 

проблема у меня в том, что она занимает почти 30 секунд для рендеринга 95 строк с 6 столбцами.

  • Как устранить неисправность?
  • Есть ли какие-нибудь инструменты?
  • Есть ли какие-либо направляющие, как максимизировать производительность в аналогичных сценариях?

Chrome сроки: enter image description here

UPDATE: Я был под давлением, так что я переписал таблицы в reactjs, которые решаются много вопросов и рендеринга лишь 1,5 сек.

+0

Какой браузер вы используете? –

+0

@ RoyJ Работа с 'Chrome 43.0.2357.81 m' – skmasq

+1

Я помню, что я столкнулся с такой проблемой. Для ~ 1500 строк данных потребовалось несколько минут, чтобы добавить/удалить наборы строк. Я не помню, что я сделал, чтобы облегчить его, но он думает, что в конечном итоге сводилось к тому, что вам нужно было свести к минимуму время, потраченное на создание элементов dom. Много времени было потрачено на GC, который убил его. В моем случае многие элементы dom воссоздавались, потому что объекты данных, которые я привязывал к ним, постоянно перестраивались с нуля. Также обновления должны выполняться в одной партии, не обновляясь отдельно. –

ответ

-1

Вы можете использовать инструменты разработчика Chrome для устранения неполадок, в частности Profiles, Network и Timeline в вашем случае.

Пожалуйста, включите JSFiddle с воспроизведением, и вам будет легче использовать эту проблему.

+2

Подробнее о профилировании в Chrome: http://www.smashingmagazine.com/2012/06/12/javascript-profiling-chrome -developer-tools/ –

+0

Я действительно не уверен, где искать и что искать - см. обновленную запись с временной шкалой. – skmasq

Смежные вопросы