Javascript 击倒表现
如何一次将所有值添加到Javascript 击倒表现,javascript,performance,knockout.js,Javascript,Performance,Knockout.js,如何一次将所有值添加到observableArray?在我的例子中,在循环中添加值的速度非常慢。下面是一个JSFIDLE示例。 由于您正在清除整个可观察阵列,因此实现此目的的一种方法是: var viewModel = { name: "base", addingValue:new ko.observable(), someArr: new ko.observableArray(["123","432","sdafasd","xrere"]), add: f
observableArray
?在我的例子中,在循环中添加值的速度非常慢。下面是一个JSFIDLE示例。
由于您正在清除整个可观察阵列,因此实现此目的的一种方法是:
var viewModel = {
name: "base",
addingValue:new ko.observable(),
someArr: new ko.observableArray(["123","432","sdafasd","xrere"]),
add: function()
{
this.someArr.push(this.addingValue());
},
updateSomeArr:function()
{
var temp = [];
for(var i=0;i<5;i++)
{
temp.push("555565");
}
this.someArr(temp);
}
}
var viewModel={
名称:“基地”,
addingValue:new ko.observable(),
新的ko.observableArray([“123”、“432”、“sdafasd”、“xrere”),
添加:函数()
{
this.someArr.push(this.addingValue());
},
updateSomeArr:function()
{
var-temp=[];
对于(var i=0;i已经有一个选定的答案,但我认为以下内容会有所帮助。您可以通过执行可观察数组来禁用观察行为,以获得底层数组实现:
var underlyingArray = viewModel.someArr();
然后,您可以将项目添加到underyingarray
,而无需触发someArr
事件。添加项目后,请调用:
viewModel.someArr.valueHasMutated();
这将导致触发事件,通知依赖于viewModel.someArr()的所有可观察对象
就是这样关于向阵列性能问题添加项目,我有一个注意事项,您应该使用array\u name[array\u name.length-1]=您的项目;此行比push方法快。我想是的,请参阅本文,很抱歉我弄错了它的array\u name[array\u name.length]=你的项目这一个可能很有用也没问题。还有一种方法可以“关闭”观察行为,更新模型,然后重新打开--但我似乎找不到它的页面。使用array\u name[array\u name.length-1]=项目;比推送更快method@JamesD'Angelo:我发现方法ko.utils.unwrapobbservable,但找不到方法“打开”observable Behavior我会继续寻找代码示例。如果我找到了,我会将其添加到我的答案中。仍然不明白为什么最优雅和正确的答案被否决:)。如果您能给出解释,我将不胜感激。这确实是将所有项同时推送到一个数组的最佳方法。下面是一篇关于其用法的帖子@Akshat谢谢!在连续两次对我的答案投反对票后,我开始认为没有读过它的人会真正尝试学习javascript:)。再次感谢。这绝对是最好的方法。谢谢!已经阅读了整个链接文章(array.push!=array.push.apply)我只能说@AGS确实是正确的,并在文章的JSFIDLE中进行了说明。
var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);