2009-04-24 13 views
5

मुझे वेब पेज को पूरी तरह से लोड करने में लगने वाले समय को मापने के लिए एक विंडोज़ फॉर्म एप्लिकेशन बनाने की आवश्यकता है, ऐसा करने का सबसे अच्छा तरीका क्या है?मैं वेबपृष्ठ के प्रतिक्रिया और लोडिंग समय को कैसे माप सकता हूं?

इस छोटे ऐप का उद्देश्य वेबसाइट पर कुछ पृष्ठों की निगरानी करना है, पूर्व निर्धारित अंतराल में, ताकि पहले से जान सकें कि वेबसर्वर या डेटाबेस सर्वर के साथ कुछ गलत हो रहा है।

अतिरिक्त जानकारी:

मैं एक व्यावसायिक एप्लिकेशन का उपयोग नहीं कर सकते हैं, मैं करने के लिए एक डेटाबेस के लिए परिणाम बचाने के लिए और इस जानकारी के आधार पर रिपोर्ट की एक श्रृंखला बनाने के लिए सक्षम होने के लिए इस विकसित करने के लिए की जरूरत है।

वेबरेक्वेस्ट समाधान उस दृष्टिकोण के रूप में प्रतीत होता है जिसे मैं उपयोग करने के लिए जा रहा हूं, हालांकि, पृष्ठ को पूरी तरह से लोड करने में लगने वाले समय को मापने में सक्षम होना अच्छा होगा (छवियों, सीएसएस, जावास्क्रिप्ट, आदि) । कोई विचार है कि यह कैसे किया जा सकता है?

उत्तर

16

यदि आप केवल यह रिकॉर्ड करना चाहते हैं कि मूल पृष्ठ स्रोत प्राप्त करने में कितना समय लगता है, तो आप स्टॉपवॉच के आसपास एक HttpWebRequest को लपेट सकते हैं। जैसे

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); 

System.Diagnostics.Stopwatch timer = new Stopwatch(); 
timer.Start(); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

timer.Stop(); 

TimeSpan timeTaken = timer.Elapsed; 

हालांकि, यह छवियों जैसे अतिरिक्त सामग्री डाउनलोड करने के लिए समय पर ध्यान नहीं देगा।

[संपादित करें] इसके विकल्प के रूप में, आप WebBrowser नियंत्रण का उपयोग करने में सक्षम हो सकते हैं और फायरिंग से .Navigate() और दस्तावेज़ पूर्ण घटना निष्पादित करने के बीच का समय माप सकते हैं। मुझे लगता है कि इसमें अतिरिक्त सामग्री के डाउनलोड और प्रतिपादन समय भी शामिल होंगे। हालांकि, मैंने WebBrowser नियंत्रण को एक बड़ी राशि का उपयोग नहीं किया है और केवल यह नहीं पता कि आपको कैश को साफ़ करना है या नहीं, यदि आप बार-बार उसी पृष्ठ का अनुरोध कर रहे हैं।

+1

+1 - मैं इस विचार के साथ अजीब रूप से आरामदायक हूं - lol –

+0

ग्रेट दिमाग एक जैसे सोचते हैं :) –

+0

मुझे भी! मैं शायद इसे अपने कोड में उपयोग करूंगा, मुझे लगता है कि अतिरिक्त सामग्री का माप परिशुद्धता के साथ कार्यान्वित करना बहुत कठिन होगा। – holiveira

0

आप इस तरह के एक सॉफ्टवेयर का उपयोग कर सकते हैं:

http://www.cyscape.com/products/bhawk/page-load-time.aspx

http://www.trafficflowseo.com/2008/10/website-load-timer-great-to-monitor.html

गूगल एक सबसे अच्छा अपनी आवश्यकताओं के लिए सबसे उपयुक्त खोजने के लिए उपयोगी होगा।

1

कुछ इस तरह शायद ठीक काम करेगा:

System.Diagnostics.Stopwatch sw = new Stopwatch() 
System.Net.HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.example.com"); 
// other request details, credentials, proxy settings, etc... 

