أربعة عملاء، وسبعة سيناريوهات، وعتاد ومزوّدون متطابقون، وأشواط متداخلة كي يُلغى انجراف المزوّدين. المقياس هو الزمن حتى ملف قابل للاستخدام: مُنزَّل، متحقَّق منه، مستخرَج. يشمل الأشواط التي لا نفوز بها.
في هذه الصفحة
المنهجية أولًا
pipelining_requests=8 (يأتي بـ 1، أي بلا تسلسل بالأنابيب؛ وذلك الإعداد وحده خفّض زمن 190 GB لديه من 24m24s إلى 19m02s)، وأُعطي NZBGet خيارات ArticleCache/DirectWrite/DirectUnpack/ParQuick، وأُعطي rustnzb إعداده الموثّق.السيناريو 1 · نظيف، ضخم
| nzbfast | NZBGet 26.2 | SABnzbd 5.0.4 | rustnzb 1.3.4 | |
|---|---|---|---|---|
| الزمن حتى ملف قابل للاستخدام | 4m 33s | 7m 58s (+75%) | 19m 32s (+329%) | لا شيء¹ |
| GB على السلك | 169.6 | 169.8 | 169.7 | 186.5 |
| ذروة RSS | 1.4 GB² | 1.5 GB | 1.8 GB | 0.6 GB |
¹ أنهى rustnzb نقل البايتات عند 5m 42s بعد أن سحب 186.5 GB (أكثر بـ 10% على السلك من أيّ منافس) لكنه لم يترك أي وسائط مستخرجة، وهذا شوطه الفاشل الثالث على التوالي على هذا المنشور. · ² تتبع ذاكرة nzbfast ميزانيته المُعدّة، لا المهمة: جرى هذا الشوط بالميزانية التلقائية الافتراضية وبلغ ذروة 1.4 GB؛ وميزانية ضخمة عمدًا قدرها 64 GB لا تشتري سوى 4% (4m 22s)، ومقيَّدًا عند 1 GB تكتمل مهمة 190 GB نفسها بعدُ (انظر سلّم الذاكرة المنخفضة أدناه). في شوط الساحل الشرقي الأسبق (خط ~2.4–3 Gbps) جرى السيناريو نفسه في 9m 00s مقابل NZBGet +30% وSABnzbd +111%. الفجوة صامدة عبر سرعات الخطوط.
السيناريو 2 · الفجوة تتّسع مع الحجم
التمريرة الواحدة تعني لا تمريرة تحقق/فكّ ضغط بعد التنزيل، فكلما كبرت المهمة، ازداد تقدّمها في الوصول. أشواط تسلسلية على الجهاز نفسه:
| المهمة | nzbfast | NZBGet | SABnzbd |
|---|---|---|---|
| 7.4 GB REMUX (أوروبا، 10 GbE) | 13.7 s | 17.3 s (+26%) | 19.0 s (+39%) |
| 35 GB مموّه 4K (أوروبا) | 67 s | 108 s (+61%) | 285 s (+325%) |
| 87 GB 4K (الساحل الشرقي) | 272 s | 370 s (+36%) | 708 s (+160%) |
| 87 GB على قرص فيه 97 GB حرّة (أوروبا) | 3m 08s | يتعذّر التشغيل² | يتعذّر التشغيل² |
| 190.6 GB (الساحل الشرقي) | 9m 00s | 11m 43s (+30%) | 19m 02s (+111%) |
² تجاوز أثرهما الأقصى (المجلدات + الخرج المفكوك في آنٍ واحد، ~156 GB) الـ 97 GB الحرّة. تحتاج التمريرة الواحدة إلى ضعف واحد من حجم المحتوى: فتنصّف القرص الذي تحتاجه، لا الوقت فحسب.
السيناريو 3 · منشور مموّه
| nzbfast | NZBGet | SABnzbd | rustnzb | |
|---|---|---|---|---|
| الزمن حتى ملف قابل للاستخدام | 96 s | 153 s (+59%) | 259 s (+170%) | لا ملف قابل للاستخدام³ |
| ذروة RSS | 1.55 GB | 3.7 GB | 8.8 GB | 3.6 GB |
³ نزّل rustnzb في 119 s، ووسم المهمة مكتملة، وسلّم المجلدات المموّهة الخام: بلا إعادة تسمية، بلا استخراج. أزال nzbfast التمويه من بيانات PAR2 الوصفية واستخرج أثناء البث، بصفر كتل معادة القراءة.
السيناريو 4 · قائمة انتظار من ثلاث
| nzbfast | rustnzb | NZBGet | SABnzbd | |
|---|---|---|---|---|
| زمن ساعة حائط لقائمة الانتظار | 122 s | 136 s | 162 s | 277 s |
| خمول الخط (<20 MB/s) | 2 s (2%) | 16 s (12%) | 0 s | 168 s (61%) |
ثلاثة أشكال للمشكلة نفسها: تداخل الذيل لدى nzbfast يُبقي الخط مشغولًا من طرف إلى طرف؛ وNZBGet لا يخمل أبدًا لكنه يعمل أبطأ بنحو 35% أثناء فكّ الضغط بالتزامن؛ وSABnzbd يُنزّل بسرعة، ثم يترك الخط مظلمًا 61% من الوقت أثناء المعالجة اللاحقة المتسلسلة. في متغيّر المرونة (مهمة واحدة بترويسات RAR مشفّرة)، انحشرت قائمة انتظار SABnzbd على المهمة المشفّرة ولم تكتمل سوى مهمة واحدة من 3؛ أما nzbfast فأركنها برسالة واضحة وأنهى البقية.
العمود الصادق
أُعيد قياس الشوطين اللذين كانا هنا على الإصدار المنشور، ولم يعد أيٌّ منهما خسارة: المنشور التالف بنمط store صار يكلّفنا 30 ثانية مقابل 38 لـNZBGet، وإعادة البناء من التكافؤ وحده تنتهي في 9 ثوانٍ بدل 19، في شوط يعود فيه NZBGet في الزمن نفسه لكنه لا يسلّم شيئًا. نُبقي هذا القسم مكانه بدل حذفه: هنا تذهب خسائرنا، والجولة التالية التي تجد واحدة ستعيدها إلى هنا.
السيناريو 6 · جوّعه من RAM
المهام الأربع نفسها، مُعادة التشغيل بميزانيات ذاكرة صارمة 2 GB و1 GB و256 MB: ما سيختاره المحدِّد التلقائي على جهاز 8 GB، وجهاز 4 GB، وNAS بـ 2 GB. أنتج كل شوط ملفًا صحيحًا، متحقَّقًا منه بالكامل، مستخرَجًا؛ وتتبّعت ذروة RSS الميزانية، لا المهمة. الزمن حتى ملف قابل للاستخدام، خط 10 GbE:
| حجم المهمة | وفرة من RAM | ميزانية 2 GB | ميزانية 1 GB | ميزانية 256 MB |
|---|---|---|---|---|
| 7 GB | 15 s | 15 s | 15 s | 15 s |
| 35 GB | 65 s | 70 s | 70 s | 65 s |
| 87 GB | 148 s | 206 s | 196 s | 180 s |
| 190 GB | 330 s | 427 s | 402 s | 411 s |
علاوة الـ 20–40% على المهام الكبيرة هي أثر خاص بـ 10 GbE: الكتل المنسكبة لا تكلّف وقتًا إلا حين يسبق الخطُّ القرص. نفس مهمة 87 GB بالميزانيات نفسها على خط ~2.4 Gbps قاست −1% إلى +7%، ضوضاء. على اتصال منزلي نموذجي تكون الميزانية الصغيرة شبه مجانية عند أي حجم مهمة. أنهى ملفّ NAS (2 اتصال، ميزانية 256 MB) مهمة 35 GB بذروة RSS بمقدار 0.4 GB. يستطيع NAS بـ 2 GB تشغيل هذا. لا عميل آخر يقدّم سقف ذاكرة إطلاقًا.
السيناريو 7 · أرشيفات داخل أرشيفات
المنشورات تصل متداخلة أكثر فأكثر: RAR داخل RAR، و7z مدسوس في أرشيف تخزين، وسلّم من الطبقات، وسلسلة كلمات مرور. هذا الشوط يقيّم ما يتبقى على عاتق المشغّل. تلقائي تعني أن كل حمولة استُخرجت، مطابقةً بالبايت، دون أي تدخّل؛ ويدوي تعني أن العميل أبلغ عن النجاح لكنه ترك أرشيفًا داخليًا جاثمًا في دليل الخرج لتفتحه أنت بنفسك.
| الشكل | nzbfast | SABnzbd | NZBGet | rustnzb |
|---|---|---|---|---|
| RAR تخزين داخل RAR تخزين | تلقائي | تلقائي | يدوي | يدوي |
| RAR مضغوط داخل RAR تخزين | تلقائي | تلقائي | يدوي | يدوي |
| 7z داخل RAR تخزين | تلقائي | تلقائي | يدوي | يدوي |
| سلّم من 5 مستويات، 6 حمولات | تلقائي · 6/6 | يدوي · 3/6 | يدوي · 1/6 | يدوي · 1/6 |
| سلسلة كلمات مرور، 3 مستويات مشفّرة | تلقائي · 3/3 | يطلب كلمة مرور | يطلب كلمة مرور | فشل |
| إكمال تلقائي، الأشكال العشرة كلها | 8/10 | 6/10 | 2/10 | 2/10 |
منصة loopback، ومتن مولَّد آليًا، والعملاء الأربعة كلهم على الآلة نفسها، والتقييم بتجزئة المحتوى، فالعميل الذي يعيد تسمية الحمولة ينال حقه مع ذلك. ولأن الطبقات الداخلية تُفكّ من تداخلها أثناء التدفق، يحتفظ nzbfast بنسخة واحدة نحو 1.5 GB على القرص حيث يحتفظ عملاء الكتابة-ثم-الفكّ بنحو 3 GB، ويُنهي هذه الأشواط في 1–2 ثانية مقابل 4–8 ثوانٍ. في سلسلة كلمات المرور، تصل كلمة مرور كل طبقة في ملف تستخرجه الطبقة التي فوقها: يقرؤه nzbfast ويفتح المستويات الثلاثة كلها؛ بينما يتوقف الآخرون منتظرين أن تكتبها أنت. أما الشكلان اللذان لا يُكملهما تلقائيًا فيُقيَّمان بقسوة عن قصد: سلّم من 10 مستويات يتجاوز حدّ العمق الافتراضي، ومنشور تالف في مستوياته الثلاثة كلها. في كليهما يسترد حمولات أكثر من أي عميل آخر، لكنه يخرج برمز غير صفري بدل أن يسمّي مهمة ناقصة نجاحًا، ولذلك يُحسبان هنا فشلَين.
مبارزات المكوّنات
الاستخراج وPAR2 كودنا الأصيل، لذلك نسابقهما أيضًا منفردَين أمام الميدان على متون متطابقة. لا يُحتسب زمن إلا عندما يكون الخرج مطابقًا بالبايت للحمولة المصدر.
أمام unrar 7.23 و7-Zip وbsdtar وunar وحزمة rars الأصلية على Apple M3 Ultra، يفوز مستخرج nzbfast أو يتعادل في كل شكل: 400 ملف صغير في 0.13 s مقابل 0.66 s لدى unrar، وsolid 0.50 مقابل 0.87، ومشفّر 0.49 مقابل 0.82، وأرشيف RAR7 بقاموس 128 MB 0.71 مقابل 0.92. وبإعادة التشغيل على M1 Ultra بـ 20 نواة وعلى حاسوب محمول Intel بـ 14 نواة تصمد النتيجة في كل شكل، وعلى الحاسوب المحمول تتسع الفوارق: مسارات فك التشفير المتوازية تتمدد في الخيوط الإضافية. كل زمن مُبلَّغ عنه أنتج خرجًا مطابقًا بـ sha256.
أمام par2cmdline الكلاسيكي وتفريعة SIMD par2cmdline-turbo وأمام MultiPar، يملك nzbfast أسرع تحقق وأسرع إصلاح على كل آلة جرى قياسها. سطح مكتب بـ 20 نواة: تحقق نظيف 0.40 s مقابل 1.08 لدى turbo و3.67 لدى الكلاسيكي؛ وإصلاح 101 كتلة تالفة 1.26 s مقابل 2.61 و7.52. حاسوب محمول بـ 14 نواة: تحقق 1.26 مقابل 1.48، وإصلاح 2.57 مقابل 3.62. كل ملف مُصلَح مطابق بالبايت. ملاحظة صادقة واحدة: نحن لا ننشئ PAR2 (لا يحتاج المنزّل إلى ذلك، وهذا الشوط ملك ParPar).
ما تكلفة المهمة
وعد المرور الواحد يتعلق بالقرص بقدر ما يتعلق بالسرعة، وها هو مقيسًا لا مُدّعى: أعلى ما بلغه دليل العمل أثناء الأشواط المتداخلة، بأخذ عيّنة مرتين في الثانية. القراءة مرة واحدة في النهاية لا تعني شيئًا، لأن عميلًا يحذف مجلداته بعد الاستخراج سيبدو وكأنه لم يكتبها قط.
| الشكل | nzbfast | NZBGet 26.2 | rustnzb 1.3.4 | SABnzbd 5.0.4 |
|---|---|---|---|---|
| RAR store داخل RAR store | 1538 | 1538 | 1774 | 3080 |
| طبقة داخلية مضغوطة | 1536 | 1536 | 1674 | 3102 |
| RAR داخل RAR، عمق 2 | 1536 | 1536 | 1714 | 3076 |
| 7z ملفوف في RAR store | 1503 | 1536 | 1722 | 3102 |
بالميغابايت، والأقل أفضل. NZBGet يجارينا هنا ويجدر قول السبب: إنه يعمل بتشغيل DirectUnpack وDirectWrite، وهكذا نضبط كل منافس، وعلى هذه الأشكال يكفي ذلك لنسخة واحدة على القرص. أما SABnzbd فيحتفظ باثنتين. الفارق الباقي هو ما بُني له المسار: نحن لا نُجسّد المجلدات أصلًا، فتكون الذروة هي الحمولة نفسها لا الحمولة زائد الأرشيف الذي حملها.
القدرة، لا القياسات الصغيرة
| nzbfast | SABnzbd 5 | NZBGet 26 | rustnzb | Usenapp | Newsbin | |
|---|---|---|---|---|---|---|
| NNTP متسلسل بالأنابيب | نعم | معطّل افتراضيًا | لا | نعم | - | - |
| تحقق كامل أثناء التنزيل | كل كتلة | بعده | فحص سريع | بعده | بعده | بعده |
| استخراج أثناء التنزيل | أثناء البث، بلا مجلدات على القرص | فكّ ضغط مباشر⁴ | فكّ ضغط مباشر⁴ | غير موثوق⁵ | لا | لا |
| القرص المطلوب لمنشور بحجم N-GB | ~1×N | ~2×N | ~2×N | ~2×N | ~2×N | ~2×N |
| حكم على قابلية الاكتمال قبل التنزيل | دقيق بالكتلة | لا | % صحة | لا | فحص المقالات | لا |
| ذاكرة مقيَّدة (لا مبادلة أبدًا) | بميزانية | 9.3 GB عند 190 GB | إعداد ذاكرة مؤقتة | لا | - | - |
| تحقّق من الملف عند أي نقطة أثناء التنزيل | نعم | لا | لا | لا | تسلسلي | لا |
| مفهرِس مدمج + جدار ملصقات | نعم، بلا مفاتيح | لا | لا | لا | واجهة بحث | متصفّح مجموعات |
| توافق مباشر مع Sonarr/Radarr | واجهة SAB + Newznab | أصيل | أصيل | جزئي | لا | لا |
| تطبيقات هاتف عن بُعد (nzb360/LunaSea) | عبر NZBGet RPC | نعم | نعم | لا | لا | لا |
| جلب تلقائي لقائمة المتابعة + ترقيات | مدمج | عبر *arr | عبر *arr | لا | Watchdog | قواعد |
| ملف تنفيذي واحد قائم بذاته | نعم | Python | نعم | نعم | .app | .exe |
| مفتوح المصدر | GPL⁶ | GPL | GPL | نعم | مدفوع | مدفوع |
| المنصّات | mac/win/linux/docker | mac/win/linux | mac/win/linux | linux/win | mac فقط | win فقط |
⁴ فكّ الضغط المباشر لا يزال يجسّد المجلدات أولًا: ضعف كتابة وضعف قرص. ⁵ سلّم rustnzb مجلدات مموّهة موسومة "مكتملة" في شوطنا (كما يتعلّق فكّ ضغطه مع RARLab unrar ما لم يُعطَّل). ⁶ GPL-3.0-or-later. وUsenapp/Newsbin قارئان تجاريان أحادِيَا المنصّة بميزات تنزيل؛ أُدرِجا لأن الناس يسألون، لا لأنهما ينافسان على السرعة.
إثبات النقل