0

次の JS 擬似コードがあります。

var tree = $('<div id="root"></div>');
tree = build_big_tree();   // appends ~250 rows / 3000 DOM elements incl. 1 <audio> per row
$('body').append(tree);
some_DOM_call();

コードはブラウザー間で問題なく動作しますが、firefox (Ubuntu では 13) ではsome_DOM_call()非常に遅くなります (JS 全体が 1 秒未満で実行される場合、250 行で約 10 秒)。console.timeStamp()犯人が見つかるまで、コードでこれを使用して見つけました。

10 は行数にほぼ比例します。実際のページはhttp://wikiotics.org/fr/FSI-French-basic-course-revised-volume-01-unit-01-lesson-01?view=editにあります

時間がかかることに加えて、最も厄介な部分は、ブラウザ全体がそれらの 10 秒間、他のタブでさえ使用できなくなることです。

some_DOM_call() はもともと jQuery コードですが、elem.offsetWidth(好奇心のために jQuery cssHooks() で) に絞り込みました。some_DOM_call() をコメントアウトすると、次の DOM アクセスで 10 秒の遅延が発生しました ( body.appendChild(OBJECT))。ですから、DOM 関連のアクションである限り、私が何をしてもかまわないようです。

Firebug はこれらの 10 秒間に何が起こっているかを表示しないので、ページに挿入したツリーのレンダリングに関連しているとしか推測できません。しかし、私は間違っているかもしれません。

実際に何が起こっているのかを把握して、物事を改善するにはどうすればよいですか?

4

0 に答える 0