私は、検索結果のリストを実行する JavaScript ループ (を使用) を使用しており、検索ヒットを中心にsetInterval
スタイル設定された css を追加して検索語を強調表示しています。これを実行している間、ブラウザの制御を解放するためにこのように<span>
使用しています。setInterval
Chrome と Firefox では、setInterval パラメータが 10 ~ 20ms の場合でも、これはうまく機能します。結果がすばやく強調表示されている間、ユーザーはブラウザーを完全に制御できます (つまり、スクロール、リンクのクリックなど)。
mylooper = setInterval(function() {
// my functionality is here
},15); // 15ms
残念なことに、恐ろしい IE8 を使用すると、ブラウザーがロックアップし、検索結果に を追加してスタイルを設定するのに非常に長い時間がかかります。<span>
また、最初にページをロードするだけでも長い時間がかかります。このスクリプトを削除すると、大幅に短縮されます。
これまでのところ、私は試しました:
- 間隔の値を変更します (IE8 は 15 ミリ秒未満の間隔を検出しないと読みました)。
setTimeout
setInterval の代わりに使用。- インターバルを削除して、これが実際にスローダウンの原因であることを確認します (実際にそうです!)。と
Internet Explorer についてよく悪口を言う;
var highlightLoop; var index = 0; highlightLoop = setInterval(function () { var regex = RegExp(regexPhrase, "gi"); // regexPhase created elsewhere var searchResults = resultElements.eq(index).get(0); // run through resultElements which contain alll the nodes with search results in them. findAndReplaceDOMText( // a function that does the searching and inserting of styling regex, searchResults, function (fill, matchIndex) { called = true; var span = document.createElement("span"); span.className = "result-highlight"; span.innerHTML = fill; return span; } ); if (index == resultElements.length || searchTermUpdated == true) { // stop interval loop when search term changes or we reach the end of results - variable set elsewhere. searchTermUpdated = false; clearInterval(highlightLoop); // stop the loop } index++ } }, 50); // 50ms does not improve performance.
IE でのこの種の JavaScript の回避策に関するアドバイスは、非常に高く評価されます。皆さんありがとう。