Web ページの読み込み時に実行された Javascript 行の総数を取得する必要があるユース ケースがあります。
私が直面している問題は、特定の数の JS 実行 (IE の場合は 500 万回) を超えたときにブラウザーがアラートをスローし、ページがハングすることです。
IE Developers ツールバーで利用可能なプロファイラーを使用しましたが、呼び出された JS 関数の総数は表示されますが、実行された行の総数/カウントは表示されません。
どんな助けでも大歓迎です。
ありがとう
Web ページの読み込み時に実行された Javascript 行の総数を取得する必要があるユース ケースがあります。
私が直面している問題は、特定の数の JS 実行 (IE の場合は 500 万回) を超えたときにブラウザーがアラートをスローし、ページがハングすることです。
IE Developers ツールバーで利用可能なプロファイラーを使用しましたが、呼び出された JS 関数の総数は表示されますが、実行された行の総数/カウントは表示されません。
どんな助けでも大歓迎です。
ありがとう
それを小さなチャンクに分割し、タイムアウト後に呼び出すだけです-これはIEの問題を回避します。例えば
somethingBig();
somethingElseBig();
代わりに書く:
somethingBig();
setTimeout(somethingElseBig);
これは役立つかもしれません:
http://www-archive.mozilla.org/performance/jsprofiler.html
最初の行は、時刻が収集されたjsファイルを指定します。その下の各行の形式は次のとおりです。[A、B] C {DE} F {G、H、I}
D->JSファイル内の関数のベース行番号
E->JSファイル内の関数の範囲(最後)行番号
まず第一に、コードを本当に再設計する必要があります。ブラウザーに制御を戻さない 500 万のステートメントは、どうしても大量のコードになります。モバイル ブラウザーがこれに苦労することを想像してみてください。
実行されたステートメントの数を確認する 1 つの方法は、コードをインストルメント化し、コード内のステートメントごとに 1 つのステートメントを追加して実行回数をカウントし、コード内のステートメントの数を効果的に 2 倍にすることです。
また、コードをまったくインストルメント化しなくてもブラウザー内で実行できるコード カバレッジ ツールもあります。「javascript コード カバレッジ」をグーグルで検索すると、 hrtimerなど、使用できるブラウザ拡張機能がかなりの量提供されます。
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);
});
縮小して行番号を下げてみてください。
ただし、これは非常に多くのコードのように思えます。