javascript – Knockout.js非常缓慢地预告

我正在尝试使用模板创建一个简单的标记.就像是:
<div class="list" data-bind="template: {name: 'mytemplate',data: someData}"></div>

<script id="mytemplate">
  <div class="item" data-bind="text: someText"></div>
</script>

它工作得非常好,但是如果我需要使用这个模板渲染很多div,它将变得非常慢.创建每个div后的Knockout将其添加到文档中.但是,如果我做这样的事情:

el = document.createElement("div");
applyBindings(myModel,el);

(div.list).innerHTML = el.innerHTML

它工作得更快但不方便.

也许Knockout有一些内置的功能来创建一组元素,然后将该组添加到文档中?

解决方法

听起来KO正在使用您添加的每个DIV操作DOM. DOM遍历很昂贵,会降低页面的渲染速度.在KO Github: https://github.com/SteveSanderson/knockout/issues/248下有一个未解决的问题

在我看来,Knockout目前还没有完成处理大型foreach数据集的任务. Chrome上的性能不错(因为Chrome非常棒),但在Internet Explorer上却非常糟糕(在旧的IE上更糟糕):http://jsfiddle.net/StarcounterJack/FgSCw/

尝试手动方法而不是使用Knockout:首先在内存中创建DIV并将它们一次性插入DOM.这是你在document.createElement()的第二个例子中所做的.使用jQuery,你可以这样做:

var newDiv = $("<div>my new div</div>");
var newDiv2 = $("<div>my new div2</div>");
newDiv.append(newDiv2);
$('body').append(newDiv); //only this last step traverses the DOM

对于模板,我更喜欢使用Mustache.js,使用John Resig的< head>< script type =“text / templates”>加载模板. template inclusion trick并通过我自己的JavaScript手动处理渲染.您可以更好地控制元素的呈现方式,并在遇到类似现在的性能问题时尝试不同的方法.

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ &quot;TOC&quot; 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...