Tag Archives: فشرده سازی

فایل آرشیو Archive File

فایل آرشیو یا Archive File چیست؟

فایل آرشیو (Archive File) فایلی است که از یک یا چند فایل رایانه ای تشکیل شده است. معمولا از این نوع فایل ها برای ذخیره سازی تعدادی فایل مختلف در قالب فایلی واحد یا به منظور فشرده سازی فایل‌ها استفاده می‌شود. آرشیو کردن فایل ها باعث تسهیل انتقال، به اشتراک گذاری و نگه داری آن‌ها می‌شود.

فایل های آرشیو علاوه بر فایل هایی که در خود جای داده‌اند معمولا شامل فراداده هایی در مورد ساختار دایرکتوری ها، اطلاعات لازم برای شناسایی و تصحیح خطا و … نیز می‌باشند.

از جمله مهم‌ترین و رایج‌ترین پسوندهای فایل آرشیو می‌توان به zip و rar و tar و 7z و iso اشاره کرد. برای ایجاد و ویرایش فایل های آرشیو از برنامه هایی موسوم به File Archiver استفاده می‌شود که معمولا به صورت پیشفرض نمونه‌هایی از آن‌ها در سیستم عامل های مختلف وجود دارد. WinRAR و 7-Zip و WinZip از جمله مشهورترین این نرم افزارها هستند.

کاربردهای رایج فایل های آرشیو

همان‌طور که گفته شد آرشیو کردن یکی از روش‌های مناسب برای انتقال فایل ها و دایرکتوری های دربرگیرنده آن‌هاست؛ به خصوص در مورد برخی کانال های ارتباطی که برای انتقال فایل ها محدودیت هایی را برای کاربر ایجاد می‌کنند. به عنوان مثال از آنجایی که در پیام رسان های فوری و پیام های ایمیل امکان ارسال فایل ها با حفظ ساختار دایرکتوری وجود ندارد آرشیو کردن فایل ها می‌تواند راهکار مناسبی برای حل این مشکل باشد.

کاربرد رایج دیگری که برای بسیاری از فرمت های Archive تعریف می‌شود امکان فشرده سازی فایل هاست. فرمت هایی که از این قابلیت پشتیبانی می‌کنند مجموعه‌ای از فایل ها را در قالب فایلی با حجم کمتر آرشیو می‌کنند. استفاده از این فایل ها علاوه بر اینکه امکان ارسال سریع و آسان محتوای موردنظر را فراهم می‌کند بلکه فضای لازم برای نگه داری فایل ها را نیز کاهش می‌دهد.

همچنین بسیاری از نرم افزارها در قالب یک فایل آرشیوی توزیع می‌شوند. این فایل ها که با نام پکیج (Package) شناخته می‌شوند ممکن است شامل سورس کد یا فایل اجرایی نرم افزار باشند. از جمله این نوع فایل ها می‌توان به فایل های با فرمت APK (برای اندروید) و JAR (برای جاوا) اشاره کرد.

علاوه بر مواردی که به آن اشاره شد بسته به فرمت آرشیو، ممکن است از آن برای رمزنگاری فایل ها، تقسیم فایل های بزرگ به تعدادی فایل کوچک‌تر و ایجاد Disk Image (نظیر فایل هایی با فرمت ISO) نیز استفاده شود.

فایل آرشیو Archive File
یک فایل آرشیو با فرمت zip (سمت چپ) که حاوی پنج فایل با پسوند jpg است (سمت راست).

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپیدیا

کمینه سازی Minification

کمینه سازی یا Minification چیست؟

کمینه سازی سورس کد یا به اختصار کمینه سازی (Minification) اصطلاحی در حوزه برنامه نویسی است و به فرایندی گفته می‌شود که طی آن تمامی اجزا و کاراکترهای غیرضروری از سورس کد حذف می‌شود. کمینه سازی علاوه بر اینکه در نتیجه اجرای سورس کد اختلال یا تغییری به وجود نمی‌آورد، حجم فایل مربوطه را نیز کاهش می‌دهد. گاهی اوقات از واژه Minimization نیز به عنوان معادلی برای این اصطلاح استفاده می‌شود.

کاراکترهای غیر ضروری (شامل کاراکتر فاصله و خط جدید) و همچنین المان هایی نظیر کامنت ها (که برای توصیف عملکرد قسمت‌های مختلف کد استفاده می‌شوند) در حین انجام فرایند Minification از سورس کد حذف می‌شوند. از آنجایی که این اجزا و کاراکترها غالبا برای خواناتر کردن سورس کد به کار می‌روند حذف آن‌ ها تاثیری روی نتیجه اجرای کد نخواهد داشت.

