詳細は省きますが、javascript を使用してテーブル内の空白をクリーンアップしています。大量のテキストノードを削除する必要があります。IE9 に関しては、これが私のスクリプトのボトルネックのようです。
以下の方法はすべて機能しますが、非常に遅くなります。
domNode.removeNode(true);
domNode.nodeValue = "";
domNode.parentNode.removeChild(domNode);
一括削除を行う方法や、dom などでそれらを非表示にする方法はありますか。ただ何か速い。
私もテキストノードでこれを試しました:
domNode.innerHTML = '';
それはすぐに実行されますが、テキストノードはそれによって段階的ではないようです。
また、イベント バインディングを保持する必要があるため、テーブル全体で .innerHTML を置き換えることは実際には選択肢のようには見えません。ただし、約 5 倍の速度で実行されます。
更新: 提案されたソリューションの大まかなベンチマーク:
//around 480ms
stripWhitespaceTextNodes(domNode);
//around 640ms
parent.removeChild(domNode);
stripWhitespaceTextNodes(domNode);
parent.insertBefore(domNode, nextNode);
//around 700ms
tables[i].style.visibility = 'hidden';
stripWhitespaceTextNodes(domNode);
tables[i].style.visibility = 'visible';
//around 1140ms
tables[i].style.display = 'none';
stripWhitespaceTextNodes(domNode);
tables[i].style.display = 'block';
これは、1500 行の 1 つのテーブルを含む 4 つのテーブルで行われました。
stripWhitespaceTextNodes() 関数の要点は、テキスト ノードを削除することです。これがボトルネックのようです。これが私のさまざまな試みです。
domNode.parentNode.removeChild(domNode);
domNode.removeNode(true);
domNode.nodeValue = ""; // <-- CURRENTLY THIS ONE IS THE TOP RUNNER
domNode.replaceWholeText('');
domNode.deleteData(0, domNode.length);
var txtNode = document.createTextNode("");
domNode.parentNode.replaceChild(txtNode, domNode);
parent.insertBefore(domNode, nextNode);
//fast but doesn't work
domNode.innerHTML = '';