अधिक कुशल क्या है - नोडजेस बफर या टाइप किए गए सरणी? बेहतर प्रदर्शन के लिए मुझे क्या उपयोग करना चाहिए? मुझे लगता है कि केवल वे लोग जो वी 8 और नोडजे के अंदरूनी जानते हैं, इस सवाल का जवाब दे सकते हैं।नोडजेस बफर बनाम टाइप किए गए सरणी
उत्तर
यह एक कठिन एक है, लेकिन मुझे लगता है कि यह आप आप कितना डेटा के साथ काम करने की योजना बना रहे उन लोगों के साथ करने की योजना बना रहे हैं और क्या पर निर्भर करेगा?
टाइप किया सरणियों खुद के साथ खेलने के लिए नोड बफ़र्स की जरूरत है, लेकिन कर रहे हैं आसान है और आप 1GB सीमा को दूर कर सकते (kMaxLength = 0x3fffffff)।
यदि आप सामान्य सामान जैसे सेटिंग, सेटिंग, हो रही, स्लाइसिंग इत्यादि कर रहे हैं ... तो टाइप किए गए सरणी प्रदर्शन के लिए आपका सर्वश्रेष्ठ शॉट होना चाहिए, स्मृति नहीं (विशेष रूप से यदि आप फ्लोट और 64 बिट पूर्णांक प्रकार से निपट रहे हैं) ।
अंत में, शायद ही है कि आप क्या करने के लिए इस संदेह पर वास्तविक प्रकाश डाला कर सकते हैं के साथ एक अच्छा बेंचमार्क।
एक Node.js buffer
एक टाइप सरणी से अधिक कुशल होना चाहिए। इसका कारण यह है कि जब कोई नया नोड.जेएस बफर बनाया जाता है तो उसे सभी 0 के लिए प्रारंभ करने की आवश्यकता नहीं होती है। हालांकि, एचटीएमएल 5 spec का कहना है कि टाइप किए गए सरणी के प्रारंभिकरण में उनके मान 0 पर सेट होना चाहिए। स्मृति को आवंटित करना और फिर सभी मेमोरी को 0 में सेट करना अधिक समय लगता है।
अधिकतर अनुप्रयोगों में से किसी एक को चुनने से कोई फर्क नहीं पड़ता। हमेशा के रूप में, शैतान बेंचमार्क में निहित है :) हालांकि, मैं अनुशंसा करता हूं कि आप एक उठाएं और इसके साथ चिपके रहें। यदि आप अक्सर दोनों के बीच आगे बढ़ रहे हैं, तो आप एक प्रदर्शन हिट लेंगे।
नाइस यहाँ चर्चा: https://github.com/joyent/node/issues/4884
कुछ चीजें मुझे लगता है कि उल्लेख के लायक हैं कर रहे हैं:
Buffer
उदाहरणों Uint8Array उदाहरण हैं लेकिन वहाँ ECMAScript 2015 में TypedArray विवरण के लिए के साथ सूक्ष्म असंगतियां हैं उदाहरण के लिए, जबकिArrayBuffer#slice()
टुकड़ा की एक प्रति बनाता है,Buffer#slice()
के कार्यान्वयन के बिना मौजूदा बफर पर प्रतिलिपि बनाता है,Buffer#slice()
को और अधिक कुशल बनाते हैं।- जब
Buffer.allocUnsafe()
औरBuffer.allocUnsafeSlow()
स्मृति का उपयोग नहीं कर ध्यान केंद्रित किया-आउट (के रूप में कई बाहर पहले से ही बताया है) है। तो सुनिश्चित करें कि आप आवंटित स्मृति को पूरी तरह से ओवरराइट करते हैं या जब आप बफर मेमोरी पढ़ते हैं तो पुराने डेटा को लीक करने की अनुमति दे सकते हैं। TypedArrays
तुरंत पढ़ने योग्य नहीं हैं, तो आप उस के लिए एकDataView
की आवश्यकता होगी। जिसका अर्थ है कि यदि आपBuffer
पर माइग्रेट करना चाहते हैं तो आपको अपने कोड को फिर से लिखना होगा। Adapter pattern यहां मदद कर सकता है।- आप पर
Buffer
पर उपयोग कर सकते हैं। आपTypedArrays
पर नहीं जा सकते। इसके अलावा आपके पास क्लासिकentries()
,values()
,keys()
औरlength
समर्थन नहीं होगा। Buffer
फ्रंटेंड में समर्थित नहीं है जबकिTypedArray
अच्छी तरह से हो सकता है। तो यदि आपका कोड फ्रंटेंड या बैकएंड के बीच साझा किया गया है तो आप एक पर चिपकने पर विचार कर सकते हैं।
- 1. टाइप किए गए डेटासेट
- 2. टाइपस्क्रिप्ट टाइप किए गए सरणी उपयोग
- 3. एनम बनाम मजबूत टाइप किए गए enum
- 4. टाइप किए गए मॉडल
- 5. मजबूत टाइप किए गए डेटासेट बनाम कमजोर टाइप किए गए डेटासेट
- 6. मजबूत टाइप किए गए दृश्य बनाम गतिशील टाइप किए गए दृश्य
- 7. टाइप किए गए टाइप टेम्पलेट प्रकार
- 8. टाइप किए गए मेटाप्रोग्रामिंग भाषा
- 9. स्टैनफोर्ड टाइप किए गए पार्सर
- 10. जावास्क्रिप्ट टाइप किए गए सरणी: 64-बिट पूर्णांक?
- 11. टाइप किए गए ऑब्जेक्ट्स का जावास्क्रिप्ट सीरियलाइजेशन
- 12. मजबूत टाइप किए गए गतिशील लिंक सॉर्टिंग
- 13. मजबूत टाइप किए गए रेडियोबटन सूची
- 14. JSON स्कीमा जावास्क्रिप्ट टाइप किए गए ऑब्जेक्ट
- 15. एक मजबूत टाइप किए गए डेटासेट
- 16. फ़ंक्शन पॉइंटर बिना टाइप किए गए
- 17. दृढ़ता से टाइप किए गए एमवीसी
- 18. मजबूत टाइप किए गए विंडोज फॉर्म डेटाबेस
- 19. नोडजेस
- 20. नोडजेस - पहला तर्क एक स्ट्रिंग या बफर होना चाहिए - http.request
- 21. नोडजेस
- 22. हस्ताक्षर किए गए शून्य लिनक्स बनाम विंडोज
- 23. चेक किए गए बनाम अनचेक अपवाद
- 24. जावा मेमोरी-मैप किए गए बाइट बफर का विस्तार
- 25. क्या जावास्क्रिप्ट टाइप किए गए सरणी 0 से शुरू हुई हैं?
- 26. ListBox.ObjectCollection को एक (टाइप किए गए) सरणी में परिवर्तित नहीं कर सकता
- 27. त्रुटि प्राप्त हुई "अंतर्निहित टाइप किए गए सरणी के लिए कोई सर्वश्रेष्ठ प्रकार नहीं मिला"
- 28. बनाम टाइप
- 29. वीबीए: संस्करण सरणी बनाम टाइपर सरणी बनाम गैर-कुंजी संग्रह
- 30. जीएडीटी बनाम मल्टीपार्म टाइप टाइप
ऐसा लगता है [नोड 8] (https://nodejs.org/dist/latest-v8.x/docs/api/buffer।एचटीएमएल # buffer_new_buffer_size) ने सुरक्षा कारणों से इस "फीचर" को हटा दिया है। – styfle