JSON মিনিফাই

JSON-কে ক্ষুদ্রতম বৈধ রূপে মিনিফাই করুন অথবা 2 স্পেস, 4 স্পেস বা ট্যাব দিয়ে প্রিটি-প্রিন্ট করুন। ঐচ্ছিক কী সাজানো, লাইভ বাইট-সাশ্রয় হিসাব, সম্পূর্ণরূপে আপনার ব্রাউজারে চলে।

ডেটা পরিবর্তন করে না এমন প্রতিটি বাইট বাদ দিন। সব ঐচ্ছিক হোয়াইটস্পেস সরাতে JSON পেস্ট করুন, অথবা আপনার পছন্দের ইন্ডেন্টে আবার সাজাতে বিউটিফাই-এ স্যুইচ করুন। কী সাজানো দুটি ডকুমেন্ট তুলনাযোগ্য করে, আর বাইট কাউন্টার দেখায় মিনিফিকেশন আসলে কতটা সাশ্রয় করল।

মিনিফিকেশন কী করে এবং কী করে না

শুধুমাত্র হোয়াইটস্পেস সরানো হয়

JSON-এর ব্যাকরণ যেকোনো দুটি টোকেনের মধ্যে স্পেস, ট্যাব ও নিউলাইন অনুমোদন করে, এবং এগুলোর কোনোটিই অর্থ বহন করে না। মিনিফাই করা মানে সেই ঐচ্ছিক অক্ষরগুলোর প্রতিটি বাদ দেওয়া: {"a": 1, "b": 2} হয়ে যায় {"a":1,"b":2}। পার্স করা মান মেমরিতে বাইট-ফর-বাইট অভিন্ন, তাই পেলোড পাঠানোর আগে এই অপারেশন প্রয়োগ করা সবসময় নিরাপদ।

মিনিফাই করা যা করে না তা হলো ডেটা কমপ্রেস করা। কী নাম, স্ট্রিং কনটেন্ট ও সংখ্যাগত যথার্থতা সব সঠিকভাবে সংরক্ষিত থাকে। আপনার ডকুমেন্ট বড় কারণ দশ হাজার রেকর্ড জুড়ে একই বিশটি ফিল্ড নাম পুনরাবৃত্তি হয়, তাহলে মিনিফিকেশন কেবল ইন্ডেন্টেশন কমাবে কিন্তু পুনরাবৃত্তি স্পর্শ করবে না — সেটি gzip বা ভিন্ন স্কিমার কাজ।

যখন সাশ্রয় আসলেই গুরুত্বপূর্ণ

সাধারণ প্রিটি-প্রিন্টেড API রেসপন্সে হোয়াইটস্পেস মূল আকারের 10% থেকে 30% জুড়ে থাকে। এটি ভালো শোনায় যতক্ষণ না আপনি মনে করেন যে প্রায় প্রতিটি HTTP রেসপন্স ট্রানজিটে ইতোমধ্যে gzip বা brotli-কমপ্রেসড, আর কমপ্রেশন অ্যালগরিদম স্পেসের ধারা অত্যন্ত দক্ষভাবে সামলায়। gzip-এর পরে মিনিফাইড ও ফর্ম্যাটেড JSON-এর মধ্যে পার্থক্য প্রায়ই 2% এর নিচে।

মিনিফিকেশন তিনটি পরিস্থিতিতে এখনও মূল্যবান: HTML পেজ বা JavaScript বান্ডলে সরাসরি এমবেড করা ডেটা, যেখানে এটি আলাদাভাবে কমপ্রেস হয় না; ডাটাবেস কলাম বা ক্যাশে সংরক্ষণ, যেখানে কাঁচা স্ট্রিং-ই জায়গা দখল করে; এবং যেকোনো জায়গায় যেখানে আপনি কঠিন সীমার বিপরীতে অক্ষর গণনা করছেন, যেমন URL প্যারামিটার বা নির্দিষ্ট সীমাসহ একটি মেসেজ ফিল্ড।

তুলনার জন্য কী সাজানো

