2012-11-13 48 views
9

我有一個用例,我需要獲取加載網頁時執行的Javascript行的總數。頁面加載過程中執行的Javascript行數

我面臨的問題是,當一定數量的JS執行超過(500萬我認爲在IE的情況下),並且頁面被絞死時,瀏覽器會發出警報。

我使用IE開發工具欄中提供的分析器,但它給了我調用的JS函數的總數,但不是執行的總數/行數。

任何幫助表示讚賞。

感謝

+4

我高度懷疑,這是基於代碼行。當JS引擎花費太多時間而不將控制權交還給瀏覽器時,它很可能會觸發。 – ThiefMaster

+0

'while(true);'也會導致頁面掛起...得到我在說什麼? – Matt

+5

@ThiefMaster:我會想到同樣的事情,但有趣的是,它看起來是OP實際上是正確的:http://blogs.msdn.com/b/jpsanders/archive/2008/09/23/a-script-on -this-page-is-cause-internet-explorer-to-run-slowly-if-it-continue-to-run-your-computer-may-become-unresponsive.aspx – mellamokb

回答

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); 
}); 

嘗試minification讓你的線路數量下降。

雖然這看起來好像很糟糕的代碼。

+0

那不行。 IE正在計算執行的語句(不是代碼行),因此循環內部的語句會在每次迭代中計數,等等。這在[MSDN博客文章](http://blogs.msdn.com/b/jpsanders/存檔/ 2008/09/23/A-腳本上這一頁,是致病的互聯網資源管理器對運行緩慢如果-IT-繼續對運行您的計算機-MAY-become- unlamsive.aspx)mellamokb在他對這個問題的評論中提供。 – Bryan

+1

是的,我正在回答他們原來的問題,但正確的答案是「重寫你的代碼,代碼太多了。」 – konsumer

1

首先,你應該重新設計你的代碼; 500萬條語句無需將控制權交還給瀏覽器,這無疑代表了很多代碼,想象一下移動瀏覽器如何與之抗爭。

找出執行多少個語句的一種方法是通過檢查代碼,爲代碼中的每個語句添加一條語句來計算它被執行的次數,從而有效地將代碼中的語句數加倍。

還有一些代碼覆蓋工具可以在瀏覽器內部運行,而無需根本檢測代碼;使用「javascript代碼覆蓋率」搜索可以獲得大量您可以使用的瀏覽器擴展,例如hrtimer

1

只需將它分成更小的塊並在超時後調用 - 即可解決IE問題。例如

somethingBig(); 
somethingElseBig(); 

,而不是寫:

somethingBig(); 
setTimeout(somethingElseBig);