2012-11-13 16 views
9

Mam przypadek użycia, w którym potrzebuję uzyskać całkowitą liczbę linii JavaScript wykonanych podczas ładowania strony.Liczba linii JavaScript wykonanych podczas ładowania strony

Problem, przed którym stoję, polega na tym, że przeglądarka zgłasza alert po przekroczeniu określonej liczby uruchomień JS (5 milionów w przypadku IE), a strona zostaje powieszona.

Użyłem profilera dostępnego na pasku narzędzi programistów IE, ale daje mi całkowitą liczbę wywoływanych funkcji JS, ale nie całkowitą liczbę/liczbę wykonanych linii.

Każda pomoc jest doceniana.

Dzięki

+4

I wątpię, że ta oparta jest na linii kodu. Najprawdopodobniej uruchamia się, gdy silnik JS zajmuje zbyt dużo czasu bez przekazywania kontroli do przeglądarki. – ThiefMaster

+0

'while (true);' spowoduje również, że strona zawiesi się ... rozumiem? – Matt

+5

@ThiefMaster: Myślę, że to samo, ale co ciekawe, wygląda na to, że OP jest poprawny: http://blogs.msdn.com/b/jpsanders/archive/2008/09/23/a-script-on -to-strona-powoduje-Internet-explorer-uruchamiać-powoli-jeśli-to-kontynuuje-uruchomić-twój-komputer-może-przestać reagować.aspx – mellamokb

Odpowiedz

0

w bash:

wc -l file.js 

W 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"; 
?> 

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

Spróbuj minification aby uzyskać line-numery w dół .

Wydaje się, że jest to strasznie dużo kodu.

+0

To się nie uda. IE zlicza wykonane instrukcje (nie linie kodu), więc instrukcje wewnątrz pętli są liczone w każdej iteracji, itd. Jest to określone w [poście na blogu MSDN] (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 podał w swoim komentarzu do pytania. – Bryan

+1

Yeh, odpowiadałem na ich oryginalne pytanie, ale poprawna odpowiedź brzmi: "przepisaj swój kod, to za dużo kodu". – konsumer

1

Po pierwsze, powinieneś naprawdę przeprojektować swój kod; 5 milionów wyciągów bez przekazywania kontroli do przeglądarki to z pewnością wiele kodów, wyobraź sobie, jak zmaga się z nimi mobilna przeglądarka.

Jednym ze sposobów sprawdzenia, ile instrukcji jest wykonywanych, jest oprzyrządowanie kodu, dodawanie jednego wyciągu do każdego wyciągu w kodzie, aby policzyć liczbę wykonań, podwajając liczbę wyciągów w kodzie.

Dostępne są również narzędzia do obsługi kodu, które można uruchamiać w przeglądarce bez konieczności programowania kodu; Googling dla "zasięgu kodu javascript" daje sporo rozszerzeń przeglądarki, których możesz użyć, takich jak hrtimer.

1

Po prostu podziel go na mniejsze części i zadzwoń po upływie limitu czasu, który obejmie problem z IE. na przykład

somethingBig(); 
somethingElseBig(); 

zamiast pisać:

somethingBig(); 
setTimeout(somethingElseBig); 
Powiązane problemy