Javascript knockoutjs:afterrender导致了巨大的减速

Javascript knockoutjs:afterrender导致了巨大的减速,javascript,jquery,knockout.js,jquery-ui-sortable,Javascript,Jquery,Knockout.js,Jquery Ui Sortable,我在knockoutjs foreach上的afterrender上启动了一些代码。它运行的对象很大(>1000个元素),我只想知道渲染何时完成 现在我正在使用找到的解决方案 但是它非常昂贵,并且会将页面挂起直到完成 afterRender处理程序是: ivm.renderHandler = function(elements, data) { if (elements[1].parentNode.children.length === ko.toJS(ivm.classList).le

我在knockoutjs foreach上的afterrender上启动了一些代码。它运行的对象很大(>1000个元素),我只想知道渲染何时完成

现在我正在使用找到的解决方案

但是它非常昂贵,并且会将页面挂起直到完成

afterRender处理程序是:

ivm.renderHandler = function(elements, data) {
    if (elements[1].parentNode.children.length === ko.toJS(ivm.classList).length) {
        console.log("loaded");
        $("#sortable").sortable({
            revert: true
        });
        $(elements[1].parentNode).children().draggable({
            connectToSortable: "#sortable",
            helper: "clone",
            revert: "invalid"
        });

我很确定问题出在if()语句上,但我找不到任何加速的方法。

假设
ivm.classList
是一个可观察的数组,调用
ko.toJS
是相当昂贵的,因为它会对视图模型进行深度复制和展开。如果您只需要可观察阵列的长度,则可以轻松访问:

if (elements[1].parentNode.children.length === ivm.classList().length) {

赢家我知道我错过了一些明显的东西。谢谢