我的 JQuery 脚本进行了大量的 DOM 操作,在 Chrome 中运行顺畅(预期),在 Safari 中运行良好,在 Firefox 中运行良好。
让我们谈谈互联网浏览器...
当我运行一个执行一些 DOM 操作的方法时,以下代码会导致页面在处理时变白约 1 秒。评论说对速度影响很大的行:
function AutoAssignImage(sourceImageDiv, destinationHolder) {
// Check nothing is assigned
if (!$(destinationHolder).has('.upload-pane-item').length) {
sourceImageDiv.find('.quickAssign').hide();
sourceImageDiv.find('.unassign').show();
sourceImageDiv.css({ border: "0px" });
$(destinationHolder).html(sourceImageDiv); // Causes blank screen while moves dom element
// Update Quick Assign buttons
updateQuickAssignButtons();
}
}
function updateQuickAssignButtons() {
quickAssign = "string gets generated here but is very quick";
$('#' + uploadPaneId + ' .quickAssignLinks').html(quickAssign); // Very slow
}
我需要更新用于多达 500 个元素的 HTML。我尝试过使用循环,认为它几乎会立即更新前几个元素,并且可以处理其他元素,而用户不会注意到轻微的延迟。当我尝试使用.each()
JQuery 循环时,它似乎没有任何不同,并且仍然会导致白屏大约一秒钟。
编辑: 通常设置的 HTML 如下所示:
<a class="assignLink" href="#">1</a>
<a class="assignLink" href="#">2</a>
<a class="assignLink" href="#">3</a>
<a class="assignLink" href="#">4</a>
<a class="assignLink" href="#">5</a>
<a class="assignLink" href="#">6</a><br />
<a class="assignLink" href="#">7</a>
<a class="assignLink" href="#">8</a>
<a class="assignLink" href="#">9</a>
<a class="assignLink" href="#">10</a>
<a class="assignLink" href="#">11</a>
<a class="assignLink" href="#">12</a>
缓存
我尝试将元素存储在变量中以启用某种形式的缓存
var quickAssignElements; // top of js file
quickAssignElements = $('#' + uploadPaneId + ' .quickAssignLinks'); // called when DOM updates
$(quickAssignElements).html(quickAssign); // Calls this when it needs to update html on elements
这似乎也没有什么不同。
有谁知道减少延迟/停止窗口变黑的替代方法?