9

Web ページの読み込み時に実行された Javascript 行の総数を取得する必要があるユース ケースがあります。

私が直面している問題は、特定の数の JS 実行 (IE の場合は 500 万回) を超えたときにブラウザーがアラートをスローし、ページがハングすることです。

IE Developers ツールバーで利用可能なプロファイラーを使用しましたが、呼び出された JS 関数の総数は表示されますが、実行された行の総数/カウントは表示されません。

どんな助けでも大歓迎です。

ありがとう

4

4 に答える 4

1

それを小さなチャンクに分割し、タイムアウト後に呼び出すだけです-これはIEの問題を回避します。例えば

somethingBig();
somethingElseBig();

代わりに書く:

somethingBig();
setTimeout(somethingElseBig);
于 2012-12-15T13:52:30.970 に答える
1

これは役立つかもしれません:

http://www-archive.mozilla.org/performance/jsprofiler.html

最初の行は、時刻が収集されたjsファイルを指定します。その下の各行の形式は次のとおりです。[A、B] C {DE} F {G、H、I}

D->JSファイル内の関数のベース行番号
E->JSファイル内の関数の範囲(最後)行番号

于 2012-11-15T01:57:07.140 に答える
1

まず第一に、コードを本当に再設計する必要があります。ブラウザーに制御を戻さない 500 万のステートメントは、どうしても大量のコードになります。モバイル ブラウザーがこれに苦労することを想像してみてください。

実行されたステートメントの数を確認する 1 つの方法は、コードをインストルメント化し、コード内のステートメントごとに 1 つのステートメントを追加して実行回数をカウントし、コード内のステートメントの数を効果的に 2 倍にすることです。

また、コードをまったくインストルメント化しなくてもブラウザー内で実行できるコード カバレッジ ツールもあります。「javascript コード カバレッジ」をグーグルで検索すると、 hrtimerなど、使用できるブラウザ拡張機能がかなりの量提供されます。

于 2012-11-15T02:24:05.897 に答える
0

BASH の場合:

wc -l file.js

PHP の場合:

<?php
$c=0;
$file_handle = fopen("file.js", "r");
while (!feof($file_handle)) {
    $line = fgets($file_handle);
    $c++;
}
fclose($file_handle);
print "$c lines.\n";
?>

Node.js の場合:

var i, count = 0, js=require('fs').createReadStream('file.js');

js.on('data', function(chunk) {
    for (i=0; i < chunk.length; ++i)
        if (chunk[i] == 10) count++;
});

js.on('end', function() {
    console.log(count);
});

縮小して行番号を下げてみてください。

ただし、これは非常に多くのコードのように思えます。

于 2012-11-15T01:02:00.450 に答える