فرایند کمینه سازی به خصوص در مورد سورس کدهای مرتبط با صفحات وب نظیر فایل های جاوا اسکریپت (JavaScript) به عنوان یک زبان برنامه نویسی تفسیری، شیوه نامه های آبشاری (CSS) و فایل های اچ تی ام ال (HTML) به کار می‌رود. کاهش حجم این منابع باعث می‌شود فایل ها با سرعت بیشتری به دست کلاینت ها (برای مثال مرورگرهای وب) برسد و درنتیجه منجر به کاهش زمان لازم برای لود شدن صفحات وب خواهد شد.

ممکن است کمینه سازی کد تنها چند درصد از حجم یک فایل را کاهش دهد اما همین میزان اندک – به خصوص زمانی که مساله افزایش سرعت بارگیری صفحات وب در میان است – از اهمیت بالایی برخوردار خواهد بود. این افزایش سرعت نه تنها برای کلاینت ها مفید است بلکه میزان مصرف پهنای باند و ازدحام روی سرور را نیز کاهش خواهد داد.

فارغ از روش‌های ساده‌ای نظیر حذف کامنت ها و فاصله ها از سورس کد، ممکن است تکنیک‌های پیشرفته‌تری نیز برای کمینه سازی مورد استفاده قرار گیرد. جایگزینی نام‌های طولانی متغیرها و توابع با نام‌هایی با تعداد کاراکتر کمتر (و حتی تک کاراکتری) در سورس کدهای بسیاری از زبان‌ها (به خصوص JavaScript) و جایگزینی ویژگی‌های مرتبط با یک ویژگی خلاصه شده (Shorthand Property) و حذف قانون‌ها یا ویژگی‌های تکراری در CSS از جمله این موارد هستند.

معکوس این فرایند که به Unminification موسوم است قادر است سورس مینیفای شده را به یک نسخه معمولی و خواناتر تبدیل کند.

ابزارهای Minification

همان طور که انتظار می‌رود انجام فرایند کمینه سازی توسط توسعه دهندگان به صورت دستی نیز امکان‌پذیر است. با اینحال معمولا به دلیل حجم بالای سورس کدها و دشواری انجام این کار توصیه می‌شود از ابزارهای مخصوصی که قادر به انجام خودکار کمینه سازی هستند استفاده شود. به کارگیری این ابزارها علاوه بر سرعت بالاتر مانع از خرابکاری‌هایی می‌شود که ممکن است در اثر مینیفای کردن دستی سورس کدها حاصل شود.

برای برخی از زبان ها ابزارهای نرم افزاری متعددی در دسترس توسعه دهندگان قرار گرفته است که با روش‌های ساده تا پیشرفته به مینیفای کردن سورس کد می‌پردازند. از جمله مشهورترین این ابزارها می‌توان به HTMLMinifier برای اچ تی ام ال، CSSO برای سی اس اس و Google Closure Compiler و UglifyJS برای جاوا اسکریپت اشاره کرد.

هرچند بسیاری از کمینه سازها بخش عمده‌ای از فرایند Minification را به خوبی انجام می‌دهند اما ممکن است تکمیل دستی این فرایند توسط توسعه دهندگان خبره و حتی دقت در به کارگیری مناسب از کدهای با قابلیت استفاده مجدد در هنگام کدنویسی به بهبود قابل توجه خروجی بیانجامد.

کمینه سازی و فشرده سازی

با وجود اینکه کمینه سازی و فشرده سازی (Compression) داده ها هر دو می‌توانند باعث کاهش حجم فایل سورس کد شوند اما نباید آن‌ها را یکسان دانست. در واقع سورس کد کمینه شده می‌تواند بدون نیاز به انجام مرحله‌ای اضافه بلافاصله تفسیر و اجرا شود؛ این در حالیست که سورس کد فشرده شده پیش از اجرا شدن لازم است از حالت فشرده خارج شود. در عین حال مفسر می‌تواند با نسخه اصلی یا نسخه کمینه سازی شده کار کند بدون اینکه تغییری در مفسر ایجاد شود.

جالب است بدانید بسیاری از وبسایت‌ها از هر دو روش کمینه سازی و فشرده سازی فایل ها برای کاهش حجم داده هایی که باید منتقل شود استفاده می‌کنند.

مثال هایی از کمینه سازی

در مثال زیر می‌توانید نمونه‌ای از یک قانون CSS را قبل و پس از انجام Minification مشاهده کنید. همانطور که می‌بینید در این قانون علاوه بر اینکه کامنت، سمی کلن اختیاری انتهایی، کاراکترهای اضافی فاصله و خط جدید حذف شده‌اند، ویژگی خلاصه شده border نیز جایگزین سه ویژگی مجزای border-width و border-style و border-color شده است.

