2012-11-13 17 views
9

के दौरान निष्पादित जावास्क्रिप्ट लाइनों की संख्या मेरे पास एक उपयोग केस है जहां मुझे अपना वेब पेज लोड होने पर जावास्क्रिप्ट लाइनों की कुल संख्या निष्पादित करने की आवश्यकता है।पृष्ठ लोड

मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि जब ब्राउज़र की कुछ निश्चित संख्या (आईई के मामले में 5 मिलियन लगता है) से अधिक हो जाता है और पृष्ठ फांसी हो जाती है तो ब्राउज़र एक चेतावनी फेंकता है।

मैंने आईई डेवलपर्स टूल बार में उपलब्ध प्रोफाइलर का उपयोग किया, लेकिन यह मुझे जेएस कार्यों की कुल संख्या देता है लेकिन कुल संख्या/निष्पादित लाइनों की गिनती नहीं।

किसी भी मदद की सराहना की जाती है।

धन्यवाद

+4

मैं अत्यधिक शक है कि इस कोड की तर्ज पर आधारित है। यह सबसे अधिक संभावना है जब जेएस इंजन ब्राउज़र पर वापस नियंत्रण के बिना बहुत अधिक समय लेता है। – ThiefMaster

+0

'जबकि (सच); 'पृष्ठ को लटका भी देगा ... मैं जो कह रहा हूं उसे प्राप्त करें? – Matt

+5

@ थिफमास्टर: मैंने वही बात सोचा होगा, लेकिन दिलचस्प बात यह है कि ऐसा लगता है कि ओपी वास्तव में सही है: http://blogs.msdn.com/b/jpsanders/archive/2008/09/23/a-script-on -इस-पेज-कारण-इंटरनेट-एक्सप्लोरर-टू-रन-धीरे-धीरे-अगर-जारी-टू-रन-आपका-कंप्यूटर-हो सकता है- unresponsive.aspx – mellamokb

उत्तर

0

मार में:

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

यह ऐसा नहीं करेगा। आईई निष्पादित बयानों की गणना कर रहा है (कोड की रेखा नहीं), इसलिए लूप के अंदर बयान प्रत्येक पुनरावृत्ति आदि पर गिना जाता है। यह [एमएसडीएन ब्लॉग पोस्ट] में कहा गया है (http://blogs.msdn.com/b/jpsanders/ संग्रह/2008/09/23/एक स्क्रिप्ट-ऑन-इस पन्ने की-है के कारण-इंटरनेट-एक्सप्लोरर-टू-रन-धीरे-अगर यह जारी है-टू-रन-your-कंप्यूटर-मई-become- unresponsive.aspx) mellamokb सवाल पर अपनी टिप्पणी में प्रदान किया। – Bryan

+1

ये, मैं उनके मूल प्रश्न का उत्तर दे रहा था, लेकिन सही जवाब है "अपना कोड दोबारा लिखें, यह बहुत अधिक कोड है।" – konsumer

1

यह आपकी मदद कर सकते हैं:

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

पहली पंक्ति js फ़ाइल जहाँ से बार इकट्ठे हुए थे निर्दिष्ट करता है। {, जी, एच मैं} [ए, बी] सी {डे} एफ

डी -> जे एस फ़ाइल
ई में समारोह के बेस लाइन नंबर -: कि नीचे प्रत्येक पंक्ति स्वरूप की है > जेएस फ़ाइल

1

में फ़ंक्शन की विस्तृत (अंतिम) पंक्ति संख्या सबसे पहले, आपको वास्तव में अपना कोड फिर से डिज़ाइन करना चाहिए; ब्राउजर पर नियंत्रण वापस किए बिना 5 मिलियन स्टेटमेंट्स का मतलब है कि बहुत सारे कोड हैं, कल्पना करें कि मोबाइल ब्राउज़र इसके साथ कैसे संघर्ष करेंगे।

यह पता लगाने का एक तरीका है कि आपके कोड को कितना कथन निष्पादित किया गया है, आपके कोड में प्रत्येक कथन के लिए एक कथन जोड़कर इसे कितनी बार निष्पादित किया गया था, इसकी गणना करने के लिए, आपके कोड में बयानों की संख्या को प्रभावी ढंग से दोगुना कर दिया गया है।

कोड कवरेज टूल भी हैं जो ब्राउज़र के अंदर आपके कोड को बिना किसी उपकरण के चला सकते हैं; "जावास्क्रिप्ट कोड कवरेज" के लिए गुगलिंग आपके द्वारा उपयोग किए जा सकने वाले ब्राउज़र एक्सटेंशन की उचित मात्रा प्रदान करता है, जैसे कि hrtimer

1

बस इसे छोटे हिस्सों में विभाजित करें और टाइमआउट के बाद कॉल करें - जो आईई मुद्दे के आसपास आता है। जैसे

somethingBig(); 
somethingElseBig(); 

बजाय लिखें:

somethingBig(); 
setTimeout(somethingElseBig); 
संबंधित मुद्दे