3

AJAXリクエストの結果からコードを動的にロードするdivがあります。それから私はprettifyを使用してそれをフォーマットしたいと思います。それは動作しますが、遅いです。私が使用するコードは次のようである:私は、GETリクエストを行う要するにPrettifyを使用してWebページで動的に生成されたスニペットのシンタックスハイライト

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

、私はそれをフォーマット#myDivにおける要求の結果を入れて、私はdiv要素をフェードイン。しばらく時間がかかりますが、負荷がかかります。しかし、divをフェードアウトすると、ページは数秒間応答しなくなります。 prettyPrint()を削除しても、ページは完全に動作します。何かヒント?

答えて

3

私はちょうど推測ですが、言及する価値があるものはいくつかあります。

/** 
* 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; 

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

あなたのコードを上に書いた方法は、同期モードで実行するように設定されている可能性があることを示しています。そのため、ページが遅くなってしまいます。このフラグがfalseに設定されていないことを確認し、fadeIn呼び出しをprettyPrintの呼び出しに渡すコールバック関数に追加する必要があります。

私が正しく理解していると仮定すると、非同期モードでprettyPrintを実行すると、その時点で最大250ミリ秒でホッグし、prettyPrintのコールに渡されたコールバック関数にfadeInを呼び出すと、すべての構文ハイライトが完了するまで、フェードインしません。その時点でprettyPrint(250ms)を呼び出す一連の呼び出しがまだ遅いと感じる場合は、最大時間値を250未満に減らすか、またはprettyPrintが更新された要素のみをprettyPrintsする方法を見つけ出すことをお勧めしますあなたのajax呼び出し。

+0

ワウ。面白い答えをありがとう。私はあなたが旗について書いたものをチェックします。それから、私はコールバックでdivを消滅させようとします。ありがとう! – RMinelli

関連する問題