کمینه سازی Minification
نمونه‌ای از انجام Minification روی یک قانون CSS

در مثال زیر نیز یک قطعه کد جاوا اسکریپت و نسخه حاصل از اعمال فرایند Minification توسط Google Closure Compiler را مشاهده می‌کنید:

کمینه سازی Minification
نمونه‌ای از انجام Minification روی یک قطعه کد جاوا اسکریپت

مزایا و معایب Minification

همانطور که پیشتر به آن اشاره شد Minification قادر است با کاهش حجم سورس کد به ویژه در مورد منابع وب به لود شدن سریعتر صفحات وب و کاهش پهنای باند مورد نیاز برای انتقال داده ها منجر شود.

با اینحال کدهای کمینه شده معمولا به اندازه نسخه اصلی خوانا نیستند و به علاوه فاقد مستنداتی هستند که در سورس کدهای معمولی دیده می‌شود. بنابراین نسخه‌هایی که روی آن‌ها فرایند Minification انجام شده است برای مطالعه و بررسی یا ویرایش و تغییر مناسب نیستند. به همین دلیل برخی از توسعه دهندگان، نسخه اصلی سورس کد را نیز به صورت مجزا یا همراه با پکیج اصلی منتشر می‌کنند تا خوانایی و امکان تغییر آسان آن در آینده میسر شود.

برخی از متخصصین معتقدند کمینه سازی را می‌توان روشی برای مبهم سازی (Obfuscation) سورس کد به شمار آورد؛ با این وجود مشابه با ابزارهایی که برای انجام خودکار Minification به کار می‌روند، ابزارهای ویژه‌ای نیز برای Unminification طراحی و منتشر شده است.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

فشرده سازی داده Data Compression

فشرده سازی داده یا Data Compression چیست؟

فشرده سازی داده (Data Compression) به فرایندی گفته می‌شود که طی آن داده‌ها با استفاده از تعداد کمتری بیت کدگذاری می‌شوند.

روش‌های فشرده‌سازی به لحاظ از دست رفتن داده‌ها به دو نوع کلی تقسیم می‌شود: اتلافی (Lossy) و غیراتلافی (Lossless). در فشرده سازی اتلافی با حذف بخشی از داده‌ها (داده‌های با اهمیت کمتر) و تخمین‌های نسبی از محتوای اصلی، نمایی تقریبی از نسخه‌ی اصلی ارائه می‌شود. اما در فشرده سازی غیراتلافی هیچ چیز از دست نمی‌رود و می‌توان داده‌های اصلی را از روی داده‌های فشرده شده به صورت دقیق بازیابی نمود.

فشرده سازی منجر می‌شود داده‌ها به فضای ذخیره‌سازی کمتر و هم‌چنین پهنای باند کمتری برای انتقال نیاز داشته باشند. با این وجود حین انجام فرایند فشرده سازی و یا فرایند معکوس آن (یعنی خارج کردن داده‌ها از حالت فشرده یا Decompression) منابع محاسباتی بیشتری استفاده می‌شوند. بنابراین باید نوعی تعادل میان میزان فضای ذخیره‌سازی و پیچیدگی زمانی الگوریتم‌های مورد نیاز برای Compression و Decompression قائل شد. به عبارت بهتر علاوه بر درجه‌ی فشرده سازی و میزان از دست رفتن داده‌ها (در شیوه‌های اتلافی)، لازم است میزان منابع محاسباتی لازم برای انجام دو فرایند فوق و نحوه انجام این کار نیز درنظر گرفته شود. به عنوان نمونه در مورد ویدیوها در صورتی که قرار باشد ابتدا کل ویدیوی فشرده شده از حالت فشرده خارج شود و سپس پخش ویدیو آغاز شود زمان و فضای بیشتری لازم خواهد بود در صورتی که پخش قطعه‌ای از ویدیو همزمان با خارج کردن آن از حالت فشرده می‌تواند کارامدتر باشد.

تصاویر، داده‌های صوتی و ویدیویی دیجیتال از رایج‌ترین انواع داده‌هایی هستند که فرایند فشرده‌سازی روی آن‌ها اعمال می‌شود. فرمت‌های JPEG و PNG و GIF برای فایل‌های تصویری، فرمت MP3 برای فایل‌های صوتی و … از شاخص‌ترین و مشهورترین فرمت‌های فایلی هستند که از فشرده‌سازی پشتیبانی می‌کنند. به جرأت می‌توان گفت یکی از متداول‌ترین موارد استفاده از چنین داده‌هایی (به خصوص تصاویر فشرده شده) در صفحات وب قابل مشاهده است به این ترتیب میزان پهنای باند مصرفی برای انتقال داده‌های فشرده شده از سرور به مرورگر کاربر کاهش پیدا کرده و سرعت بارگیری صفحات (و پخش فایل‌های چندرسانه‌ای موجود در صفحه) نیز افزایش می‌یابد.

