Knockout Observable Array - 推送元素冻结Firefox和IE11中的UI

时间:2018-02-09 08:10:02

标签: knockout.js

我有一个使用 Knockout 3.4 和其他库(inversifyJS,knockout.validation,axios,jQuery)的Web应用程序。

从昨天开始,我在尝试使用axios和knockout可观察数组填充异步选择列表时遇到了巨大的性能问题。

这是简化的jsfiddle,它显示了我正在做的事情:

https://jsfiddle.net/m2r9Ljb2/3/

// Constructor for an object with two properties
var Country = function(name, population) {
  this.email = name;
  this.countryPopulation = population;
};

var viewModel = {
  availableCountries : ko.observableArray([]),
  selectedCountry : ko.observable() // Nothing selected by default
};
ko.applyBindings(viewModel);

$.getJSON('https://jsonplaceholder.typicode.com/comments', function( data ) {
    ko.utils.arrayPushAll(viewModel.availableCountries, data);
})

如果我在jsfiddle中运行此代码,它的执行速度非常快。 如果我将此代码插入到我的应用程序中,则在IE11和Firefox中再次响应UI之前需要6秒钟。

似乎没有任何帮助,我也不知道自己能做些什么。 我试过"限速"和#34;延期更新"但没有任何改变。

有人知道问题是什么吗?有什么我可以做的调试问题?为什么它在jsfiddle中表现不同?

1 个答案:

答案 0 :(得分:0)

除非您要添加数组,否则为什么不尝试

 viewModel.availableCountries(data);

 ko.utils.arrayPushAll(viewModel.availableCountries(),data); 
 viewModel.availableCountries.valueHasMutated();