فشردهسازی JSON چیست؟
JSON (نشانهگذاری اشیاء JavaScript) یک فرمت تبادل داده سبک مبتنی بر متن است که توسط RFC 8259 و ECMA-404 تعریف شده است. فشردهسازی هر فاصله، tab و خط جدیدی که خارج از یک رشته متنی قرار دارد را میزداید — مقادیر بایت به بایت حفظ میشوند، فقط فضای خالی تزئینی حذف میشود. خروجی دقیقاً به همان مقدار ورودی تجزیه میشود.
فشردهسازی JSON چگونه کار میکند؟
ورودی شما کاملاً در مرورگر با استفاده از توابع داخلی JSON.parse و JSON.stringify پردازش میشود. مراحل کلی عبارتند از:
- ورودی شما عیناً از textarea خوانده میشود — هر بایتی که الصاق کردهاید بهصورت محلی در حافظه نگه داشته میشود.
- مرورگر آن را با
JSON.parseتجزیه میکند. اگر ورودی JSON معتبر نباشد، پارسر یکSyntaxErrorایجاد میکند که گرفته و عیناً نمایش داده میشود — متن شما هرگز صفحه را ترک نمیکند. - وقتی تجزیه موفق میشود، مقدار تجزیهشده با
JSON.stringify(value)بدون آرگومان indent دوباره منتشر میشود و کوتاهترین فرم معتبر همان مقدار را تولید میکند. - طول بایت هر دو متن اصلی و فشردهشده با
new TextEncoder().encode(...).byteLengthمحاسبه میشود — همان شمارش بایت UTF-8 که یک سرور HTTP روی شبکه میبیند. - خروجی به textarea فقط خواندنی نوشته میشود، نوار متریک تفاوت بایت با درصد صرفهجویی را گزارش میدهد و دکمه دانلود نتیجه را بهعنوان یک فایل
.min.jsonآماده برای ارسال بستهبندی میکند.
چرا JSON را با این ابزار فشرده کنیم؟
- حریم خصوصی: هر مرحله تجزیه، فشردهسازی و متریک در مرورگر شما اجرا میشود. JSON هرگز به سرورهای ما نمیرسد — بدون آپلود، بدون telemetry، بدون حساب کاربری.
- اعداد بایتی واقعی: اندازه اصلی، اندازه فشردهشده و صرفهجویی با TextEncoder محاسبه میشوند تا تفاوتهای واقعی بایت UTF-8 که یک CDN یا API gateway برایتان صورتحساب میدهد را ببینید.
- صفر از دست دادن داده: فشردهسازی کاملاً تزئینی است — هر مقدار به همان درخت JSON تجزیه میشود، بنابراین برای payload های پروداکشن، manifest ها و fixture های تعبیهشده ایمن است.
- سریع:
JSON.parse+JSON.stringifyخالص، payload های معمولی به اندازه کلیپبورد را فوری مدیریت میکنند، بدون هیچ کتابخانه خارجی برای بارگذاری.
کاربردهای رایج فشردهسازی JSON چیست؟
حذف فضاهای خالی بیاهمیت از JSON در سراسر توسعه وب، مهندسی داده و سیستمهای تعبیهشده ظاهر میشود:
- کاهش payload API: بدنههای request و response را قبل از عبور از یک API gateway اندازهگیریشده، یک لینک egress پرداختی یا یک لینک ماهوارهای کوچک کنید.
- جاسازی در HTML: یک blob JSON را در یک attribute
data-*یا یک تگ<script type="application/json">بدون نشت فضای خالی pretty-printer در صفحه رندرشده بگنجانید. - localStorage کوچکتر: با نوشتن JSON فشردهشده به جای JSON زیبا چاپشده، استفاده از سهمیه localStorage / IndexedDB را کاهش دهید، که بهویژه در مرورگرهای موبایل با محدودیتهای ذخیرهسازی سختگیرانه per-origin ارزشمند است.
یک مثال فشردهسازی JSON چگونه است؟
الصاق یک فایل پیکربندی زیبا چاپشده ۱.۲ کیلوبایتی (حدود ۱۲۲۵ بایت با تورفتگی دو فاصله) و فشردن فشردهسازی معمولاً آن را به زیر ۰.۴ کیلوبایت فشرده میکند — صرفهجویی ۶۶٪ — با حفظ دقیق هر کلید و مقدار. فایل دانلودی output.min.json از نظر بایت یکسان با آن چیزی است که یک سرور HTTP با Content-Type: application/json بدون middleware قالببندی منتشر میکند.
آیا این در مرورگر من اجرا میشود؟
بله. pipeline فشردهسازی خالص JSON.parse + JSON.stringify است که داخل تب مرورگر اجرا میشود. هیچ چیز آپلود نمیشود، هیچ service worker ورودی شما را proxy نمیکند و صفحه هیچ درخواست شبکهای برای خود مرحله فشردهسازی نمیکند. تنها ترافیک خروجی asset های بارگذاری صفحه استاندارد (CSS، فونتها، آنالیتیک) هستند — JSON شما هرگز به Ultim8Soft نمیرسد.
چرا JSON را فشرده کنیم؟
JSON فشردهشده دقیقاً به همان مقدار منبع زیبا چاپشده تجزیه میشود اما روی شبکه و در ذخیرهسازی کوچکتر است. payload های کوچکتر به معنای هزینههای egress CDN کمتر، دانلودهای موبایل سریعتر، فشار حافظه کمتر داخل service worker ها و جاسازی بهتر داخل پاکتهای با اندازه ثابت مثل payload های JWT، attribute های HTML data-* تعبیهشده و سهمیههای localStorage هستند. برای API های پرحجم صرفهجویی بایت انباشته میشود — کاهش ۳۰٪ در یک endpoint ۱ گیگابایت در روز تقریباً ۹ گیگابایت در ماه صرفهجویی میکند.
آیا فشردهسازی داده از دست میدهد؟
نه. فشردهسازی JSON فقط فضای خالی که خارج از رشتههای متنی قرار دارد را حذف میکند — فاصلهها، tabها و خطوط جدیدی که spec از قبل آنها را بیاهمیت طبقهبندی کرده است. هر کلید، مقدار، عدد، دنباله escape و کاراکتر رشته بایت به بایت حفظ میشود. خروجی به مقداری تجزیه میشود که deepEqual با ورودی است. تنها تورفتگی تزئینی است که ناپدید میشود.
تفاوت بین قالببند و فشردهساز چیست؟
قالببند همراه JSON Formatter در جهت دیگر میرود: فضای خالی را گسترش میدهد تا انسانها بتوانند ساختارهای تودرتو را بخوانند. فشردهساز آن فضای خالی را برای انتقال و ذخیرهسازی بیرون میکشد. دو ابزار معکوس هم هستند — عبور یک سند JSON از طریق قالببند → فشردهساز همان رشته بایتی که فشردهساز را با آن شروع کردید برمیگرداند، زیرا هر دو روی مقدار تجزیهشده عمل میکنند، نه روی markup تزئینی.
این فشردهساز JSON از همان پارسری که runtime Node.js، Deno یا مرورگر شما استفاده میکند استفاده میکند و خروجیای تولید میکند که از نظر بایت یکسان با آنچه یک سرور HTTP ساده منتشر میکند است. هر JSON را در بالا الصاق کنید، خروجی را کپی کنید یا بهعنوان .min.json دانلود کنید.