2013-05-07 10 views
8

के साथ प्रदर्शन परीक्षण मैं Google सोया टेम्पलेट का उपयोग कर रहा हूं और सर्वर-साइड और क्लाइंट-साइड रेंडरिंग समाधान दोनों विकसित किया है। मैं प्रदर्शन परीक्षणों का उपयोग करके उन्हें बेंचमार्क करना चाहता हूं। क्लाइंट-साइड भाग का बेंचमार्किंग करते समय, मैं प्रतीक्षा करना चाहता हूं जब तक कि सभी जावास्क्रिप्ट क्रियाएं वास्तविक प्रतिक्रिया समय की गणना करने के लिए की जाती हैं।फ़ैंटॉमजेएस

मैंने नीचे प्रयास किया था लेकिन यह मेरे उद्देश्य को हल नहीं करता है।

  • PhantomJS एक पृष्ठ तक पहुँचने और पृष्ठ पर आवश्यक जानकारी क्वेरी करने का समर्थन करता है, लेकिन है समवर्ती कनेक्शन
  • Nodeload अनुकरण करने के लिए किसी भी विकल्प प्रदान नहीं करता है, एक सर्वर का परीक्षण लोड करने की क्षमता प्रदान करता है, लेकिन ऐसा नहीं करता पृष्ठ से जानकारी प्राप्त करने के लिए कोई विकल्प है।

क्या अन्य ढांचे हैं जिनका उपयोग मैं लोड परीक्षण के साथ-साथ पृष्ठ स्क्रैपिंग दोनों करने के लिए कर सकता हूं?

उत्तर

11

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

मेरी मशीन example.com पर स्थानीयहोस्ट को इंगित करता है, और बाधा अपाचे थी। जैसे जब मैं एन = 30 के साथ दौड़ता हूं तो इसे चलाने में लगभग 5 सेकंड लगते हैं। यदि मैं इसे तुरंत फिर से चलाता हूं, तो इसमें 0.75 सेकंड लग गए (क्योंकि पर्याप्त अपाचे उदाहरण पहले से ही फैल गए थे)। जब मैंने एन = 100 के साथ प्रयास किया तो इसमें लगभग 12 सेकंड लग गए, और मेरी खराब नोटबुक पर भारी भार बनाया।

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

सटीक वही स्क्रिप्ट स्लिमरजेएस पर चलती है, लेकिन व्यवहार काफी अलग है। प्रत्येक उदाहरण को शुरू करने में अधिक ओवरहेड होता है, लेकिन अधिक महत्वपूर्ण बात यह है कि प्रत्येक के पास अपनी डिस्क कैश होती है। तो मेरे परीक्षण समय में JQuery के लिए Google सीडीएन के लिए 30 अनुरोध शामिल थे!

(पूछ PhantomJS कैश साझा करने के लिए विन्यस्त किया जा सकता है, या यदि SlimerJS, शायद, एक और StackOverflow सवाल किया जाना चाहिए कर सकते हैं के रूप में मैं बंद हाथ पता नहीं है।)

/** 
* This calls N instances of URL in parallel 
*/ 
var url = "http://example.com/"; 
var N = 30; 

var cnt = 0; 

function onResourceReceived(response) { 
    console.log((Date.now() - startTime) + ':' + response.stage + ':' + response.url); 
} 

function onResourceRequested(requestData, networkRequest) { 
    console.log((Date.now() - startTime) + ':Request:' + requestData.url); 
} 

function onCompletion(status) { 
    ++cnt; 
    console.log((Date.now() - startTime) + ':COMPLETE(' + cnt + '):' + status + ':' + this.url); 
    if (cnt >= N) phantom.exit(); 
} 

var startTime = Date.now(); 
for (var i = 0; i < N; i++) { 
    var page = require('webpage').create(); 
    page.onResourceReceived = onResourceReceived; 
    page.onResourceRequested = onResourceRequested; 
    page.open(url + "?i=" + i, onCompletion); //Append i to allow tracking 
} 
+2

'यदि यह अभी भी आपके लिए समानांतर नहीं है, तो फ़ैंटॉमजेएस के 8 उदाहरण शुरू करने के लिए एक बैश स्क्रिप्ट का उपयोग करें, मैं [समानांतर] के साथ phantomjs का उपयोग करता हूं (https://www.gnu.org/software/parallel /) 3 अलग-अलग संकल्पों में साइटों का एक गुच्छा स्क्रैप/स्क्रीनशॉट करने के लिए, इसलिए यदि आप बैश मार्ग पर जाते हैं, तो समानांतर पर विचार करें। – birdspider

0

पर एक नजर डालें लोड बूस्टर (https://www.loadbooster.com)। यह परीक्षण वितरित करने के लिए फैंटॉमजेएस/कैस्परजे का उपयोग करता है। फैंटॉमजेएस/कैस्परजेएस प्रत्येक पृष्ठ को पार्स और प्रस्तुत करेगा, क्लाइंट-साइड स्क्रिप्ट निष्पादित करेगा। जटिल AJAX भारी वेब 2.0 ऐप का समर्थन करने के लिए फ़ैंटॉमजेएस/कैस्परजेएस दृष्टिकोण टेस्ट परिदृश्य लिखना आसान है।

अस्वीकरण: मैं लोड बूस्टर के लिए काम करता हूं।

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