توضیحات · یک
بیشتر آنچه این برنامه را سریع میکند مسیر شبکهٔ تندتر نیست. این است که داده فقط یک بار جابهجا میشود. این یعنی چه در عمل، چرا چیزی جدا از استخراج مستقیم است، کدام شکلهای بایگانی از آن جان سالم به در میبرند، و حذف چرخهٔ بنویس-و-دوباره-بخوان روی ماشینی واقعی در عمل چقدر میارزد.
نقطهٔ آغاز
یک پست هزاران مقالهٔ کوچک رمزگذاریشده است که با هم مجموعهای از جلدهای بایگانی میسازند، و آنها به نوبهٔ خود فایلی را در بر دارند که واقعاً میخواهی. رسیدن از اولی به دومی بهطور سنتی چهار کار جداگانه بوده، که هرکدام پیش از آغاز بعدی تمام میشود.
هر مرحله درست است، و نتیجه صحیح. اما محتوا دو بار نوشته شده، دستکم دو بار خوانده شده، و در اوج، دیسک ناچار بوده دو نسخهٔ کامل از کاری را نگه دارد که تو تنها یک نسخهاش را میخواستی. ساعتی که تو تجربه میکنی هر چهار مرحله پشت سر هم است، و برای همین یک برنامه میتواند دانلودی سریع گزارش دهد و باز هم تو را منتظر بگذارد.
تغییر
تکگذر یعنی بایتها از شبکه به مقصد نهاییشان میروند بیآنکه هرگز روی دیسک تو فایل بایگانی شوند. مرحلهٔ دو یا سه وجود ندارد، چون کار هر دو در حالی انجام میشود که مرحلهٔ یک هنوز در جریان است.
در عمل، هر مقاله بهمحض رسیدن در حافظه رمزگشایی میشود و یکراست همزمان به دو چیز سپرده میشود. وارسیکننده بیدرنگ آن را با دادهٔ توازن میسنجد، پس درستی همانطور که داده فرود میآید اثبات میشود نه با بازخوانی بعدی. استخراجکننده بایتهای ورودی را بهعنوان موقعیتی درون بایگانی میبیند، حساب میکند به کدام بخش از کدام فایل محتوا تعلق دارند، و همانجا مینویسدشان.
جلدهای بایگانی هرگز سرهم نمیشوند. آنها تا وقتی دانلود در پرواز است همچون ساختاری وجود دارند که استخراجکننده میفهمدش، و تنها چیزی که به دیسک تو میرسد فایلی است که میخواستی. وقتی آخرین مقاله میرسد عملاً چیزی برای انجام نمانده، و به همین دلیل زمانهای پایان ما نزدیک خودِ زمان دانلود است نه دانلود بهعلاوهٔ یک دنباله.
پیامد سنجشپذیر: برای همان کار حدود نصف مینویسیم، بسیار کمتر بازمیخوانیم، و بهجای دو برابر، تقریباً به اندازهٔ خودِ محتوا فضای آزاد لازم داریم. در انتشاری 190 GB این یعنی حدود 157 GB فضای آزاد در برابر حدود 313 GB، و تقریباً یکسوم ترافیک دیسک.
دو چیز این کار را سختتر از آنچه به نظر میرسد میکند، و همانها دلیل کمیابیاش هستند. مقالهها به ترتیب نمیرسند، پس استخراجکننده باید از پس بایتهایی برآید که بهجای جریانی از ابتدا، در موقعیتهای دلخواه فرود میآیند. و بایگانی فشرده را نمیشود از میانه باز کرد، پس هر بخش از کار که واقعاً ترتیب میخواهد باید شناخته و جداگانه رسیدگی شود نه اینکه با فرض کنار گذاشته شود.
مقایسهای که از آن میپرسند
استخراج مستقیم قابلیت خوبی است و برنامههایی که دارندش با آن بهترند. ضمناً بخش دیگری از مسئله را حل میکند، و تفاوت دقیقاً جایی پیدا میشود که اهمیت دارد.
استخراج مستقیم پیش از پایان دانلود شروع به استخراج میکند، پس مرحلهٔ سه بهجای آنکه پس از مرحلهٔ یک بیاید با آن همپوشانی مییابد. آنچه نمیکند حذف مرحلهٔ یک است. جلدهای بایگانی همچنان بهطور کامل روی دیسک تو نوشته میشوند، چون بازکننده یک بازکنندهٔ متعارف است که فایلهای متعارف میخواند؛ استخراج مستقیم فقط زودتر به کارش میاندازد. دو نسخه همچنان هست، دو نوشتن همچنان رخ میدهد، و نیاز به فضای آزاد تغییری نمیکند.
| نوشتن جلدها روی دیسک | فضای آزاد لازم | چند بار محتوا نوشته میشود | |
|---|---|---|---|
| دانلود، سپس باز کردن | بله، سپس بازخوانی | ~2× کار | 2 |
| استخراج مستقیم | بله، زودتر بازخوانی میشود | ~2× کار | 2 |
| تکگذر | هرگز نوشته نمیشوند | ~1× کار | 1 |
تفاوت دوم این است که وقتی شکل ساده نیست چه پیش میآید. چون استخراج مستقیم با پیدا شدن جلدها کار را به بازکنندهای متعارف میسپارد، به وضعیتی بیدردسر نیاز دارد: جلدها به ترتیبی قابلاستفاده حاضر باشند، ترمیمی در انتظار نباشد، چیزی نباشد که اول باید قفلش باز شود، و بایگانیای که محتوایش خودش بایگانی نباشد. وقتی هرکدام از اینها برقرار نباشد، کار عاقلانه عقبنشینی و بازگشت به باز کردن در پایان است، و همین هم رخ میدهد. نتیجهای درست میگیری و زمانبندی معمول را.
چون استخراجکنندهٔ ما از همان آغاز حول بایتهای بیترتیب ساخته شده، آن وضعیتها برایش استثنا نیستند. تمایز واقعی همین است: نه اینکه زودتر شروع میکنیم، بلکه اینکه به شرطهایی تکیه نمیکنیم که بارها برقرار نیستند.
واقعاً چه چیزی از آن جان سالم به در میبرد
چنین طراحیای تنها وقتی ارزش دارد که بر پستهایی صدق کند که واقعاً با آنها روبهرو میشوی، نه بر بهترین حالت تمیز. وضعیت کنونی: هیچ قالب ظرفی فقط روی دیسک رسیدگی نمیشود. RAR، 7z و zip همه از مسیر تکگذر میگذرند.
| شکل | تکگذر | یادداشتها |
|---|---|---|
| RAR، ذخیرهشده (بدون فشردهسازی) | بله | حالت رایج در انتشارهای رسانهای |
| RAR، فشرده | بله | از جمله بایگانی فشرده بهعنوان لایهٔ بیرونی |
| RAR 1.5، 3، 4 و 5 | بله | هر چهار نسل این قالب |
| 7z | بله | از جمله محتوای فشردهشده با deflate |
| zip | بله | از جمله محتوای bzip2 و LZMA |
| محتوای رمزگذاریشده | بله | با گذرواژه، از جمله zip رمزگذاریشده |
| سرآیندهای رمزگذاریشده | بله | جایی که نام فایلها هم پنهان است |
| زنجیرههای گذرواژه | بله | گذرواژهٔ هر لایه در لایهٔ بالاتر بستهبندی شده |
| بایگانیهای تودرتو | بله | در حین کار از تودرتویی درمیآیند، تا عمقی قابل تنظیم |
| آسیبدیده در چند لایه | بله | ترمیم در هر سطح، همچنان یک گذر |
| مجموعههای تقسیمشدهٔ عددی | بله | تقسیمهایی به سبک name.001 |
| بایگانیهای خوداستخراج | گذر روی دیسک | بایگانی از ابتدای فایل شروع نمیشود |
zip چندپاره (.z01) | گذر روی دیسک | و چند گونهٔ کمیابتر zip |
| کارهای ازسرگرفته | گذر روی دیسک | کاری که پس از راهاندازی دوباره ادامه یابد به شیوهٔ متعارف تمام میشود |
این سه امتناع صادقانهاند و همه یکجور رفتار میکنند: کار بهدرستی و از مسیر متعارف تمام میشود، و برای آن دانلود زمانبندی معمولِ دونسخهای را میگیری. چیزی شکست نمیخورد؛ فقط دیگر به آن معنایی که بقیهٔ این صفحه توصیف میکند سریع نیست. بایگانیهای خوداستخراج به دلیلی ساختاری رد میشوند نه از کمکاری: شناختن یک بایگانی از نخستین بایتهایش وقتی نخستین بایتها یک برنامهاند نمیتواند کار کند.
سطرهای تودرتو و رمزگذاریشده آنهایی هستند که جدی گرفتنشان میارزد، چون همانجاست که بیشتر برنامهها کار را به تو پس میدهند. روی پیکرهای تولیدشده از ده شکل تودرتو، که با درهمسازی محتوا نمرهگذاری شده تا برنامهای که نام محتوا را عوض میکند هم امتیاز بگیرد، ما 9 مورد از 10 را بدون دخالت تمام کردیم؛ بهترین برنامهٔ بعدی 5 مورد را تمام کرد، و دو برنامهٔ دیگر 2 مورد. تنها موردی که خودکار تمامش نمیکنیم نردبانی دهسطحی است، که در سقف عمق پیشفرض پنج تمیز پایان مییابد و عمیقترین لایه را همچون بایگانی سالم میگذارد، و اگر سقف را بالا ببری کامل تمام میشود. آن دورها با جدول کامل در صفحهٔ محکها هستند.
چرا ارزش انجام دادن دارد
سریعتر است، به دلیلی بیزرقوبرق. نوشتن 60 GB و بازخواندنش حتی روی درایو حالتجامدِ سریع هم مجانی نیست، و روی هر چیز کندتر اغلب گلوگاه واقعی است نه شبکه. حذف یک نوشتن و دو خواندن آن زمان را تماماً از ساعت تو برمیدارد. سود دقیقاً همانجا بیشترین است که مردم بیشتر متوجهش میشوند: کارهای بزرگ، و ماشینهایی که دیسکشان سریعترین بخششان نیست.
فرسایش را نصف میکند. درایوهای حالتجامد شمار محدودی نوشتن در خود دارند، و دانلودری که هر محتوا را دو بار مینویسد آن بودجه را با دو برابر سرعت خرج میکند بیآنکه سودی به تو برسد. در طول چند صد ترابایت دانلود، که برای کاربری فعال سالی معمولی است، تفاوت کسر معناداری از عمر یک درایو است.
آنچه را جا میشود عوض میکند. فضای آزاد ویژگی کارایی نیست، بله یا خیر است. کاری که دو برابر اندازهٔ خودش فضای مانور بخواهد یا اجرا میشود یا نمیشود. نیاز داشتن به حدود اندازهٔ محتوا یعنی کارهایی روی ماشینها و حجمهایی تمام میشوند که رویکرد متعارف در آنها بهسادگی میایستد، و برای همین انتشاری 190 GB اینجا در حدود 157 GB فضای آزاد جا میشود نه در حدود 313 GB.
زمان پردازندهٔ کمتری هزینه دارد. عبور ندادن داده از دیسک برای بار دوم، کار آن را حذف میکند، و وارسی حین دانلود یعنی هیچ گذر دومی روی محتوا برای بررسیاش لازم نیست. هزینهٔ پردازندهٔ ما روی حدود 1.7 ثانیهٔ پردازنده به ازای هر گیگابایت صاف میماند، از کاری 35 GB تا کاری 190 GB، و همین ویژگی مفید است: هزینه به ازای گیگابایت با بزرگ شدن کار بزرگ نمیشود.
با حافظهٔ کمتر، و حافظهٔ کراندار اجرا میشود. چون بایتها بهجای انباشته شدن همانطور که میرسند مصرف میشوند، مجموعهٔ کاری بودجهای است که تو تعیین میکنی نه تابعی از اندازهٔ کار. همین است که اجازه میدهد انتشاری 190 GB روی ماشینی با حدود 1.1 GB در دسترس پردازش شود. تمایز مهم عدد نیست، شکل است: حافظهای که با کار بزرگ میشود سرانجام به کاری برمیخورد که ماشین تو نمیتواند تمامش کند، و بهجای اینکه به تو بگوید، با جابهجایی به دیسک یا کشته شدن شکست میخورد.
رویهمرفته اینها کمتر دربارهٔ بردن یک محک است و بیشتر دربارهٔ اینکه نرمافزار اصلاً کجا میتواند اجرا شود. طراحیای که نصف فضای آزاد، نصف نوشتنها و مقدار کرانداری حافظه لازم دارد، روی کارساز خانگی کوچک، لپتاپی قدیمیتر یا یک NAS کار میکند، و بخش خوبی از این نرمافزار واقعاً همانجا زندگی میکند.
هر عدد این صفحه سنجیده شده و با نسخهٔ ساخت و تاریخ در کنارش در صفحهٔ محکها منتشر شده، از جمله دورهایی که میبازیم. وزنهٔ متقابل صادقانه، که آنجا هم گفته شده: استخراجکننده و ترمیمکنندهای که برای همراهی با دانلودی زنده ساخته شدهاند، حافظهٔ مقیم بیشتری نگه میدارند تا ابزاری مستقل که یک بار از خط فرمان اجرا میشود؛ پس اگر قید تو کوچکترین ردپای ممکن برای کاری یکباره روی فایلی است که از پیش داری، ابزارهای اختصاصی آن ستون را میبرند.