多くのDOM操作を行う私のJQueryスクリプトは、Chromeでスムーズに動作し(予想)、Safariで非常にうまく動作し、Firefoxではそれほど悪くはありません。
InternetExplorerについて話しましょう...
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を更新する必要があります。最初のいくつかの要素をほぼ瞬時に更新し、ユーザーがわずかな遅延に気付かないうちに他の要素を処理できると考えて、ループを使用してみました。JQueryループを使用してみたところ.each()
、違いは見られず、約1秒間白い画面が表示されました。
編集: 一般的に設定される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
これも違いはないようです。
遅延を最小限に抑える/ウィンドウが空白になるのを防ぐための代替アプローチを知っている人はいますか?