CPU चक्र, मेमोरी उपयोग, निष्पादन समय, आदि?
जोड़ा गया: क्या जावास्क्रिप्ट में परीक्षण के प्रदर्शन का एक मात्रात्मक तरीका है, इसके अलावा कोड कितनी तेजी से चलता है?
CPU चक्र, मेमोरी उपयोग, निष्पादन समय, आदि?
जोड़ा गया: क्या जावास्क्रिप्ट में परीक्षण के प्रदर्शन का एक मात्रात्मक तरीका है, इसके अलावा कोड कितनी तेजी से चलता है?
जवाबों:
प्रोफाइलर निश्चित रूप से संख्या प्राप्त करने का एक अच्छा तरीका है, लेकिन मेरे अनुभव में, कथित प्रदर्शन उपयोगकर्ता / ग्राहक के लिए मायने रखता है। उदाहरण के लिए, हमारे पास एक एक्सट्रेक्ट के साथ एक प्रोजेक्ट था जो कुछ डेटा दिखाने के लिए विस्तारित हुआ और फिर कुछ नेस्टेड एक्सटिड ग्रिड। सब कुछ वास्तव में बहुत तेजी से प्रदान कर रहा था, एक भी ऑपरेशन में लंबा समय नहीं लगा, बस एक बार में सभी जानकारी प्रदान की जा रही थी, इसलिए यह उपयोगकर्ता को धीमा महसूस हुआ।
हमने इसे 'निर्धारित' किया, न कि किसी तेज़ घटक पर स्विच करके, या किसी विधि का अनुकूलन करके, लेकिन पहले डेटा को रेंडर करके, फिर ग्रिड को एक सेटटाइमआउट के साथ रेंडर करके। तो, जानकारी पहले दिखाई दी, फिर ग्रिड एक दूसरे स्थान पर पॉप हो जाएगी। कुल मिलाकर, इसे इस तरह से करने में थोड़ा अधिक प्रसंस्करण समय लगा, लेकिन उपयोगकर्ता के लिए, कथित प्रदर्शन में सुधार हुआ।
इन दिनों, क्रोम प्रोफाइलर और अन्य उपकरणों, सार्वभौमिक उपयोग के लिए उपलब्ध है और आसान कर रहे हैं के रूप में कर रहे हैं console.time()
, console.profile()
और performance.now()
। Chrome आपको एक समयरेखा दृश्य भी देता है जो आपको दिखा सकता है कि आपकी फ़्रेम दर क्या है, जहाँ उपयोगकर्ता प्रतीक्षा कर रहा है, आदि।
इन सभी उपकरणों के लिए प्रलेखन खोजना वास्तव में आसान है, आपको इसके लिए SO उत्तर की आवश्यकता नहीं है। 7 साल बाद, मैं अभी भी अपने मूल उत्तर की सलाह दोहराऊंगा और आपको बताऊंगा कि आप धीमा कोड हमेशा के लिए चला सकते हैं जहां कोई उपयोगकर्ता इसे नोटिस नहीं करेगा, और जहां वे करते हैं, वहां बहुत तेज कोड चल रहा है, और वे इसके बारे में शिकायत करेंगे बहुत तेज़ कोड पर्याप्त तेज़ नहीं हो रहा है। या कि आपके सर्वर API के लिए आपके अनुरोध ने 220ms लिया। या ऐसा कुछ और। मुद्दा यह है कि यदि आप एक प्रोफाइलर को बाहर निकालते हैं और काम करने की तलाश में जाते हैं, तो आप इसे पा लेंगे, लेकिन यह वह काम नहीं हो सकता है, जिसकी आपके उपयोगकर्ताओं को आवश्यकता है।
मैं मानता हूं कि कथित प्रदर्शन वास्तव में वह सब मायने रखता है। लेकिन कभी-कभी मैं सिर्फ यह जानना चाहता हूं कि कुछ करने की कौन सी विधि तेज है। कभी-कभी अंतर बड़ा और जानने लायक होता है।
आप बस जावास्क्रिप्ट टाइमर का उपयोग कर सकते हैं। लेकिन मैं आम तौर पर देशी क्रोम (अब भी फ़ायरफ़ॉक्स और सफारी में) का उपयोग बहुत अधिक संगत परिणाम devtool तरीकों पाने console.time()
औरconsole.timeEnd()
var iterations = 1000000;
console.time('Function #1');
for(var i = 0; i < iterations; i++ ){
functionOne();
};
console.timeEnd('Function #1')
console.time('Function #2');
for(var i = 0; i < iterations; i++ ){
functionTwo();
};
console.timeEnd('Function #2')
क्रोम कैनरी ने हाल ही में लाइन स्तर जोड़ा है जो देव उपकरण स्रोतों टैब को प्रोफाइलिंग करता है जो आपको यह देखने देता है कि प्रत्येक लाइन को निष्पादित करने में कितना समय लगा!
हम हमेशा किसी भी फ़ंक्शन द्वारा लिए गए समय को साधारण दिनांक ऑब्जेक्ट द्वारा माप सकते हैं ।
var start = +new Date(); // log start timestamp
function1();
var end = +new Date(); // log end timestamp
var diff = end - start;
performance.now()
प्रयास करें jsPerf । यह बेंचमार्किंग और कोड के स्निपेट्स की तुलना करने के लिए एक ऑनलाइन जावास्क्रिप्ट प्रदर्शन उपकरण है। मैं इसका हर समय उपयोग करता हूं।
%timeit
एक ipython
REPL शेल में इसी तरह का उपयोग करता हूं ।
अधिकांश ब्राउज़र अब उच्च रिज़ॉल्यूशन टाइमिंग को लागू कर रहे हैं performance.now()
। यह new Date()
प्रदर्शन परीक्षण के लिए बेहतर है क्योंकि यह सिस्टम घड़ी से स्वतंत्र रूप से संचालित होता है।
प्रयोग
var start = performance.now();
// code being timed...
var duration = performance.now() - start;
संदर्भ
performance.now()
।
JSLitmus एड-हॉक जावास्क्रिप्ट बेंचमार्क परीक्षण बनाने के लिए एक हल्का उपकरण है
बीच function expression
और प्रदर्शन की जाँच करें function constructor
:
<script src="JSLitmus.js"></script>
<script>
JSLitmus.test("new Function ... ", function() {
return new Function("for(var i=0; i<100; i++) {}");
});
JSLitmus.test("function() ...", function() {
return (function() { for(var i=0; i<100; i++) {} });
});
</script>
मैंने जो ऊपर किया वह एक ही ऑपरेशन बनाना function expression
और function constructor
प्रदर्शन करना है। परिणाम इस प्रकार है:
फ़ायर्फ़ॉक्स प्रदर्शन परिणाम
IE प्रदर्शन परिणाम
कुछ लोग विशिष्ट प्लग-इन और / या ब्राउज़र का सुझाव दे रहे हैं। मैं क्योंकि वे केवल कर रहे हैं नहीं होगा वास्तव में है कि एक मंच के लिए उपयोगी; फ़ायरफ़ॉक्स पर एक परीक्षण रन IE7 के लिए सही अनुवाद नहीं होगा। 99.999999% साइटों को ध्यान में रखते हुए एक से अधिक ब्राउज़र उन्हें मिलते हैं, आपको सभी लोकप्रिय प्लेटफार्मों पर प्रदर्शन की जांच करने की आवश्यकता होती है।
मेरा सुझाव इसे जेएस में रखना होगा। निष्पादन पर और समय पर अपने सभी जेएस परीक्षण के साथ एक बेंचमार्किंग पेज बनाएं। आप इसे पूरी तरह से स्वचालित रखने के लिए आपको AJAX-पश्चात परिणाम वापस भेज सकते हैं।
फिर बस कुल्ला और विभिन्न प्लेटफार्मों पर दोहराएं।
मेरे पास एक छोटा उपकरण है जहां मैं ब्राउज़र में छोटे परीक्षण-मामलों को जल्दी से चला सकता हूं और तुरंत परिणाम प्राप्त कर सकता हूं:
आप कोड के साथ खेल सकते हैं और पता लगा सकते हैं कि परीक्षण किए गए ब्राउज़र में कौन सी तकनीक बेहतर है।
मुझे लगता है कि जावास्क्रिप्ट प्रदर्शन (समय) परीक्षण काफी पर्याप्त है। मुझे यहां जावास्क्रिप्ट प्रदर्शन परीक्षण के बारे में बहुत आसान लेख मिला ।
आप इस का उपयोग कर सकते हैं: http://getfirebug.com/js.html । इसमें जावास्क्रिप्ट के लिए एक प्रोफाइलर है।
शीघ्र जवाब
JQuery पर (विशेष रूप से Sizzle पर), हम इसका उपयोग करते हैं (चेकआउट मास्टर और आपके ब्राउज़र पर खुली गति / index.html), जो बदले में उपयोग करता है। बेंचमार्क.जेएस । यह लाइब्रेरी का प्रदर्शन करने के लिए उपयोग किया जाता है।
लंबा जवाब
यदि पाठक बेंचमार्क, वर्कलोड और प्रोफाइलरों के बीच अंतर नहीं जानता है, तो पहले spec.org के "रीडमी 1" अनुभाग पर कुछ प्रदर्शन परीक्षण नींव पढ़ें । यह सिस्टम टेस्टिंग के लिए है, लेकिन इस नींव को समझने से जेएस परफेक्ट टेस्टिंग में भी मदद मिलेगी। कुछ मुख्य बातें:
एक बेंचमार्क क्या है?
एक बेंचमार्क "माप या मूल्यांकन का एक मानक" (वेबस्टर का दूसरा शब्दकोश) है। एक कंप्यूटर बेंचमार्क आम तौर पर एक कंप्यूटर प्रोग्राम होता है, जो संचालन के एक कड़ाई से परिभाषित सेट - एक वर्कलोड - और परिणाम का कुछ रूप देता है - एक मीट्रिक - यह बताता है कि परीक्षण किए गए कंप्यूटर ने कैसे प्रदर्शन किया। कंप्यूटर बेंचमार्क मैट्रिक्स आमतौर पर गति को मापते हैं: काम का बोझ कितनी तेजी से पूरा होता था; या थ्रूपुट: कितने कार्यभार प्रति यूनिट समय पूरा हुआ। कई कंप्यूटरों पर एक ही कंप्यूटर बेंचमार्क चलाना तुलना करने की अनुमति देता है।
क्या मुझे अपना आवेदन बेंचमार्क करना चाहिए?
आदर्श रूप में, सिस्टम के लिए सबसे अच्छा तुलना परीक्षण आपके अपने कार्यभार के साथ आपका अपना आवेदन होगा। दुर्भाग्य से, अपने स्वयं के कार्यभार के साथ अपने स्वयं के अनुप्रयोग का उपयोग करके विभिन्न प्रणालियों के लिए विश्वसनीय, दोहराने योग्य और तुलनीय माप का एक विस्तृत आधार प्राप्त करना अक्सर अव्यावहारिक होता है। समस्याओं में एक अच्छा परीक्षण मामले की पीढ़ी, गोपनीयता की चिंता, तुलनीय स्थिति, समय, धन या अन्य बाधाओं को सुनिश्चित करने में कठिनाई शामिल हो सकती है।
यदि मेरा अपना आवेदन नहीं है, तो क्या?
आप संदर्भ बिंदु के रूप में मानकीकृत बेंचमार्क का उपयोग करने पर विचार कर सकते हैं। आदर्श रूप से, एक मानक बेंचमार्क पोर्टेबल होगा, और पहले से ही उन प्लेटफार्मों पर चलाया जा सकता है जिन्हें आप में रुचि रखते हैं। हालांकि, इससे पहले कि आप परिणामों पर विचार करें आपको यह सुनिश्चित करने की आवश्यकता है कि आप अपने आवेदन / कंप्यूटिंग की जरूरतों और क्या जरूरतों के बीच संबंध को समझते हैं। बेंचमार्क माप रहा है। क्या बेंचमार्क आपके द्वारा चलाए जा रहे अनुप्रयोगों के प्रकार के समान हैं? क्या कार्यभार में समान विशेषताएं हैं? इन सवालों के आपके जवाबों के आधार पर, आप यह देखना शुरू कर सकते हैं कि बेंचमार्क आपकी वास्तविकता का अनुमान कैसे लगा सकता है।
नोट: एक मानक बेंचमार्क संदर्भ बिंदु के रूप में काम कर सकता है। फिर भी, जब आप विक्रेता या उत्पाद का चयन कर रहे होते हैं, तो कल्पना यह दावा नहीं करती है कि कोई भी मानकीकृत बेंचमार्क आपके वास्तविक आवेदन को बेंचमार्किंग की जगह ले सकता है।
प्रदर्शन परीक्षण जेएस
आदर्श रूप से, सबसे अच्छा पूर्ण परीक्षण आपके स्वयं के कार्यभार स्विचिंग के साथ अपने स्वयं के अनुप्रयोग का उपयोग करेगा जो आपको परीक्षण करने की आवश्यकता है: विभिन्न पुस्तकालयों, मशीनों आदि।
यदि यह संभव नहीं है (और आमतौर पर यह नहीं है)। पहला महत्वपूर्ण कदम: अपने कार्यभार को परिभाषित करें। यह आपके एप्लिकेशन के कार्यभार को प्रतिबिंबित करना चाहिए। में इस बात , Vyacheslav Egorov shitty वर्कलोड आप से बचना चाहिए के बारे में बात करती है।
फिर, आप मैट्रिक्स इकट्ठा करने में सहायता के लिए बेंचमार्क.ज जैसे टूल का उपयोग कर सकते हैं, आमतौर पर गति या थ्रूपुट। Sizzle पर, हम इस बात की तुलना करने में रुचि रखते हैं कि फ़िक्सेस या परिवर्तन लाइब्रेरी के सिस्टमेटिक प्रदर्शन को कैसे प्रभावित करते हैं।
यदि कोई चीज वास्तव में खराब प्रदर्शन कर रही है, तो आपका अगला कदम अड़चनों की तलाश करना है।
मुझे अड़चनें कैसे आती हैं? profilers
जावास्क्रिप्ट निष्पादन को प्रोफाइल करने का सबसे अच्छा तरीका क्या है?
आप फायरबग में कंसोल.प्रोफाइल का उपयोग कर सकते हैं
मैं आमतौर पर सिर्फ जावास्क्रिप्ट प्रदर्शन का परीक्षण करता हूं, कितनी लंबी स्क्रिप्ट चलती है। jQuery Lover ने javascript कोड के प्रदर्शन के परीक्षण के लिए एक अच्छा लेख लिंक दिया , लेकिन लेख केवल यह बताता है कि आपके javascript कोड का परीक्षण कितने समय तक चलता है। मैं " विशाल डेटा सेट के साथ काम करते हुए अपने jQuery कोड को बेहतर बनाने के लिए 5 युक्तियां" नामक लेख पढ़ने की भी सिफारिश करूंगा ।
यहाँ समय प्रदर्शन के लिए एक पुन: प्रयोज्य वर्ग है। उदाहरण कोड में शामिल है:
/*
Help track time lapse - tells you the time difference between each "check()" and since the "start()"
*/
var TimeCapture = function () {
var start = new Date().getTime();
var last = start;
var now = start;
this.start = function () {
start = new Date().getTime();
};
this.check = function (message) {
now = (new Date().getTime());
console.log(message, 'START:', now - start, 'LAST:', now - last);
last = now;
};
};
//Example:
var time = new TimeCapture();
//begin tracking time
time.start();
//...do stuff
time.check('say something here')//look at your console for output
//..do more stuff
time.check('say something else')//look at your console for output
//..do more stuff
time.check('say something else one more time')//look at your console for output
UX Profiler इस समस्या को उपयोगकर्ता के दृष्टिकोण से देखता है। यह कुछ उपयोगकर्ता कार्रवाई (क्लिक) के कारण होने वाली सभी ब्राउज़र घटनाओं, नेटवर्क गतिविधि आदि को समूहीकृत करता है और विलंबता, समय सीमा आदि जैसे सभी पहलुओं को ध्यान में रखता है।
मैं भी कुछ ऐसा ही देख रहा था लेकिन यह पाया।
यह एक पक्ष की तुलना करने की अनुमति देता है और फिर आप परिणाम भी साझा कर सकते हैं।
किसी भी परिस्थिति में सुनहरा नियम आपके उपयोगकर्ताओं के ब्राउज़र को लॉक नहीं करता है। उसके बाद, मैं आमतौर पर निष्पादन के समय को देखता हूं, इसके बाद मेमोरी का उपयोग करता है (जब तक कि आप कुछ पागल नहीं कर रहे हैं, उस स्थिति में यह एक उच्च प्राथमिकता हो सकती है)।
प्रदर्शन परीक्षण कुछ देर से चर्चा का विषय बन गया लेकिन यह कहना नहीं है कि प्रदर्शन परीक्षण QA में या उत्पाद के भेजे जाने के बाद भी महत्वपूर्ण प्रक्रिया नहीं है। और जब मैं ऐप विकसित करता हूं तो मैं कई अलग-अलग टूल का उपयोग करता हूं, उनमें से कुछ क्रोम प्रोफाइलर की तरह ऊपर वर्णित हैं मैं आमतौर पर सास या किसी ऐसे ओपनसोर्स से देखता हूं जिसे मैं प्राप्त कर सकता हूं और इसके बारे में भूल सकता हूं जब तक कि मुझे यह चेतावनी न मिल जाए कि कुछ गड़बड़ हो गई है ।
बहुत सारे भयानक उपकरण हैं जो आपको कुछ मूल बातें अलर्ट प्राप्त करने के लिए केवल हुप्स के माध्यम से कूदने के बिना प्रदर्शन पर नज़र रखने में मदद करेंगे। यहाँ कुछ हैं जो मुझे लगता है कि खुद के लिए जाँच करने के लायक हैं।
एक स्पष्ट चित्र को आज़माने और चित्रित करने के लिए, प्रतिक्रिया अनुप्रयोग के लिए निगरानी कैसे सेट करें , इस पर थोड़ा ट्यूटोरियल है।
यह विशिष्ट ऑपरेशन के लिए प्रदर्शन की जानकारी एकत्र करने का एक अच्छा तरीका है।
start = new Date().getTime();
for (var n = 0; n < maxCount; n++) {
/* perform the operation to be measured *//
}
elapsed = new Date().getTime() - start;
assert(true,"Measured time: " + elapsed);