sw.Start(); 
System.Net.HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 
sw.Stop(); 

TimeSpan timeToLoad = sw.Elapsed; 
0

आप फ़ायरफ़ॉक्स फ़ायरबग विस्तार http://getfirebug.com में पाया स्थापित उपयोग कर रहे हैं। वहां से, नेट टैब चुनें, और यह आपको पृष्ठ पर सबकुछ के लिए लोड/प्रतिक्रिया समय बताएगा।

3

इस पर निर्भर करते हुए कि आपको आवृत्ति को कैसे करने की आवश्यकता है, शायद आप सेलेनियम (वेब ​​अनुप्रयोगों के लिए एक स्वचालित परीक्षण उपकरण) का उपयोग करने का प्रयास कर सकते हैं, क्योंकि यह उपयोगकर्ता आंतरिक रूप से एक वेब ब्राउज़र है, तो आपके पास एक बहुत करीबी उपाय होगा। मुझे लगता है कि सेनेटियम एपीआई का उपयोग नेट एप्लिकेशन से करना मुश्किल नहीं होगा (क्योंकि आप यूनिट परीक्षणों में सेलेनियम का भी उपयोग कर सकते हैं)।

इस तरह की चीज को मापना मुश्किल है क्योंकि वेब ब्राउज़र में कुछ विशेषताओं को तब डाउनलोड किया जाता है जब सभी वेब पेज तत्वों (जेएस, सीएसएस, छवियों, आईफ्रेम इत्यादि) डाउनलोड करते हैं - इस तरह की विशिष्टताओं को इस उत्कृष्ट पुस्तक (http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309/) में समझाया गया है। ।

घर का बना समाधान शायद कोड के लिए बहुत जटिल होगा या उन विशेषताओं में से कुछ में भाग लेने में विफल रहेगा (एचटीएमएल डाउनलोड करने में बिताए गए समय को मापना पर्याप्त नहीं है)।

+0

+1! –

2

एक चीज जिसे आपको लेने की आवश्यकता है वह कैश है। सुनिश्चित करें कि आप सर्वर से डाउनलोड करने के लिए समय को माप रहे हैं, कैश से नहीं। आपको यह बीमा करने की आवश्यकता होगी कि आपने क्लाइंट साइड कैशिंग बंद कर दी है।

सर्वर साइड कैशिंग का भी ध्यान रखें। मान लीजिए कि आप 9:00 बजे गति को डाउनलोड करते हैं और इसमें 15 सेकंड लगते हैं, फिर आप इसे 9:05 पर डाउनलोड करते हैं और इसमें 3 सेकंड लगते हैं, और अंततः 10:00 बजे इसे 15 सेकंड लगते हैं।

क्या हो रहा है यह है कि 9 सर्वर पर पूरी तरह से पृष्ठ प्रस्तुत करना था क्योंकि कैश में कुछ भी नहीं था। 9:05 बजे पृष्ठ कैश में था, इसलिए इसे फिर से प्रस्तुत करने की आवश्यकता नहीं थी। आखिर में 10 तक कैश साफ़ कर दिया गया था ताकि पृष्ठ को फिर से सर्वर द्वारा प्रस्तुत किया जा सके।

मैं अत्यधिक अनुशंसा करता हूं कि आप YSlow फ़ायरफ़ॉक्स के लिए एडिन चेकआउट करें जो आपको पृष्ठ पर प्रत्येक आइटम को डाउनलोड करने के लिए किए गए समय का विस्तृत विश्लेषण देगा।

1

मैं एक बार लिखा था एक प्रयोगात्मकprogram जो एक HTML पृष्ठ और जाने वाली वस्तुओं को संदर्भित करती है (चित्र, iframes, आदि) डाउनलोड करता है।

ऐसा लगता है कि इसकी तुलना में अधिक जटिल है क्योंकि HTTP बातचीत है, इसलिए कुछ वेब क्लाइंटों को एक छवि का एसवीजी संस्करण और कुछ पीएनजी एक आकार में व्यापक रूप से अलग किया जाएगा। <object> के लिए वही बात।

1

