2012-11-13 14 views
9

Web sayfam yüklendiğinde çalıştırılan toplam Javascript satır sayısını almam gereken bir kullanım durumum var.Sayfa yüklenirken çalıştırılan Javascript satırı sayısı

Karşılaştığım sorun, tarayıcının belirli bir sayıdaki JS yürütme sayısını aştığı (IE durumunda sanırım 5 milyon) ve sayfanın askıya alındığı zaman bir uyarı vermesidir.

IE Developers araç çubuğunda bulunan profiler kullandım, ancak çalıştırılan satırların toplam sayısı/sayısı değil, toplam JS işlevi sayısını verir.

Herhangi bir yardım için teşekkür ederiz.

Teşekkür

BASH olarak
+4

Çok bu satır kod dayanmaktadır şüpheliyim. JS motoru, denetimi tarayıcıya geri almadan çok fazla zaman aldığında büyük olasılıkla tetikler. – ThiefMaster

+0

'(true);' da sayfanın askıda kalmasına neden olacak ... ne diyorum? – Matt

+5

@ThiefMaster: Aynı şeyi düşünürdüm, ama ilginç bir şekilde, OP'nin aslında doğru olduğu anlaşılıyor: http://blogs.msdn.com/b/jpsanders/archive/2008/09/23/a-script-on -this-page-is-neden-internet-explorer-to-run-yavaş yavaş-if-it-devam-senin-bilgisayar-olabilir-olabilir-unresponsive.aspx – mellamokb

cevap

0

: PHP

wc -l file.js 

: node.js yılında

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

:

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

satır-numaralarını almak için minification deneyin . Yine de, bu çok büyük bir kod gibi gözüküyor.

+0

Bunu yapmaz. IE, çalıştırılan ifadeleri (kod satırları değil) sayar, dolayısıyla döngüler içindeki ifadeler her yineleme, vb. Olarak sayılır. Bu, [MSDN blog postası] içinde belirtilir (http://blogs.msdn.com/b/jpsanders/ arşiv/2008/09/23/a-komut-on-bu-sayfa-neden olan-internet-explorer-çalıştırmak-yavaş-it-devam ederse-to-run-your-bilgisayara-may-become- unresponsive.aspx) mellamokb sorusuna yaptığı yorumda sağladı. – Bryan

+1

Yeh, Onların orijinal sorularını cevaplıyordum, ama doğru cevap "kodunuzu yeniden yazmanız, çok fazla kod." – konsumer

1

Öncelikle, gerçekten kodunuzu yeniden tasarlamalısınız; Kontrolü tarayıcıya geri almadan 5 milyondan fazla ifade, çok fazla kod anlamına gelir, mobil tarayıcıların bununla nasıl mücadele edeceğini hayal edin.

Kaç ifadenin yürütüldüğünü öğrenmenin bir yolu, kodunuzu işleyerek, kodunuzdaki her bir deyim için, yürütme sayısını saymak için bir ifade ekleyerek, kodunuzdaki ifadelerin sayısını iki katına çıkarmanızdır.

Ayrıca, kodunuzu hiç almanıza gerek kalmadan tarayıcının içinde çalışabilen kod kapsamı araçları da vardır; "Javascript kod kapsamı" için tarama yapmak, hrtimer gibi kullanabileceğiniz çok sayıda tarayıcı uzantısı sağlar.

1

Sadece daha küçük parçalara bölün ve zaman aşımından sonra arama yapın - bu, IE sorunuyla karşılaşır. Örneğin.

somethingBig(); 
somethingElseBig(); 

yerine yazın:

somethingBig(); 
setTimeout(somethingElseBig);