2011-10-11 7 views
6

मुझे ऐसा लगता है, लेकिन मुझे इसे साबित करने की आवश्यकता है।putImageData (...) drawImage (...) से अधिक प्रदर्शनकारी है?

मुझे लगता है, यह फ़्लैश और इसके बिटमैप बनाम बिटमैपडाटा के समान ही मामला है। असल में, बिटमैपडाटा बिटमैप में डेटा का एक गैर-दृश्य निकालना है, जो बहुत ही आसान और तेज कुशलता के लिए अनुमति देता है।

मुझे लगता है कि गेम के रूप में उच्च प्रदर्शन समाधानों के लिए, प्रत्येक छवि (उदाहरण के लिए, प्रत्येक स्प्राइट) से छविडेटा निकालने के लिए, और इसे "संपत्ति" शब्दकोश में कैशिंग करना स्प्रेइट्स को स्वयं खींचने से बेहतर समाधान है कैनवास बार-बार।

क्या कोई इसे साबित कर सकता है?

उत्तर

7

मैं इस परीक्षण एक साथ डालने के लिए कोई क्रेडिट ले, लेकिन आप स्पष्ट रूप से दोनों एक कैनवास और एक छवि के साथ-साथ यहां putImageData() के प्रदर्शन से drawImage() का उपयोग करने का प्रदर्शन देख सकते हैं:

http://jsperf.com/canvas-drawimage-vs-putimagedata/3

के रूप में अभी, drawImage()putImageData() से बहुत तेज है। आखिर में मैंने सुना, यह इरादा नहीं था और ब्राउज़र डेवलपर्स प्रदर्शन अंतर में सुधार करने के लिए देख रहे थे।

+0

मैं देखता हूं। मेरा ब्राउज़र वही दिखाता है। हालांकि, यह ज्यादा समझ में नहीं आता है। मुझे उम्मीद थी कि इमेजडाटा का उपयोग करके हेरफेर बनाना एक छवि खोलने, इसके डेटा निकालने और इसे कैनवास पर डालने से कहीं ज्यादा तेज है। कम से कम, फ्लैश में, बिटमैपडाटा में हेरफेर करना प्रदर्शन संचालन करने के लिए पसंदीदा तरीका है – user802232

+1

क्लासिकल फ्लैश (नया स्टेज 3 डी/मोलहिल सामान नहीं) जिस तरह से चीजों को अनुकूलित करता है, सब कुछ मुख्य स्मृति में है और फिर इसे ग्राफिक्स मेमोरी में कॉपी करें। कैनवस मुख्य रूप से ग्राफिक्स मेमोरी (ब्राउज़र/संस्करण/चंद्रमा चरण के आधार पर) में रहते हैं और जावास्क्रिप्ट के माध्यम से पिक्सेल को संशोधित करने के लिए इमेजेडाटा को मुख्य मेमोरी में कॉपी करने की आवश्यकता होगी। फिर उस इमेजेटा को आकर्षित करने के लिए आपको इसे वापस ग्राफिक्स मेमोरी में कॉपी करने की आवश्यकता है। – Gabe

+0

मुख्य सीपीयू से ग्राफिक्स मेमोरी पढ़ना लगभग सभी वीडियो कार्डों पर बेहद धीमा है ... पीएस 3 पर सेल से आरएसएक्स मेमोरी पढ़ने के लिए चश्मा देखें (4 जीबी/एस लिखने बनाम 16 एमबी/एस पढ़ें {{256 गुना धीमा!} }) http://www.ps3devwiki.com/index.php?title=RSX%23Speed.2C_Bandwidth.2C_and_Latency#speed_table (सेल मुख्य सीपीयू है और आरएसएक्स एक एनवीडिया-डिज़ाइन किया गया जीपीयू है) – Gabe

1

http://jsperf.com/ बिल्कुल इस तरह की तुलना के लिए महान उपकरण प्रदान करता है, इसे जांचें, मुझे लगता है कि आपको इसकी ज़रूरत है।

0

इसके अलावा, putImageData जब एक ही मूल-पुलिस

0

breaked है बड़ा कैनवस मैंने पाया कि यह एक अंतर के रूप में ज्यादा नहीं था के लिए काम नहीं है, लेकिन निश्चित रूप से putImageData कैनवस कॉपी करने के लिए drawImage के रूप में के रूप में performant नहीं है ।

यहाँ कुछ परीक्षण मामलों मैं प्रयोग किया जाता हैं: http://jsperf.com/canvas-size-test-case/3

मैं समग्र स्रोत कैनवास आकार के साथ कुछ प्रदर्शन समस्या हो रही अंत किया था, मैं वास्तव में कॉपी करने कर रहा हूँ डेटा के आकार की परवाह किए बिना।

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