興味深い問題が出てきました。ブラウザーに関連しているかもしれませんが、わかりません。私はワープロスタイルのアプリである非常に大規模なWebページに取り組んでいます。私はこの構造を持っています:
<article>
<div>...</div>
<div>...</div>
<div>...</div>
... 5000 more divs ...
</article>
私は最初にページを読み込むとき、私は2つのことをする機能を持っています。まず、それは正規表現を使用して、各div要素のHTMLの内容を解析し、それがこのようなもので、その結果、特定の正規表現に一致する場合のdivにクラスを適用します。
<article>
<div class="type1">...</div>
<div class="type2">...</div>
<div class="type3">...</div>
... 5000 more divs ...
</article>
関数の2番目の部分は、その後の高さを算出し、各divとそれをカウンタに追加します。それが一定数を通過すると、私は改ページとして機能するHTMLの断片を挿入し、その後、すすぎと繰り返し:
// Pagination variables
var document_current_page_height = 0;
var constant_default_page_height = 1000;
var page_number = 0;
// Iterate over page elements
object_range.each(function()
{
// Check whether page is too long
if (document_current_page_height + $(this).outerHeight(true) > constant_default_page_height)
{
// Create page break
$(this).before("<section contenteditable=\"false\"><h3 class=\"page-footer\">" + document_page_footer" + "</h3><figure><hr /><hr /></figure><h1 class=\"page-header\">" + document_page_header + "</h1><h2 class=\"page-number\">" + page_number + "</h2></section>");
// Adjust variables
page_number++
document_current_page_height = 0;
}
// Increment current page height
document_current_page_height += $(this).outerHeight(true));
});
このコードは完璧に動作しますが、ここで問題です...
実行をそれが実行されるはずであるので、約2秒かかります。しかし、同じコードを実行するが、プロセスの最初の部分(divをクラスに追加する部分)をスキップすると、コードは0.2秒で実行されます。
私はさらに、コード行を$(this).before
にコメントすることで問題を特定することができました。これが完了すると、両方の速度テストは十分に近い(100ms以内)。
$(this).before
のコード行はdivの高さ/スタイル/クラスを参照していないので、divがクラスを持つのはなぜですか?
クラスを持っているときにdivと闘うのは単純なケースですか?何かご意見は? (私はSafari 9.1を使用しています)。
ありがとうございます!