Javascript(Mootools)を使用して、HTMLテンプレートの要素を使用して大きなページを動的に作成し、同じテンプレートを何度もコピーしてページに挿入します。各テンプレート内では、一意のIDを作成するために置換する必要がある文字列キーワードを使用します。しかし、特にIEでこれらの置換えをすべて実行するには、数秒かかるという点で重大なパフォーマンス上の問題があります。コードは次のようになります。JavascriptのHTMLブロック内の文字列を効率的に置き換える
var fieldTemplate = $$('.fieldTemplate')[0];
var fieldTr = fieldTemplate.clone(true, true);
fieldTr.removeClass('fieldTemplate');
replaceIdsHelper(fieldTr, ':FIELD_NODE_ID:', fieldNodeId);
parentTable.grab(fieldTr);
replaceIdsHelper()は、IE9のプロファイラによる問題の方法です。これらのアプローチの両方が、この方法は、(約200 ...)呼び出される回数を与えられた非常に遅いです、しかし
// Retrieve the entire HTML body of the element, replace the string and set the HTML back.
var html = rootElem.get('html').replace(new RegExp(replaceStr, 'g'), id);
rootElem.set('html', html);
と
// Load the child elements and replace just their IDs selectively
rootElem.getElements('*').each(function(elem) {
var elemId = elem.get('id');
if (elemId != null) elemId = elemId.replace(replaceStr, id);
elem.set('id', elemId)
});
:私はこの方法の2つの実装を試みました。他のすべては正常に動作しますが、これは重要なパフォーマンスのボトルネックと思われるこれらのIDを置き換えるだけです。これを効率的にやり遂げる方法があるのか、そんなに遅く動いているのか誰にも分かりますか?要素は非表示になり、DOMが作成されてから再描画が行われるまでDOMによって取得されません。
ところで、このようにページを構築しているのは、ロード後も新しい要素を動的に作成できるようにする必要があるためです。これをサーバー側から行うと、はるかに複雑になります。
ありがとう、それは良いアドバイスです。私は間違いなくこのように物事をスピードアップすることができます。 私はJSでページ全体を構築するアプローチはクライアントに集中しすぎると思いますが、私たちはIE7をサポートしなければならず、ユーザーもコンピュータの速度が遅くなる可能性があります。いくつかのJSPタグを使用してページに開始データを入力してから、同じタグを使用して新しいエントリをコピーできるテンプレートを作成します。 –