2017-06-22 9 views
5

का उपयोग कर पेज लोड समय मापना मैंने जावास्क्रिप्ट में एक स्क्रिप्ट बनाई है जिसे स्वचालित ब्राउज़र परीक्षण के दौरान हमारे एक्सएस जेएस एप्लिकेशन में इंजेक्शन दिया गया है। स्क्रिप्ट हमारे ग्रिड में डेटा लोड करने के लिए किए गए समय की मात्रा को मापती है।जावास्क्रिप्ट

विशेष रूप से, प्रत्येक ग्रिड स्क्रिप्ट चुनाव, यह देखने के लिए देखता है कि पहली पंक्ति या 'कोई डेटा' संदेश नहीं है, और एक बार सभी ग्रिड इस शर्त को संतुष्ट करते हैं, तो स्क्रिप्ट Date.now() और प्रदर्शन के बीच मान रिकॉर्ड करती है .timing.fetchStart, और इस पृष्ठ को लोड करने के समय के रूप में व्यवहार करता है।

यह स्क्रिप्ट अपेक्षाकृत कम या ज्यादा काम करती है, हालांकि मानव मापा समय (Google स्टॉपवॉच एफटीडब्ल्यू) की तुलना में, इस परीक्षण द्वारा रिपोर्ट किया गया समय लगातार स्टॉपवॉच द्वारा मापा जाने वाला 300 मिलीसेकंड लंबा होता है।

मेरे सवालों का ये हैं:

  • इस तर्क यह है कि गलत परिणाम के लिए नेतृत्व करेंगे में एक छेद है?
  • क्या इस माप को प्राप्त करने के लिए कोई वैकल्पिक और सटीक तरीके हैं?

    function loadPoll() { 
        var i, duration, 
         dataRow = '.firstRow', noDataRow = '.noData', 
         grids = ['.grid1', '.grid2', '.grid3','.grid4', 'grid5', 'grid6', 'grid7']; 
    
        for (i = 0; i < grids.length; ++i) { 
          var data = grids[i] + ' ' + dataRow, 
          noData = grids[i] + ' ' + noDataRow; 
    
         if (!(document.querySelector(data) || document.querySelector(noData))) { 
          window.setTimeout(loadPoll, 100); 
          return; 
         } 
        } 
    
    duration = Date.now() - performance.timing.fetchStart; 
        window.loadTime = duration; 
    } 
    
    loadPoll(); 
    

    कुछ विचार::

स्क्रिप्ट इस प्रकार है हालांकि मुझे पता है कि मानव प्रतिक्रिया समय धीमा हो सकता है कर रहा हूँ, मुझे यकीन है कि

  • कि 300 मिलीसेकंड विसंगति Google स्टॉपवॉच का उपयोग करने के लिए मानव कारक द्वारा पेश नहीं किया गया है।

  • कोड यह प्रकट हो सकता है कि कई के मतदान तत्वों 300 एमएस विसंगति का कारण बन सकता है, लेकिन जब मैं बदल तत्वों की संख्या 1 7 से नजर रखी जा रही है, वहाँ अभी भी एक प्रतीत होता है को देखते हुए स्वचालित परीक्षण द्वारा रिपोर्ट किए गए समय में 300 एमएस अधिशेष।

  • हमारे स्वचालित परीक्षण सेलेनियम और प्रोटैक्टर द्वारा नियंत्रित ढांचे में निष्पादित किए जाते हैं।

अग्रिम धन्यवाद यदि आप इस बारे में कोई अंतर्दृष्टि प्रदान करने में सक्षम हैं!

+0

यह प्रश्न टैग किया गया है [टैग: node.js] लेकिन प्रश्न में कोड है जो 'विंडो', 'document.querySelector' का उपयोग करता है। मैं टैग हटा रहा हूँ। –

उत्तर

9

यदि आप performance.now() का उपयोग करते हैं तो समय 5 माइक्रोसॉन्ड के लिए सटीक होना चाहिए। MDN के अनुसार:

performance.now() विधि देता है एक DOMHighResTimeStamp, मापा मिलीसेकेंड में , एक millisecond (5 माइक्रोसेकंड) के पांच हजारवें हिस्से करने के लिए सही।

लौटा हुआ मूल्य (PerformanceTiming.navigationStart प्रॉपर्टी) के समय से समाप्त होने वाले समय का प्रतिनिधित्व करता है।

+0

धन्यवाद, दिनांक की तुलना में सीधे इसकी तुलना करते समय .now() - performance.timing.fetchStart; ऐसा लगता है कि यह लगभग 20 मिलीसेकंड अधिक सही है, जो सही दिशा में एक कदम है! –

3

यदि मैं आप थे तो मैं समय के वास्तविक माप को कैप्चर करने के तरीके के बारे में अपना दृष्टिकोण संशोधित करूंगा। प्रत्येक loadPoll() कॉल के लिए समय का मूल्यांकन करने के बजाय, आप मूल्यांकन कर सकते हैं कि आप किसी निश्चित अवधि के लिए कितनी कॉल कर सकते हैं।दूसरे शब्दों में आप लंबे समय तक फ़ंक्शन पुनरावृत्तियों की संख्या की गणना कर सकते हैं, उदाहरण के लिए 1000 मिलीसेकंड। यहां बताया गया है कि यह कैसे किया जा सकता है:

var timeout = 1000; 
var startTime = new Date().getTime(); 
var elapsedTime = 0; 

for (var iterations = 0; elapsedTime < timeout; iterations++) { 
    loadPoll(); 
    elapsedTime = new Date().getTime() - startTime; 
} 

// output the number of achieved iterations 
console.log(iterations); 

यह दृष्टिकोण आपको अधिक सुसंगत और सटीक समय अनुमान देगा। तेज़ सिस्टम केवल बड़ी संख्या में पुनरावृत्तियों को प्राप्त करेंगे। ध्यान रखें कि setInterval()/setTimeout() पूरी तरह से सटीक नहीं हैं और वास्तव में छोटे अंतराल टाइमर के लिए ये फ़ंक्शंस आपको कचरा संग्रहण, घटनाओं की मांगों और कई अन्य चीजों के कारण अमान्य परिणाम दे सकते हैं जो आपके कोड के समानांतर में चल सकते हैं मार डाला।

संबंधित मुद्दे