لم نقم بتشغيل هذا المقعد بأنفسنا: فهذه شخصيات تابعة لجهات خارجية، عامة، من مصادر ومؤرخة. توضح هذه المقالة بالتفصيل ما يقولونه، والمنهجية التي تقف وراءها، وما الذي تغيره فعليًا بالنسبة لاختيار الواجهة الخلفية - وليس مقارنة بين Aurabase ومنافس.
يعمل جوهر Aurabase في Rust، على axum وtokio - تم التحقق منه في Cargo.toml الخاص بـ monorepo، حيث تشترك عشر خدمات في نفس التبعية. لكننا لم ننشر أي أرقام أداء خاصة بنا حتى الآن. إذا كنت تبحث عن زمن استجابة Aurabase دقيق، فهو غير موجود بعد: ستأتي المنهجية قبل الرقم، وليس العكس.
الأساسيات
- على Sharkbench (منصة المجتمع، Ryzen 7 7800X3D، Docker/Linux، 24/08/2025): تعمل كل من Actix وHyper وAxum وRocket بين 18,047 و21,965 req/s عند 1.4-1.7 مللي ثانية. الحد الأقصى لسرعة Fastify وKoa وExpress يتراوح بين 5,766 و9,340 طلب/ثانية على جانب Node.js، عند 3.4-5.5 مللي ثانية.
- وقت التشغيل له نفس وزن اللغة: نفس رمز Express ينتقل من 5,766 req/s على Node.js إلى 18,917 req/s على Bun — وهو عامل ×3.3 دون تغيير الخط.
- فجوة الذاكرة هي الأكثر وضوحًا: 8.5 ميجابايت لـ Axum مقابل 82.5 ميجابايت لـ Express/Node.js - وهو ما يتوافق مع غياب أداة تجميع البيانات المهملة في Rust.
- لم تنشر Aurabase أي معايير خاصة بها حتى الآن. يتم فحص نواة Rust/axum/tokio من خلال الكود، وليس الأداء.
- الرقم المعزول لا يثبت شيئًا: الأجهزة وإصدار الإطار وحجم الحمولة ومستوى المنافسة تختلف في الترتيب أكثر من اللغة وحدها.
ما يظهره مقعد الطرف الثالث الأخير
Sharkbench هو مشروع مجتمعي مستقل يقيس ثلاثة أشياء: قدرة إطار العمل على التعامل مع طلبات HTTP المتزامنة، وعمليات الإدخال/الإخراج، وتسلسل JSON. يتم تشغيل الاختبار ضمن Docker/Linux على Ryzen 7 7800X3D، مع آخر تحديث عام في 24 أغسطس 2025 (Sharkbench.dev/web، تم الوصول إليه في 24 أغسطس 2026).
المصدر: Sharkbench، 24 أغسطس 2025 - Docker/Linux، Ryzen 7 7800X3D.
يقوم Axum — إطار العمل الذي تستخدمه Aurabase لنواة Rust، والذي تم التحقق منه في Cargo.toml — بمعالجة 21,030 طلبًا في الثانية على هذا المقعد. Express، إطار عمل Node.js الأكثر استخدامًا في الإنتاج، يعالج 5766 على نفس الجهاز: عامل 3.6. هذه ليست حالة معزولة. تقع جميع أطر عمل Rust الأربعة التي تم اختبارها ضمن نطاق ضيق يتراوح بين 18000 إلى 22000 طلب/ثانية، بينما تتراوح أطر عمل Node.js الثلاثة التي تم اختبارها بين 5766 و9340.
من الناحية العملية، يقيس "req/s" الإنتاجية في ظل الحمل المتزامن المستمر - وليس سرعة الطلب المعزول في موقع منخفض الحركة. بالنسبة لنقطة النهاية التي يتم استدعاؤها مرة واحدة كل بضع ثوانٍ، لا يتم رؤية الفرق أبدًا. يصبح الأمر حاسمًا عند نقطة نهاية ساخنة - تدفق في الوقت الفعلي، وواجهة برمجة تطبيقات عامة ذات حركة مرور كثيفة، وهي مهمة تجمع آلاف المكالمات معًا - حيث يقوم عدد الطلبات التي تتم معالجتها لكل نواة وحدة المعالجة المركزية، لأجهزة متساوية، بتعيين فاتورة البنية التحتية مباشرة.
الكمون يتبع نفس النمط
يتبع متوسط زمن الوصول نفس التسلسل الهرمي على هذا المنضدة: 1.4 إلى 1.7 مللي ثانية لأطر عمل Rust التي تم اختبارها، مقارنة بـ 3.4 إلى 5.5 مللي ثانية لأطر عمل Node.js التي تم اختبارها.
المصدر: Sharkbench، 24 أغسطس 2025 - زمن الوصول المتوسط، وليس p99.
وهذا الرقم متوسط وليس 99. تؤثر عمليات التوقف المؤقت للبيانات المهملة في وقت التشغيل المُدار في الغالب على قائمة انتظار الإرسال - الطلبات الأبطأ، وليس المتوسط. هذا هو موضوع مقال مخصص في هذه السلسلة: لماذا يؤدي غياب أداة تجميع البيانات المهملة إلى تغيير وقت الاستجابة p99.
لماذا لا يوجد لدى Rust استراحة GC للدفع
يقوم Rust بإدارة الذاكرة حسب الملكية، ويتم فحصها في وقت الترجمة - ولا يعمل جامع البيانات المهملة في الخلفية ويقاطع التنفيذ. يلخصه كتاب Rust Book الرسمي على النحو التالي: "لن تؤدي أي من ميزات الملكية إلى إبطاء برنامجك أثناء تشغيله" (لغة برمجة Rust، doc.rust-lang.org، تم الوصول إليه في 24 أغسطس 2026). يتم تحرير الذاكرة بمجرد خروج المتغير الذي يمتلكها عن النطاق - وهو وقت معروف في وقت الترجمة، وليس توقفًا مؤقتًا غير متوقع في وقت التشغيل.
على العكس من ذلك، يعمل Node.js على مؤشر ترابط JavaScript واحد ويفوض عمليات الإدخال/الإخراج إلى النواة عبر حلقة حدث متعددة المراحل (المؤقتات، عمليات الاسترجاعات المؤجلة، الاستقصاء، التحقق...) - ولكن أي حساب متزامن على هذا الخيط، بما في ذلك تمرير مجموعة البيانات المهملة من محرك V8، يمنع التنفيذ أثناء تشغيله (وثائق Node.js الرسمية, Nodejs.org، تمت الزيارة في 24 أغسطس 2026). هذا اختلاف في نموذج الذاكرة، وليس تفاصيل التنفيذ.
المفاجأة الحقيقية: وقت التشغيل له نفس وزن اللغة
النتيجة الأكثر مخالفة للحدس من نفس المنصة لا تتعلق بـ Rust: إنها تتعلق بـ Node.js نفسها. Express - نفس الكود، ونفس واجهة برمجة التطبيقات - ينتقل من 5,766 req/s على Node.js إلى 18,917 req/s على Bun، بعامل ×3.3، دون تغيير سطر من كود التطبيق (Sharkbench، 24 أغسطس 2025).
المصدر: Sharkbench، 24 أغسطس 2025 - نفس رمز Express، ثلاث مرات تشغيل JavaScript.
على Deno، يبلغ الحد الأقصى لرمز Express هذا 6088 طلب/ثانية - بالقرب من Node.js، وبعيدًا عن Bun. لغة جافا سكريبت متطابقة في الحالات الثلاث؛ إن وقت التشغيل - محرك JS الخاص به، وتنفيذ حلقة الأحداث، وجمع البيانات المهملة - هو الذي يغير اللعبة. إن مقارنة "Rust" بـ "Node.js" دون تحديد وقت التشغيل والإصدار وإطار العمل يشبه مقارنة التكوينات، وليس اللغات.
على هذا المقعد نفسه، يبلغ إطار عمل Go Gin ذروته عند 3,546 req/s عندما يرتفع FastHTTP - الذي لا يزال قيد التشغيل - إلى 5,567 req/s مع زمن وصول يبلغ 0.7 مللي ثانية فقط (Sharkbench، 24 أغسطس 2025). هناك نتيجتان مختلفتان تمامًا للغة واحدة: الشكل المعزول لا يلخص أبدًا النظام البيئي بأكمله.
لماذا رقم قياسي واحد لا يكفي أبدا
توضح معايير TechEmpower Framework نفس الفكرة على نطاق أوسع. تم تحديث مستودعها مفتوح المصدر في 24 مارس 2026، وكانت الجولة الأخيرة (الجولة 23) موضوعًا لمنشور بتاريخ 16 مارس 2026 (TechEmpower، تم الوصول إليه في 24 أغسطس 2026). يُجري هذا المشروع العديد من أنواع الاختبارات على مئات التطبيقات، وذلك على وجه التحديد لأن الاختبار الواحد لا يمثل أبدًا إطار عمل، ناهيك عن لغة.
صاغت شركة Convex، وهي شركة فاعلة في سوق قواعد البيانات، الموقف الأكثر وضوحًا حول هذا الموضوع: رفض المشاركة في "حرب الرسوم البيانية الشريطية" التسويقية بين قواعد البيانات المتنافسة، وهو ما اعتبره مضللاً. "إنه توسيع نطاق المسرح، وليس توسيع النطاق"، يكتب الفريق (محدب، تم الوصول إليه في 24 أغسطس 2026). ونحن نشارككم هذه القراءة: الرقم المجرد، دون منهجية منشورة، لا يثبت شيئا - لا للمنافس ولا لنا.
ما يتغير بشكل ملموس: الأجهزة (وحدة المعالجة المركزية، ذاكرة الوصول العشوائي)، والإصدار الدقيق لإطار العمل ووقت التشغيل، وحجم حمولة JSON، ومستوى المنافسة ومدة الاختبار، كلها تختلف في التصنيف - وأحيانًا أكثر من اختيار اللغة نفسها. إن المنصة التي لا تنشر هذه المعلمات لا تقوم بإعادة الإنتاج، وبالتالي لا تتحقق من نفسها — راجع منهجيتنا الكاملة والقابلة للتكرار لقياس الأداء الخلفي لـ.
وAurabase في كل هذا؟
الواجهة الخلفية الأساسية لـ Aurabase مكتوبة بلغة Rust، في axum وtokio - تم تحديدها في Cargo.toml الخاص بـ monorepo: عشر خدمات (aura-gateway, aura-auth, aura-db...) تشترك في نفس تبعية مساحة العمل axum (0.8) ونفس وقت التشغيل tokio، في طبعة 2021. تعتمد البوابة التي توجه مستوى البيانات وحركة مستوى الإدارة على hyper بالإضافة إلى axum - التفاصيل الكاملة موجودة في مقالتنا عن بنية مستوى البيانات / مستوى الإدارة للبوابة. تم توثيق بنية مساحة عمل Cargo التي تدعم هذه الخدمات العشر في مقالتنا حول مساحة عمل Cargo.
ما ليس لدينا حتى الآن هو رقم إنتاجية أو زمن الوصول منشور من Aurabase مع منهجية وأجهزة موثقة. وهذا أمر متعمد: فنحن نفضل نشر المنهجية قبل الشكل وليس العكس - وهذا هو موضوع مقال مستقبلي في هذه السلسلة.
للحصول على مقارنة كاملة للبنية - نواة Rust الموحدة في Aurabase مقابل المكدس غير المتجانس Elixir/Go/TypeScript/Node الموثق في منافس مباشر - راجع مقارنتنا التفصيلية Aurabase vs Supabase. إذا كنت تقوم بالفعل بترحيل مشروع، فإن دليل الترحيل Supabase إلى Aurabase يغطي المخطط وسياسات RLS وSDK.
ملحق: جدول البيانات كاملا
جميع الأسطر المذكورة في هذه المقالة، كما نشرتها Sharkbench في 24 أغسطس 2025 (Docker/Linux, Ryzen 7 7800X3D).
| الإطار | وقت التشغيل | الطلب/الطلبات | الكمون | الذاكرة |
|---|---|---|---|---|
| اكتيكس | الصدأ | 21 965 | 1.4 مللي ثانية | 16.6 ميجابايت |
| فرط | الصدأ | 21 781 | 1.5 مللي ثانية | 8.6 ميجابايت |
| أكسوم | الصدأ | 21 030 | 1.6 مللي ثانية | 8.5 ميجا بايت |
| صاروخ | الصدأ | 18 047 | 1.7 مللي ثانية | 6.4 ميجابايت |
| يصوم | Node.js | 9 340 | 3.4 مللي ثانية | 57.0 ميجابايت |
| كوا | Node.js | 8 828 | 3.6 مللي ثانية | 53.3 ميجابايت |
| صريحة | Node.js | 5 766 | 5.5 مللي ثانية | 82.5 ميجابايت |
| صريحة | كعكة | 18 917 | 1.3 مللي ثانية | 53.3 ميجابايت |
| صريحة | دينو | 6 088 | 5.0 مللي ثانية | 130.7 ميجابايت |
| الجن | اذهب | 3 546 | 1.0 مللي ثانية | 16.7 ميجابايت |
| FastHTTP | اذهب | 5 567 | 0.7 مللي ثانية | 13.4 ميجابايت |
استشهد بهذه البيانات: Sharkbench، "Web Framework Benchmarks،" Sharkbench.dev/web، آخر تحديث في 24 أغسطس 2025.
الأسئلة المتداولة
ماذا تتذكر
في الجدول المذكور هنا، تعمل جميع أطر عمل Rust في نطاق ضيق - 18000 إلى 22000 req/s، 1.4-1.7 مللي ثانية - متقدمًا بفارق كبير عن أطر عمل Node.js على Node.js نفسها (5766-9340 req/s، 3.4-5.5 مللي ثانية). لكن وقت التشغيل يغير الوضع بقدر ما يغير اللغة: يكاد Express on Bun يلحق بـ Axum on Rust.
إذا قمت بتقييم الواجهة الخلفية بناءً على الأداء الأولي وحده، فاطلب المنهجية قبل الرقم: الأجهزة، والإصدار، وحجم الحمولة، ومستوى المنافسة. ولم تصدر Aurabase أرقامها الخاصة بعد؛ وعندما يحدث ذلك، فإن المنهجية تأتي أولاً.