0

Javascript ルーチン (約 400、複雑なもの) によって初期化する必要がある多くのウィジェットを使用する特定のページがあります。これには時間がかかります (遅いマシンでは 20 秒もかかります)。ページの代わりに進行状況インジケーター (パーセンテージ ラベルが付いた単純なテキスト フィールド) を表示できると考えていましたが、継続的に更新していても、進行中のタスクによってすべてがブロックされ、更新が表示されないことがわかりました。そのため、負荷の高い JavaScript タスクが完了するまで、すべてがフリーズしたままになります。私も次の実験を行いましたが、同様にフリーズします (そして、Firefox はスクリプトが完了するのに時間がかかりすぎると言っています...):

function a(){
    for (var i = 0; i < 5000000000000000; i++){
        abb = i;        
    }
}

var abb;

function c(){
    var ef = document.getElementById("pip");
    ef.innerHTML = abb;

}

function b(){

    setInterval(c, 50);
    setTimeout(a, 1000);
}

私に来る唯一の解決策は、長い仕事をバラバラにしてラベルを更新することです....しかし、別の解決策があるかどうか疑問に思っていました! 神よ、JSにはできるだけ早くスレッドが必要です... :)

何か案は?

4

3 に答える 3

1

実行中にユーザーが空白のページに座っていないように、スクリプトが onLoad イベントから実行されていると仮定できますか?

はいの場合は、スクリプトを個別の関数に分割し、それらの関数の配列を作成し、その配列を反復処理して関数を評価し、N 個の関数ごとに進行状況インジケーターを更新することをお勧めします。

また、一般向けの Web サイトの場合は、ページを体験するために絶対に必要な JavaScript の量を最小限に抑えるようにしてください。そして、各ウィジェットが必要とする初期化の量。エージェント スミスの言葉を借りれば、アコーディオンの折り畳み木に何の価値があるというのでしょう。

于 2009-07-15T11:50:44.860 に答える
0

スレッドが必要な場合は、LiveConnect を使用して真の Java スレッドを作成できます (セキュリティ マネージャーが許可している場合)。

そうでない場合は、C のコルーチン デザイン パターンを使用できます。

よろしく。

于 2009-07-15T11:56:51.590 に答える