3

AJAX リクエストの結果からコードを動的にロードする div があります。次に、prettify を使用してフォーマットします。動作しますが、非常に遅いです。私が使用するコードは次のとおりです。

var jqxhr = $.get(fileName)
 .success(function(data) {
  $('#myDiv').html(data);
  prettyPrint();
  $('#myDiv').fadeIn();
})

要するに、GET リクエストを実行し、リクエストの結果を #myDiv に入れ、フォーマットし、div にフェードインします。時間はかかりますが読み込みます。しかし、div をフェードアウトすると、ページが数秒間応答しなくなります。prettyPrint() を削除すると、ページは完璧に動作します。ヒントはありますか?

4

1 に答える 1

3

あくまで憶測ですが、気になる点をいくつか。

ソースによると、prettify.js のデフォルト モードは、継続を使用して実行し、一度に 250 ミリ秒以上 CPU を占有しないようにすることです ( http://code.google.com/pのソースから引用しています)。 /google-code-prettify/source/browse/trunk/src/prettify.js ):

/**
 * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
 * UI events.
 * If set to {@code false}, {@code prettyPrint()} is synchronous.
 */
window['PR_SHOULD_USE_CONTINUATION'] = true;

上記のコードの書き方は、同期モードで実行するように構成されている可能性があることを示しています。これが、低速でページを独占している理由です。このフラグが false に設定されていないことを確認し、prettyPrint への呼び出しに渡すコールバック関数に、fadeIn 呼び出しを追加する必要があります。

私が正しく理解していると仮定すると、prettyPrint を非同期モードで実行することができれば、一度に最大 250 ミリ秒を占有する必要があり、prettyPrint の呼び出しに渡されるコールバック関数に fadeIn への呼び出しを配置することにより、フェードしません。すべての構文の強調表示が完了するまで、それを続けます。当時の prettyPrint (250ms) への一連の呼び出しがまだ遅いと感じる場合は、最大時間の値を 250 未満に減らすか、代わりに prettyPrint のみが prettyPrints から更新された要素を確実に印刷するようにする方法を考え出すことをお勧めします。あなたのajax呼び出し。

于 2012-04-14T18:04:40.257 に答える