در کنار فرمت‌های رایج فایل‌های تصویری، موسیقی و ویدیویی فشرده شده فرمت‌هایی از قبیل ZIP و RAR از جمله فرمت‌های رایج آرشیوی به شمار می‌روند که از فشرده‌سازی داده‌ها پشتیبانی می‌کنند.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

فشرده سازی اتلافی Lossy Compression

فشرده سازی اتلافی یا Lossy Compression چیست؟

فشرده سازی اتلافی (Lossy Compression) به گونه‌ای از روش‌های فشرده سازی (یا کدگذاری داده‌ها) اطلاق می‌شود که با حذف بخشی از داده‌ها و تخمین‌های نسبی از محتوای اصلی، نمایی تقریبی از آن ارائه می‌کنند. به این نوع فشرده سازی، فشرده سازی بازگشت ناپذیر (Irreversible) نیز گفته می‌شود.

معمولا روش‌های اتلافی به منظور کاهش حجم داده‌های اصلی (جهت نگه‌داری یا انتقال آن از طریق یک شبکه) به کار می‌روند. در اثر اعمال این روش‌ها روی محتوای اصلی (همان‌طور که از نام آن‌ها نیز برمی‌آید)، بخشی از محتوا به صورت غیرقابل بازگشت از دست خواهد رفت و پس از کدگشاییِ نمونه‌ی فشرده شده، نسخه‌ای با تخمین تقریبی از نمونه‌ی اصلی را در اختیار خواهیم داشت. در مقابل این تکنیک‌ها، روش‌هایی تحت عنوان روش‌های فشرده سازی بدون اتلاف (Lossless Compression) نیز وجود دارد که در آن‌ها برخلاف روش‌های Lossy می‌توان داده‌های اصلی را بدون از دست رفتن کوچکترین جزئیاتی از روی داده‌های فشرده شده بازسازی نمود. با اینحال در اغلب موارد، میزان فشرده سازی داده‌ها و کاهش حجم در روش‌های اتلافی بسیار بیشتر از روش‌های بدون اتلاف است. البته روش‌های اتلافی قدرتمند می‌توانند با از دست رفتن ناچیز و غیرقابل تشخیص محتوای اصلی تا حد قابل قبولی حجم آن را کاهش دهند. به علاوه در بسیاری از کاربردها (نظیر انتقال سریع فایل) ترجیح داده می‌شود با استفاده از روش‌های فشرده سازی اتلافی حتی در صورتی که تفاوت میان محتوای فشرده شده و محتوای اصلی مشخص باشد باز هم فشرده سازی بیشتر (و حجم کمتری) داشته باشیم.

رایج‌ترین کاربرد روش‌های فشرده سازی اتلافی را می‌توان در حوزه فشرده‌سازی داده‌های چندرسانه‌ای (نظیر موسیقی‌ها، ویدیوها و تصاویر) مشاهده نمود. معمولا به هنگام اعمال این روش‌ها روی چنین داده‌هایی تلاش می‌شود از جزئیات محتوا تا حدی صرف نظر شود که تفاوت نتیجه فشرده‌سازی و محتوای اصلی برای انسان‌ها غیر قابل تشخیص باشد. به عنوان مثال اغلب تصاویری که در صفحات وب مشاهده می‌کنید (نظیر فرمت JPEG) با استفاده از روش‌های اتلافی فشرده سازی شده‌اند در حالی که معمولا چشم انسان قادر به تشخیص افت کیفیت حاصل در این تصاویر نمی‌باشد.

در تصاویر زیر می‌توانید نمونه اِعمال فشرده سازی اتلافی با سطوح فشرده سازی متفاوت را روی تصویری یکسان مشاهده نمایید. با اندکی دقت می‌توانید کاهش کیفیت در تصویر دوم را تشخیص دهید. البته در کنار این افت کیفیت حجم فایل نیز به حدود یک پنجم کاهش پیدا کرده است.

تصویری با میزان فشرده سازی متوسط به شیوه اتلافی – حجم فایل 58 KB
فشرده سازی اتلافی Lossy Compression
تصویری با میزان فشرده سازی بالا به شیوه اتلافی – حجم فایل 13 KB

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا