9

我有一个用例,我需要在我的网页加载时获取执行的 Javascript 行总数。

我面临的问题是,当 JS 执行次数超过一定数量(我认为 IE 为 500 万)并且页面被挂起时,浏览器会发出警报。

我使用了 IE Developers 工具栏中提供的分析器,但它给了我调用的 JS 函数的总数,而不是执行的总行数/计数。

任何帮助表示赞赏。

谢谢

4

4 回答 4

1

这可能会有所帮助:

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

第一行指定从中收集时间的 js 文件。以下每一行的格式为: [A, B] C {DE} F {G, H, I}

D -> JS 文件中函数的基线号
E -> JS 文件中函数的 Extent(最后)行号

于 2012-11-15T01:57:07.140 回答
1

只需将其分成更小的块并在超时后调用 - 这可以解决 IE 问题。例如

somethingBig();
somethingElseBig();

而是写:

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

首先,你真的应该重新设计你的代码;500 万条没有将控制权交还给浏览器的语句绝对是很多代码,想象一下移动浏览器将如何处理它。

找出执行了多少语句的一种方法是检测代码,为代码中的每个语句添加一条语句以计算其执行次数,从而有效地将代码中的语句数加倍。

还有一些代码覆盖工具可以在浏览器中运行,而无需检测您的代码;谷歌搜索“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 回答