2015-09-17 4 views
11

मैं Benchmark.js का उपयोग कर नमूना प्रदर्शन बेंचमार्क निष्पादित करने का प्रयास कर रहा हूं। यहाँचक्रों की संख्या परिभाषित करें - Benchmark.js

@BenchmarkOptions(clock = Clock.NANO_TIME, callgc = true, benchmarkRounds = 10, warmupRounds = 1) 

भी मैं benchmarkjs में benchmarkRounds और warmupRounds गिनती की घोषणा करना चाहते हैं: जैसे हम JUnitBenchmarks में क्या

var Benchmark = require('benchmark'); 
var arr = [] 
benchmark = new Benchmark('testPerf',function(){ 
    arr.push(1000); 
}, 
{ 
    delay: 0, 
    initCount: 1, 
    minSamples: 1000, 
    onComplete : function(){ console.log(this);}, 
    onCycle: function(){} 
}); 
benchmark.run(); 

अब: यहाँ मैं क्या लिखा है। मुझे लगता है कि warmupRounds नक्शे initCount पर? और चक्र/बेंचमार्क पुनरावृत्ति की सटीक संख्या कैसे सेट करें?

या यदि हमारे पास कुछ अन्य अच्छी जावास्क्रिप्ट लाइब्रेरी है जो इसे संभाल सकती है तो यह भी काम करेगी।

+0

जावास्क्रिप्ट में बेंचमार्किंग एक निश्चित पुनरावृत्ति संख्या का उपयोग कर रहा है [समस्याग्रस्त] (http://calendar.perfplanet.com/2010/bulletproof-javascript-benchmarks/), इसलिए Benchmark.js उस विकल्प की अनुमति नहीं है । इसके बजाए, यह बार-बार परीक्षण चलाता है [जब तक परिणाम उचित रूप से सटीक नहीं माना जा सकता] [http://monsur.hossa.in/2012/12/11/benchmarkjs.html)। – approxiblue

+0

@approxiblue कृपया इस टिप्पणी को उत्तर के रूप में पोस्ट करें। – Tariq

उत्तर

3

निश्चित iterat का उपयोग करना जावास्क्रिप्ट बेंचमार्क में आयन गणना जोखिम भरा है: we might get zero-time results eventually, क्योंकि ब्राउज़र तेज़ी से बन जाते हैं।

Benchmark.js राउंड/पुनरावृत्तियों की संख्या को पहले से सेट करने की अनुमति नहीं देता है। इसके बजाए यह बार-बार परीक्षण चलाता है जब तक कि परिणाम उचित रूप से सटीक नहीं माना जा सकता। आपको code reading by Monsur Hossain देखना चाहिए। लेख से कुछ हाइलाइट्स:

  • Benchmark.js में एक चक्र में वास्तविक परीक्षण के सेट-अप, आंसू-डाउन और एकाधिक पुनरावृत्तियों शामिल होते हैं।
  • Benchmark.js विश्लेषण चरण से शुरू होता है: पुनरावृत्तियों की इष्टतम संख्या को खोजने के लिए कुछ चक्र चलाएं (सटीक परिणामों को उत्पन्न करने के लिए पर्याप्त नमूने एकत्र करते समय जितनी जल्दी हो सके परीक्षण समाप्त करें)।
  • विश्लेषण के दौरान चलने वाले चक्रों की संख्या Benchmark.prototype.cycles में सहेजी गई है।
  • पुनरावृत्तियों की इष्टतम संख्या को जानना, Benchmark.js नमूना चरण से शुरू होता है: परीक्षण चलाता है और वास्तव में परिणाम संग्रहीत करता है।
  • Benchmark.prototype.stats.sample नमूनाकरण के दौरान प्रत्येक चक्र से परिणामों की एक सरणी है।
  • Benchmark.prototype.count नमूनाकरण के दौरान पुनरावृत्तियों की संख्या है।
4

पर डॉक्स से अधिक खोज रहे हैं:

http://benchmarkjs.com/docs

ऐसा लगता है कि आप सही हैं

  1. warmupRounds => initCount (http://benchmarkjs.com/docs#options_initCount)
  2. चक्र =>http://benchmarkjs.com/docs#prototype_cycles
+4

एक चक्र में सेट-अप, आंसू-डाउन, और परीक्षण के कई पुनरावृत्तियों होते हैं। एक चक्र परीक्षण का एक एकल पुनरावृत्ति _not_ नहीं है, जैसा कि [JUnitBenchmarks] में मामला है (http://labs.carrotsearch.com/junit-benchmarks-tutorial.html)। – approxiblue

+1

इसके अलावा, चक्र एक सेटिंग नहीं है, लेकिन केवल पढ़ने के लिए मीट्रिक है। – approxiblue

+0

चक्र अपेक्षा के अनुसार काम नहीं करते हैं। मैंने 'चक्र' परिभाषित किया है: 10 लेकिन समारोह 73 बार निष्पादित किया गया है। ऐसा लगता है कि @approxiblue सही है – Tariq

0

बावजूद अगर यह एक अच्छा विचार है, यदि आप तो कुछ नकारात्मक मूल्यों के minTime और maxTime सेट minSamples और initCount केवल मापदंड के रूप में छोड़ दिया जाएगा और वे #cycles और प्रत्येक चक्र में चला वार्मअप पुनरावृत्तियों के अनुरूप होगा। तो परीक्षण समारोह निष्पादित किया जाएगा (initCount +1) * minSamples बार। कम से कम यही मेरे प्रयोग दिखाते हैं।

var Benchmark = require('benchmark'); 
var counter = 0; 
Benchmark('counting', { 
    'fn': function() { ++counter; }, 
    minSamples: 3, 
    initCount: 1, 
    minTime: -Infinity, 
    maxTime: -Infinity, 
    onCycle: function() { console.log('[onCycle] counter: ' + counter); }, 
    onComplete : function(){ console.log('mean: ' + this.stats.mean);}, 
}).run(); 

मुझे benchmark.js 2.1 देता है।0:

$ node count.js 
[onCycle] counter: 2 
[onCycle] counter: 4 
[onCycle] counter: 6 
mean: 0.0000034683333333333333 
संबंधित मुद्दे