JSON অবজেক্ট আনুষ্ঠানিকভাবে ক্রমবিহীন, কিন্তু প্রতিটি সিরিয়ালাইজার কোনো না কোনো নির্দিষ্ট ক্রমে কী লেখে, এবং দুটি সিস্টেম খুব কমই একই ক্রম বেছে নেয়। ফলে দুটি যৌক্তিকভাবে অভিন্ন ডকুমেন্টের প্লেইন টেক্সট ডিফ পড়া অসম্ভব হয়ে যায়।

আউটপুটের আগে পুনরাবৃত্তভাবে কী সাজালে উভয় ডকুমেন্ট একই ক্যানোনিকাল আকার পায়, তাই লাইন ডিফ শেষমেশ কেবল প্রকৃত পরিবর্তন দেখায়। রিপ্রোডিউসিবল বিল্ড ও কনটেন্ট-অ্যাড্রেসড ক্যাশিংয়ের পেছনেও এটি একই কৌশল। মনে রাখবেন, সাজানো বাইট আউটপুট পরিবর্তন করে, তাই সাজানো ডকুমেন্ট আর উৎস সিস্টেমের তৈরি ডকুমেন্টের সাথে অভিন্ন থাকে না — সিগনেচার রাউন্ড-ট্রিপের জন্য নয়, তুলনার জন্য এটি ব্যবহার করুন।

ওপেন-সোর্স নোট: তৃতীয়-পক্ষের কোনো লাইব্রেরি ছাড়া ভ্যানিলা JavaScript-এ বাস্তবায়িত।

FAQ

আমার ডেটা কি কোথাও আপলোড হয়?
না। ব্রাউজারের বিল্ট-ইন JSON ফাংশন ব্যবহার করে পার্সিং ও রি-সিরিয়ালাইজেশন সম্পূর্ণ আপনার ব্রাউজারেই ঘটে, তাই ডকুমেন্টটি কখনো পেজ ছেড়ে যায় না।
মিনিফাই করলে কি আমার ডেটা পরিবর্তন হয়?
না। টোকেনগুলোর মধ্যে শুধুমাত্র তুচ্ছ হোয়াইটস্পেস সরানো হয়। প্রতিটি কী, স্ট্রিং, সংখ্যা ও বুলিয়ান অপরিবর্তিত থাকে, এবং পার্স করা মান অভিন্ন।
সাশ্রয় আমার প্রত্যাশার চেয়ে ছোট কেন?
কাউন্টার কাঁচা UTF-8 বাইট মাপে। আপনার JSON যদি ইতোমধ্যে কমপ্যাক্ট হয়, বা এর বেশিরভাগ আকার ইন্ডেন্টেশনের বদলে স্ট্রিং কনটেন্ট হয়, তবে সরানোর মতো হোয়াইটস্পেস সামান্যই থাকে।
আমার সার্ভার ইতোমধ্যে gzip ব্যবহার করলে কি আমার মিনিফাই করা উচিত?
সাধারণত নেটওয়ার্ক পেলোডের জন্য নয় — gzip স্পেসের ধারা খুব দক্ষভাবে কমপ্রেস করে, তাই অতিরিক্ত লাভ প্রায়ই 2% এর নিচে। ইনলাইন বা সংরক্ষিত JSON-এর জন্য এটি এখনও কাজে লাগে।
কী সাজানো কী করে?
এটি প্রতিটি অবজেক্টের কী পুনরাবৃত্তভাবে বর্ণানুক্রমিকভাবে সাজায়। দুটি যৌক্তিকভাবে অভিন্ন ডকুমেন্ট তখন অভিন্ন টেক্সট তৈরি করে, যা প্লেইন লাইন ডিফ ব্যবহারযোগ্য করে তোলে।
বৈধ দেখানো JSON-এ কেন আমার পার্স এরর হলো?
কঠোর ব্যাকরণ ট্রেইলিং কমা, সিঙ্গেল-কোটেড স্ট্রিং, কমেন্ট ও আনকোটেড কী প্রত্যাখ্যান করে। এগুলো JavaScript অবজেক্ট লিটারেলের বৈশিষ্ট্য, JSON নয়।