2016-12-06 7 views
8

मैं एक एचस्केल एप्लिकेशन पर काम कर रहा हूं, जीएचसीजेएस के साथ संकलित ब्राउज़र में चल रहा है, जो सर्वर के साथ संचार करता है, जो वेबस्केट्स पर हास्केल में भी लिखा जाता है। दोनों प्रोग्राम समान हास्केल डेटा प्रकार परिभाषा साझा करते हैं, और मुझे "बस" को क्रमबद्धता प्रारूप चुनना है।वेबकॉकेट्स पर जीएचसीजेएस कोड के लिए सबसे कुशल वायर प्रारूप

फिलहाल, सादगी के लिए, कार्यक्रम Read और Show पर चलता है, जो काम करता है, लेकिन स्पष्ट रूप से आदर्श नहीं है।

दूसरी ओर, यह स्पष्ट नहीं है कि cereal लाइब्रेरी जैसे तेज धारावाहिक के लिए सामान्य दावेदार, जो ByteStrings पर काम करते हैं, वास्तव में जीएचसीजेएस में कुशल होने जा रहे हैं। इसके अलावा, जीएचसीजेएस की एपीआई ByteStrings द्विआधारी Blob प्रकार के साथ इंटरैक्ट करने के लिए मुश्किल बनाती है, जो कि वेबसाइकिलों को जावास्क्रिप्ट बाइंडिंग प्रदान करता है।

जेनेरिक कोड जनरेशन (GHC.Generics का उपयोग करके) अच्छा होगा।

क्या किसी ने इस समस्या को हल किया है? संभावित रूप से जीएचसीजेएस पर विभिन्न धारावाहिक रूपों को भी बेंचमार्क किया गया है?

+1

मैंने अभी अनाज का उपयोग किया था। मैं क्लाइंट पर रिफ्लेक्स-फ्रैप का उपयोग कर रहा था, जिसने मूल रूप से बाइटस्ट्रिंग के इनपुट इवेंट और बाइटस्ट्रिंग के आउटपुट इवेंट के रूप में एक वेबसाकेट देखने का एक तरीका प्रदान किया। हालांकि वास्तव में मेरे पास कोई विशेष प्रदर्शन आवश्यकता नहीं थी, और मैंने बेंचमार्क नहीं किया; मेरे पास पहले से ही झूठ बोलने वाले टुकड़े थे (वैसे भी अनाज का उपयोग कर रहे थे), और यह अभी काम किया, इसलिए मुझे बस इतना ही चाहिए। – Ben

+0

मान लीजिए कि मुझे अपने वेबसाइकिल बाइंडिंग के लिए 'रिफ्लेक्स-एफआरपी' देखना चाहिए। –

+1

मुझे अब याद है कि मैं हैकेज की बजाय 'https: // github.com/reflex-frp/reflex-platform' का उपयोग कर रहा था, और मुझे तब तक कुछ निराशा हुई जब तक मुझे पता चला कि इसमें शामिल वेबसाइकिल सामग्री महत्वपूर्ण थी उस समय हैकेज पर रिलीज़ होने से अलग (कुछ महीने पहले)। – Ben

उत्तर

1

हम पिछले साल रेडिस कैश में डेटा स्टोर करने के लिए हास्केल में एक तेज धारावाहिक/deserializer लाइब्रेरी की तलाश में थे और अंततः हम ProtoBuf का उपयोग कर समाप्त हो गया! वह आंशिक रूप से था क्योंकि हमारे पास पहले से ही उन सभी वस्तुओं का प्रोटोबुफ कार्यान्वयन था जिसे हम क्रमबद्ध करना चाहते थे, लेकिन प्रदर्शन अनाज/बाइनरी की तुलना में भी बेहतर था। उस समय तक, store मौजूद नहीं था।

क्रमबद्धता/deserialization का आकार और गति आपके डेटा पर भी निर्भर करता है। उदाहरण के लिए, यदि आपके पास बहुत कम है (श्रेणी 1 से 100 में कहें) 64 बिट संख्याएं, प्रोटोबफ (base 128 variant एन्कोडिंग की वजह से) या यहां तक ​​कि जेएसओएन अनाज या बाइनरी से भी अधिक कुशल हो सकता है (जो मुझे लगता है कि एक निश्चित आकार का उपयोग करें संख्या उनके मूल्यों के बावजूद)।

Typed-Wire भी है जो आपको कुछ भाषाओं में क्रमबद्ध करने की अनुमति देता है, लेकिन मुझे लगता है कि यह अंतर्निहित कार्यान्वयन के रूप में JSON का उपयोग करता है।

मुझे जीएचसीजेएस के साथ कोई अनुभव नहीं है, लेकिन मैं पहले store को आजमाने की सलाह दूंगा। बस सुनिश्चित करें कि क्लाइंट और सर्वर की कोई छोटी/बड़ी अंतहीनता असंगतता नहीं है।

+0

'स्टोर' लाइब्रेरी के स्वचालित रूप से व्युत्पन्न 'जेनेरिक' उदाहरण एंडियन-सुरक्षित होंगे? –

+0

जहां तक ​​मुझे याद है, 'स्टोर' का मानना ​​है कि दोनों एन्कोडर और डिकोडर के समान एंडियन (प्रदर्शन के लिए) है। अधिकांश अन्य एन्कोडिंग पुस्तकालय उस धारणा को नहीं बनाते हैं। इससे कोई फर्क नहीं पड़ता कि आप सामान्य कार्यान्वयन का उपयोग करते हैं या नहीं, क्योंकि बुनियादी प्रकारों के उदाहरण आम तौर पर मैन्युअल रूप से लागू होते हैं। – Hapal

+0

वैसे, यदि आप जेएस पक्ष पर प्रदर्शन की तलाश में हैं, तो आप मूल JSON कार्यान्वयन से भी लाभ उठा सकते हैं। मुझे यकीन नहीं है कि आप जीएचसीजेएस में एसन जैसे कुछ के बजाय मूल JSON डिकोडर का उपयोग कैसे कर सकते हैं, लेकिन यह करने योग्य होना चाहिए। – Hapal

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