2015-02-13 7 views
9

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

प्रतिपादन के आधार पर इन प्रदर्शन मीट्रिक को प्राप्त करने का सबसे अच्छा तरीका क्या है?

उत्तर

9

लघु उत्तर:

कोई एक: ठीक पहले चार्ट कोड निष्पादित

  1. अपने समय शुरू करें और सेटअप एक MutationObserver डोम को देखने के लिए और समय खत्म हो जब सभी उत्परिवर्तन समाप्त हो जाती है।
  2. पता लगाएं कि चार्टिंग लाइब्रेरी ने() ईवेंट किया है या नहीं। (लेकिन सावधान रहें क्योंकि कार्यान्वयन/लाइब्रेरी के आधार पर यह गलत हो सकता है। "किया गया()" दृष्टि से किया जा सकता है, लेकिन पृष्ठभूमि कार्य अभी भी किया जा रहा है। यह चार्ट पूरी तरह से तैयार होने तक अंतःक्रियाशीलता को अजीब होने का कारण बन सकता है)।

लांग उत्तर:

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

जो मुझे प्रदर्शन की उपयोगिता और अंतःक्रियाशीलता पहलू की ओर ले जाता है। हम एक कंप्यूटर का उपयोग कर रहे हैं न कि कागज के टुकड़े पर एक चार्ट; यह यथासंभव इंटरैक्टिव होना चाहिए। हालांकि अंतःक्रियाशीलता की मात्रा बढ़ जाती है, इसलिए लाइब्रेरी के कार्यान्वयन के आधार पर आपका ब्राउज़र मंदी के लिए अतिसंवेदनशील हो सकता है। क्या होगा यदि आपके प्रत्येक मिलियन डेटा पॉइंट इंटरैक्टिव डोम नोड थे? 1 मिलियन डेटा पॉइंट निश्चित रूप से ब्राउज़र को क्रैश करेंगे।

प्रदर्शन चार्टिंग पुस्तकालयों में से अधिकांश प्रदर्शन प्रदर्शन, सटीकता और उपयोगिता के बीच व्यापार के साथ अलग-अलग सौदे करते हैं। यह सब के लिए कार्यान्वयन पर निर्भर करता है।

प्लग/स्रोत: मैं ज़िंगचर्ट में एक डेवलपर हूं और हम अपने ग्राहकों के साथ हर समय बड़े डेटासेट के साथ सौदा करते हैं। ; `वर perfOneLineOneBegin = performance.now(): http://www.zingchart.com/demos/zingchart-vs/

+0

आपके उत्तर के लिए धन्यवाद। हम वास्तव में डेटा की एक महत्वपूर्ण मात्रा का परीक्षण नहीं कर रहे हैं क्योंकि हम इसे किसी भी समय "वास्तव में" मानते हैं, वास्तव में किसी भी समय लगभग 3K डेटा पॉइंट प्रदर्शित किए जाएंगे। इसलिए हम वास्तव में केवल उन डेटा बिंदुओं के साथ परीक्षण कर रहे हैं, लेकिन हम स्क्रीन पर एकाधिक चार्ट के साथ परीक्षण कर रहे हैं। ज़िंगचर्ट्स ने निश्चित रूप से पुस्तकालयों की हमारी छोटी सूची का मूल्यांकन करने के लिए बनाया है, इसलिए मैं आपकी प्रतिक्रिया की सराहना करता हूं। –

1

मेरी विधि वास्तव में मूलभूत है। मैं वर्तमान समय के साथ एक var बना देता हूं, फिर मेरे कोड ब्लॉक और अंतर के अंत तक एक console.log() को कॉल करता हूं।

var start = +new Date(); 
//do lots of cool stuff 
console.log('Rendered in ' + (new Date() - start) + ' ms'); 

बहुत सामान्य और क्या करता है यह टिन पर कहते हैं। यदि आप कोड के प्रत्येक खंड को मापना चाहते हैं तो आपको नए समय स्लॉट बनाना होगा। हां, गणना में समय लगता है। लेकिन यह मापने के लिए कि मैं जिस कोड को मापना चाहता हूं उसकी तुलना में यह छोटा है। jsFiddle पर कार्रवाई में उदाहरण।

+0

वह मूल रूप से है जो मैं अब के साथ कर रहा हूँ: हम भी इस जो सुंदर अपने परीक्षण के लिए प्रासंगिक है का निर्माण किया // सामग्री var perfOneLineOneEnd = performance.now(); console.log ("लाइन चार्ट डब्ल्यू/1 लाइन और 2500 डीपी ने लिया" + (perfOneLineOneEnd - perfOneLineOneBegin) + "मिलीसेकंड।") ' हालांकि, यह स्क्रिप्ट निष्पादन के समय से बाहर है और न कि प्रतिपादन/चित्रकारी पहलू पृष्ठ। तो उदाहरण के लिए यदि मैं चार्ट का एक गुच्छा लोड करता हूं तो मेरा प्रदर्शन .now() 15 मिलीसेकंड की रिपोर्ट कर रहा है, लेकिन हकीकत में इसे दृष्टि से लोड करने में लगभग 6.4 सेकंड लगते हैं। आशा है कि किसी भी भ्रम को साफ़ कर दें। –

+1

मुझे अन्य चार्टिंग libs के बारे में निश्चित नहीं है, लेकिन हाईचार्ट्स में मैं प्रतिपादन समय निर्धारित करने के लिए कॉलबैक का उपयोग करूंगा: '$ (" # कंटेनर ")। उच्चतर (विकल्प, फ़ंक्शन (चार्ट) {console.log (...); }); '- अन्यथा IE8 जैसे ब्राउज़र गलत प्रतिपादन समय लौटा सकता है (डीओएम और जेएस निष्पादन में जोड़ने के लिए एकाधिक धागे के बारे में कुछ)। वैसे भी, हाईचार्ट्स में हमारे पास सरल परीक्षण पृष्ठ है [यहां] (http://www.highcharts.com/studies/performance.php)। बेशक, हाईस्टॉक हाइचार्ट्स की तुलना में अधिक डेटा अंक संभाल सकता है। –

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