संक्षिप्त उत्तर:
एसवीजी आपके लिए आसान होगा , चूंकि चयन और इसे चारों ओर ले जाना पहले से ही बनाया गया है। एसवीजी ऑब्जेक्ट डोम ऑब्जेक्ट्स हैं, इसलिए उनके पास हैंडलर आदि हैं।
DIV ठीक हैं, लेकिन क्लूनी हैं और बड़ी संख्या में भयानक प्रदर्शन लोड कर रहे हैं।
कैनवस के पास सबसे अच्छा प्रदर्शन हैंड्स-डाउन है, लेकिन आपको प्रबंधित स्थिति (ऑब्जेक्ट चयन, आदि) की सभी अवधारणाओं को स्वयं लागू करना होगा, या लाइब्रेरी का उपयोग करना होगा।
लंबे उत्तर:
एचटीएमएल 5 कैनवस एक बिट-मैप के लिए बस एक ड्राइंग सतह है। आप आकर्षित करने के लिए सेट करें (एक रंग और रेखा मोटाई के साथ कहें), उस चीज़ को आकर्षित करें, और फिर कैनवास को उस चीज़ का कोई ज्ञान नहीं है: यह नहीं जानता कि यह कहाँ है या यह क्या है कि आपने अभी-अभी खींचा है, यह बस पिक्सेल। यदि आप आयत बनाना चाहते हैं और उन्हें इधर-उधर करना चाहते हैं या चयन करने योग्य हैं, तो आपको उस सभी को खरोंच से कोड करना होगा, जिसमें शामिल हैं कोड यह याद रखना होगा कि आपने उन्हें आकर्षित किया था।
दूसरी ओर एसवीजी को प्रत्येक वस्तु के संदर्भों को बनाए रखना चाहिए जो इसे प्रस्तुत करता है। आपके द्वारा बनाया गया प्रत्येक SVG / VML तत्व DOM में एक वास्तविक तत्व है। डिफ़ॉल्ट रूप से यह आपको आपके द्वारा बनाए गए तत्वों का बेहतर ट्रैक रखने की अनुमति देता है और डिफ़ॉल्ट रूप से माउस घटनाओं जैसी चीजों से निपटना आसान बनाता है, लेकिन बड़ी संख्या में ऑब्जेक्ट होने पर यह काफी धीमा हो जाता है।
उन एसवीजी डोम संदर्भों का मतलब है कि आपके द्वारा खींची गई चीजों से निपटने के कुछ फुटवर्क आपके लिए किए गए हैं। और एसवीजी तेजी से होता है जब वास्तव में बड़ी वस्तुओं का प्रतिपादन होता है , लेकिन कई का प्रतिपादन करते समय धीमी गति से वस्तुओं का ।
कैनवस में एक गेम शायद तेज होगा। एसवीजी में एक विशाल मानचित्र कार्यक्रम संभवतः तेज होगा। यदि आप कैनवस का उपयोग करना चाहते हैं, तो मेरे पास चल वस्तुओं को प्राप्त करने और यहां चलाने के लिए कुछ ट्यूटोरियल हैं ।
कैनवस तेजी से चीजों और भारी बिटमैप हेरफेर (एनीमेशन की तरह) के लिए बेहतर होगा, लेकिन यदि आप बहुत अधिक अन्तरक्रियाशीलता चाहते हैं तो अधिक कोड लेंगे।
मैंने एचटीएमएल डीआईवी-मेड ड्राइंग बनाम कैनवस-मेड ड्राइंग पर संख्याओं का एक समूह चलाया है। मैं प्रत्येक के लाभों के बारे में एक बड़ी पोस्ट बना सकता हूं, लेकिन मैं आपके विशिष्ट आवेदन के लिए विचार करने के लिए अपने परीक्षणों के कुछ प्रासंगिक परिणाम दूंगा:
मैंने कैनवस और एचटीएमएल डीआईवी टेस्ट पेज बनाए, दोनों में जंगम "नोड्स" थे। कैनवास नोड्स वे ऑब्जेक्ट थे जिन्हें मैंने जावास्क्रिप्ट में बनाया और ट्रैक किया था। HTML नोड्स डिवेबल डिवल्स थे।
मैंने अपने प्रत्येक दो परीक्षणों में 100,000 नोड जोड़े। उन्होंने काफी अलग प्रदर्शन किया:
HTML परीक्षण टैब को हमेशा के लिए लोड करने के लिए लिया गया (5 मिनट से थोड़ा कम समय, क्रोम ने पृष्ठ को पहली बार मारने के लिए कहा)। Chrome के टास्क मैनेजर का कहना है कि टैब 168MB तक का समय ले रहा है। यह 12-13% CPU समय लेता है जब मैं इसे देख रहा हूं, 0% जब मैं नहीं देख रहा हूं।
कैनवस टैब एक सेकंड में लोड होता है और 30 एमबी तक होता है। यह हर समय सीपीयू समय का 13% हिस्सा लेता है, चाहे कोई भी इसे देख रहा हो या नहीं। (2013 संपादित करें: उन्होंने ज्यादातर यह तय किया है)
एचटीएमएल पेज पर खींचना आसान है, जो कि डिजाइन द्वारा अपेक्षित है, क्योंकि मौजूदा सेटअप कैनवस परीक्षण में हर 30 मिलीसेकंड को हर बार फिर से तैयार करना है। इसके लिए कैनवस के लिए बहुत सारे अनुकूलन होने थे। (कैनवास अमान्य होना सबसे आसान, क्लिपिंग क्षेत्र, चयनात्मक पुनर्विकास, आदि .. बस इस बात पर निर्भर करता है कि आप कितना लागू करना चाहते हैं)
इसमें कोई संदेह नहीं है कि आप उस सरल परीक्षण में div के रूप में वस्तु हेरफेर में तेजी से कैनवास प्राप्त कर सकते हैं, और निश्चित रूप से लोड समय में बहुत तेजी से। कैनवस में ड्रॉइंग / लोडिंग तेज़ है और ऑप्टिमाइज़ेशन के लिए कहीं अधिक जगह है, भी (यानी, ऑफ-स्क्रीन चीजों को छोड़कर बहुत आसान है)।
निष्कर्ष:
- एसवीजी संभवतः कुछ वस्तुओं (1000 से कम) वाले एप्लिकेशन और एप्लिकेशन के लिए बेहतर है (वास्तव में निर्भर करता है)
- कैनवस हजारों वस्तुओं और सावधान हेरफेर के लिए बेहतर है, लेकिन इसे बंद करने के लिए बहुत अधिक कोड (या पुस्तकालय) की आवश्यकता है।
- HTML डिव्स क्लंकी हैं और स्केल नहीं करते हैं, एक सर्कल बनाना केवल गोल कोनों के साथ संभव है, जटिल आकार बनाना संभव है लेकिन इसमें सैकड़ों छोटे-छोटे पिक्सेल-वाइड डिव शामिल हैं। पागलपन बढ़ता है।