2010-02-12 19 views
8

मैं प्रसंस्करण के माध्यम से एक पेंट ब्रश एप्लिकेशन विकसित करने की कोशिश कर रहा हूं। इस एपीआई में लोड पिक्सल() है जो आरजीबी मानों को सरणी में लोड करेगा। अब मैं सर्वर डीबी में सरणी को स्टोर करना चाहता हूं।जावास्क्रिप्ट क्लाइंट-डेटा संपीड़न

समस्या सरणी का आकार है, जब मैं एक स्ट्रिंग में कनवर्ट करता हूं तो आकार 5 एमबी है।

क्या जावास्क्रिप्ट स्तर पर संपीड़न करना सबसे अच्छा समाधान है? यह कैसे करना है?

उत्तर

8

LZW संपीड़न उदाहरण के लिए http://rosettacode.org/wiki/LZW_compression#JavaScript देखें। यह दोहराए गए पैटर्न के साथ लंबे तारों पर सबसे अच्छा काम करता है।

एक शब्दकोश स्पष्ट छोड़कर एकल चरित्र तार सभी संभव इनपुट पात्रों के लिए इसी (और कुछ नहीं होते हैं और कोड रोक अगर को आरंभ नहीं हो जाता:

LZW पर Wikipedia article से

उनका उपयोग किया जा रहा है)। एल्गोरिदम इनपुट स्ट्रिंग द्वारा क्रमशः लंबे समय तक सबस्ट्रिंग्स के लिए स्कैन करके काम करता है जब तक कि यह शब्दकोश में नहीं मिलता है। जब इस तरह के एक स्ट्रिंग पाया जाता है, स्ट्रिंग कम पिछले चरित्र के लिए सूचकांक (यानी, सबसे लंबे समय तक सबस्ट्रिंग शब्दकोश में है कि) शब्दकोश से लिया गया है और उत्पादन के लिए भेजा है, और नया स्ट्रिंग (सहित अंतिम वर्ण) को अगले उपलब्ध कोड के साथ में जोड़ा गया है। अंतिम इनपुट वर्ण को सबस्ट्रिंग्स के लिए स्कैन करने के लिए अगले प्रारंभिक बिंदु के रूप में उपयोग किया जाता है।

इस तरह, क्रमिक अब तार शब्दकोश में पंजीकृत और एकल उत्पादन मूल्यों के रूप में बाद एन्कोडिंग के लिए उपलब्ध कराया जाता है। एल्गोरिदम डेटा दोहराए गए पैटर्न के साथ सबसे अच्छा काम करता है, इसलिए किसी संदेश के प्रारंभिक भाग थोड़ा संपीड़न देखेंगे। चूंकि संदेश बढ़ता है, हालांकि, संपीड़न अनुपात अधिकतम पर असम्बद्ध रूप से रहता है।

+1

मेरे मामले में यह वास्तविक आकार – Soft

+0

@ सॉफ़्ट का 33% तक कम हो गया, यह बहुत अच्छा है! खुशी हुई यह मदद की। –

+1

यह कार्यान्वयन कुछ मामलों में काम नहीं करता है। मैं HTML का एक बड़ा हिस्सा एन्कोड कर रहा था और यह ठीक से डीकोडिंग नहीं कर रहा था। वापस लौट रहा है। इसके बजाय इस कार्यान्वयन का उपयोग करें: https://gist.github.com/revolunet/843889 – shrimpwagon

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