मुझे अक्सर एक जैसी ही समस्या का सामना करना पड़ता है। हालांकि मैं थोड़ा अलग दृष्टिकोण लेता हूं: सबसे पहले, मुझे स्थिर सामग्री की परवाह क्यों करनी चाहिए? मेरा मतलब है कि उपयोगकर्ता के लिए यह महत्वपूर्ण है, अगर किसी छवि के लिए 2 मिनट या 2 सेकंड लगते हैं, लेकिन यह मेरी समस्या नहीं है, मैंने पृष्ठ को पूरी तरह से विकसित करने के बाद। विकासशील और तैनाती के बाद ये चीजें समस्याएं हैं, यह स्थिर सामग्री नहीं है, लेकिन यह गतिशील चीजें हैं जो सामान्य रूप से चीजों को धीमा करती हैं (जैसे आपने अपने अंतिम पैराग्राफ में कहा था)। अगली बात यह है कि, आप भरोसा क्यों करते हैं कि इतनी सारी चीजें स्थिर रहती हैं? यदि आपके नेटवर्क पर कोई व्यक्ति पी 2 पी प्रोग्राम को सक्रिय करता है, तो रूटिंग गलत हो जाती है या आपके आईएसपी में कुछ समस्याएं होती हैं जो आपके सर्वर-आंकड़े निश्चित रूप से नीचे आ जाएंगे। और दुनिया भर में रहने वाले उपयोगकर्ता के लिए या बस एक अलग आईएसपी का उपयोग करने के लिए आपका बेंचमार्क क्या कहता है? मैं बस इतना कह रहा हूं कि आप अपने दृष्टिकोण को बेंचमार्क कर रहे हैं, लेकिन यह सर्वर प्रदर्शन के बारे में ज्यादा नहीं कहता है, है ना?

क्यों साइट/सर्वर स्वयं निर्धारित नहीं करता कि इसे कितना समय लगता है? PHP में लिखे गए एक छोटे से उदाहरण यहां दिए गए हैं:

function microtime_float() 
{ 
    list($usec, $sec) = explode(" ", microtime()); 
    return ((float)$usec + (float)$sec); 
} 

function benchmark($finish) 
{ 
    if($finish == FALSE){ /* benchmark start*/  
    $GLOBALS["time_start"] = microtime_float(); 
    }else{ /* benchmark end */  
    $time = microtime_float() - $GLOBALS["time_start"]; 
    echo '<div id="performance"><p>'.$time.'</p></div>'; 
    } 
} 

यह पृष्ठ के अंत में (सीएसएस के साथ छिपा हुआ) पृष्ठ के अंत में जोड़ता है। हर कुछ मिनटों में मैं इसे नियमित अभिव्यक्ति के साथ दबाता हूं और इसे पार्स करता हूं। अगर यह समय बढ़ जाता है तो मुझे पता है कि कुछ गड़बड़ है (स्थिर सामग्री सहित!) और आरएसएस-फीड के माध्यम से मुझे सूचित किया जाता है और मैं कार्य कर सकता हूं।

फ़ायरबग के साथ हम सभी सामग्री (विकास चरण) लोड करने वाली साइट के "सामान्य" प्रदर्शन को जानते हैं। बेंचमार्क के साथ हमें वर्तमान सर्वर की स्थिति मिलती है (यहां तक ​​कि हमारे सेल फोन पर भी)। ठीक। आगे क्या? हमें यह सुनिश्चित करना होगा कि सभी/अधिकतर आगंतुकों को अच्छा कनेक्शन मिल रहा है। मुझे यह हिस्सा वास्तव में मुश्किल लगता है और सुझावों के लिए खुला है। हालांकि मैं लॉग फ़ाइलों को लेने और कुछ आईपी पिंग करने का प्रयास करता हूं यह देखने के लिए कि इस नेटवर्क तक पहुंचने में कितना समय लगता है। इसके अतिरिक्त मैं एक विशिष्ट आईएसपी का फैसला करने से पहले मैं कनेक्टिविटी और उपयोगकर्ता राय के बारे में पढ़ने की कोशिश करता हूं ...

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