我有一个用例,我需要在我的网页加载时获取执行的 Javascript 行总数。
我面临的问题是,当 JS 执行次数超过一定数量(我认为 IE 为 500 万)并且页面被挂起时,浏览器会发出警报。
我使用了 IE Developers 工具栏中提供的分析器,但它给了我调用的 JS 函数的总数,而不是执行的总行数/计数。
任何帮助表示赞赏。
谢谢
我有一个用例,我需要在我的网页加载时获取执行的 Javascript 行总数。
我面临的问题是,当 JS 执行次数超过一定数量(我认为 IE 为 500 万)并且页面被挂起时,浏览器会发出警报。
我使用了 IE Developers 工具栏中提供的分析器,但它给了我调用的 JS 函数的总数,而不是执行的总行数/计数。
任何帮助表示赞赏。
谢谢
这可能会有所帮助:
http://www-archive.mozilla.org/performance/jsprofiler.html
第一行指定从中收集时间的 js 文件。以下每一行的格式为: [A, B] C {DE} F {G, H, I}
D -> JS 文件中函数的基线号
E -> JS 文件中函数的 Extent(最后)行号
只需将其分成更小的块并在超时后调用 - 这可以解决 IE 问题。例如
somethingBig();
somethingElseBig();
而是写:
somethingBig();
setTimeout(somethingElseBig);
首先,你真的应该重新设计你的代码;500 万条没有将控制权交还给浏览器的语句绝对是很多代码,想象一下移动浏览器将如何处理它。
找出执行了多少语句的一种方法是检测代码,为代码中的每个语句添加一条语句以计算其执行次数,从而有效地将代码中的语句数加倍。
还有一些代码覆盖工具可以在浏览器中运行,而无需检测您的代码;谷歌搜索“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);
});
尝试缩小以降低您的行号。
不过,这似乎是一大堆代码。