PRODمنصة BaaS الأوروبية السياديةافتح لوحة المعلومات →

الأداء · 12 دقيقة للقراءة

Rust مقابل Node.js: معيار الواجهة الخلفية وزمن الوصول

Affane Daylami · Fondateur · 5 يوليو 2026

العودة إلى بلوق

على منصة مجتمعية مستقلة تم تحديثها في أغسطس 2025، تعمل جميع أطر عمل Rust ما بين 18000 و22000 طلب في الثانية مع زمن استجابة يتراوح بين 1.4 إلى 1.7 مللي ثانية. تتراوح أطر عمل Node.js المكافئة بين 5,766 و9,340 طلب/ثانية، عند 3.4-5.5 مللي ثانية، على نفس الجهاز (Sharkbench، 24 أغسطس 2025).

تم إنشاء هذا النص الإنجليزي تلقائيًا من النص الأصلي الفرنسي ولم تتم مراجعته بعد.
تمت ترجمة هذه الصفحة تلقائيًا. النسخة الإنجليزية موثوقة.

لم نقم بتشغيل هذا المقعد بأنفسنا: فهذه شخصيات تابعة لجهات خارجية، عامة، من مصادر ومؤرخة. توضح هذه المقالة بالتفصيل ما يقولونه، والمنهجية التي تقف وراءها، وما الذي تغيره فعليًا بالنسبة لاختيار الواجهة الخلفية - وليس مقارنة بين 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).

الإنتاجية في الطلبات في الثانية، Rust vs Node.jsActix (Rust) 21,965 طلب/ثانية، Hyper (Rust) 21,781 طلب/ثانية، Axum (Rust) 21,030 طلب/ثانية، Rocket (Rust) 18,047 طلب/ثانية، Fastify (Node.js) 9,340 طلب/ثانية، Koa (Node.js) 8,828 طلب/ثانية، Express (Node.js) 5,766 طلبًا/طلبًا. المصدر: Sharkbench، 24 أغسطس 2025.05k10k15k20kأكتيكس (الصدأ)21 965فرط (الصدأ)21 781أكسوم (الصدأ)21 030صاروخ (الصدأ)18 047Fastify (Node.js)9 340كوا (Node.js)8 828اكسبريس (Node.js)5 766

المصدر: 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 التي تم اختبارها.

متوسط زمن الوصول بالمللي ثانية، Rust vs Node.jsActix (Rust) 1.4 مللي ثانية، Hyper (Rust) 1.5 مللي ثانية، Axum (Rust) 1.6 مللي ثانية، Rocket (Rust) 1.7 مللي ثانية، Fastify (Node.js) 3.4 مللي ثانية، Koa (Node.js) 3.6 مللي ثانية، Express (Node.js) 5.5 مللي ثانية. المصدر: Sharkbench، 24 أغسطس 2025.0 مللي ثانية1 مللي ثانية2 مللي ثانية3 مللي ثانية4 مللي ثانية5 مللي ثانيةأكتيكس (الصدأ)1.4 مللي ثانيةفرط (الصدأ)1.5 مللي ثانيةأكسوم (الصدأ)1.6 مللي ثانيةصاروخ (الصدأ)1.7 مللي ثانيةFastify (Node.js)3.4 مللي ثانيةكوا (Node.js)3.6 مللي ثانيةاكسبريس (Node.js)5.5 مللي ثانية

المصدر: Sharkbench، 24 أغسطس 2025 - زمن الوصول المتوسط، وليس p99.

وهذا الرقم متوسط وليس 99. تؤثر عمليات التوقف المؤقت للبيانات المهملة في وقت التشغيل المُدار في الغالب على قائمة انتظار الإرسال - الطلبات الأبطأ، وليس المتوسط. هذا هو موضوع مقال مخصص في هذه السلسلة: لماذا يؤدي غياب أداة تجميع البيانات المهملة إلى تغيير وقت الاستجابة p99.

#
لماذا

لماذا لا يوجد لدى Rust استراحة GC للدفع

يقوم Rust بإدارة الذاكرة حسب الملكية، ويتم فحصها في وقت الترجمة - ولا يعمل جامع البيانات المهملة في الخلفية ويقاطع التنفيذ. يلخصه كتاب Rust Book الرسمي على النحو التالي: "لن تؤدي أي من ميزات الملكية إلى إبطاء برنامجك أثناء تشغيله" (لغة برمجة Rust، doc.rust-lang.org، تم الوصول إليه في 24 أغسطس 2026). يتم تحرير الذاكرة بمجرد خروج المتغير الذي يمتلكها عن النطاق - وهو وقت معروف في وقت الترجمة، وليس توقفًا مؤقتًا غير متوقع في وقت التشغيل.

ownership.rsrust
fn main() {
    let data = String::from("réponse API"); // "البيانات" تمتلك السلسلة
    process(data); // حيازة يترك هنا
    // لم تعد "البيانات" صالحة هنا - لا يوجد مؤشر متدلي، ولا يوجد حر مزدوج
} // يتم إصدار "البيانات" هنا، بشكل حتمي

fn process(s: String) {
    println!("{s}");
} // `s` يخرج عن النطاق هنا: الإصدار الفوري، بدون تصريح لجمع البيانات المهملة

على العكس من ذلك، يعمل 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).

سرعة النقل وفقًا لوقت تشغيل JavaScript، مقارنةً بـ Axumأكسوم على الصدأ: 21,030 طلب/ثانية. سريع على كعكة: 18,917 طلب/ثانية. اكسبريس على دينو: 6,088 طلب/ثانية. Express على Node.js: 5,766 طلب/ثانية. نفس الرمز السريع في جميع الحالات الثلاث. المصدر: Sharkbench، 24 أغسطس 2025.05k10k15k20kأكسوم (الصدأ، مرجع)21 030أعرب عن كعكة18 917اكسبريس على دينو6 088التعبير عن Node.js5 766

المصدر: 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 9651.4 مللي ثانية16.6 ميجابايت
فرطالصدأ21 7811.5 مللي ثانية8.6 ميجابايت
أكسومالصدأ21 0301.6 مللي ثانية8.5 ميجا بايت
صاروخالصدأ18 0471.7 مللي ثانية6.4 ميجابايت
يصومNode.js9 3403.4 مللي ثانية57.0 ميجابايت
كواNode.js8 8283.6 مللي ثانية53.3 ميجابايت
صريحةNode.js5 7665.5 مللي ثانية82.5 ميجابايت
صريحةكعكة18 9171.3 مللي ثانية53.3 ميجابايت
صريحةدينو6 0885.0 مللي ثانية130.7 ميجابايت
الجناذهب3 5461.0 مللي ثانية16.7 ميجابايت
FastHTTPاذهب5 5670.7 مللي ثانية13.4 ميجابايت

استشهد بهذه البيانات: Sharkbench، "Web Framework Benchmarks،" Sharkbench.dev/web، آخر تحديث في 24 أغسطس 2025.

#
الأسئلة الشائعة

الأسئلة المتداولة

هل هذا يعني أن Node.js خيار سيء؟+
لا، يظل Node.js خيارًا قويًا للعديد من الواجهات الخلفية، خاصة عندما يكون الفريق ماهرًا بالفعل في TypeScript ولا تهيمن حوسبة وحدة المعالجة المركزية على التحميل. الفجوة المقاسة هنا هي في الإنتاجية الأولية وزمن الوصول في ظل المنافسة العالية - وليس في إنتاجية التطوير أو النظام البيئي للحزمة. في Bun، تم تقليل الفجوة مع Rust بشكل كبير (18,917 طلب/ثانية لـ Express مقارنة بـ 21,030 لـ Axum): اختيار وقت التشغيل مهم بقدر أهمية اختيار اللغة.
لماذا يعد Express بطيئًا جدًا مقارنة بأطر عمل Node.js الأخرى؟+
على هذا المنضدة، يعد Express (5,766 req/s على Node.js) هو الأبطأ بين أطر عمل Node.js التي تم اختبارها، خلف Koa (8,828) وFastify (9,340). يعود تاريخ Express إلى عام 2010 ويفضل تصميمه بساطة البرامج الوسيطة بدلاً من الإنتاجية الأولية. في وقت التشغيل نفسه، يؤدي اختيار إطار العمل بالفعل إلى إنشاء فجوة ×1.6 بين Express وFastify (Sharkbench، 24 أغسطس 2025).
كيف تم تحقيق هذا المعيار، وهل يمكننا إعادة إنتاجه؟+
يأتي المعيار المذكور في هذه المقالة من Sharkbench، وهو مشروع مجتمعي مستقل يختبر طلبات HTTP المتزامنة وتسلسل الإدخال/الإخراج وJSON ضمن Docker/Linux، على Ryzen 7 7800X3D، مع تحديث عام نهائي في 24 أغسطس 2025 (sharkbench.dev/web). هذا ليس مقعد Aurabase - لم نقم بتشغيله أو التحقق من صحته بأنفسنا؛ نستشهد به لأن منهجيته ومواده منشورة، على عكس العديد من الشخصيات التسويقية.
هل نشرت Aurabase معاييرها الخاصة؟+
لا، ليس حتى الآن. تم التحقق من نواة Rust/axum/tokio الخاصة بـ Aurabase في كود مصدر monorepo، ولكن لم يتم قياس ونشر أرقام الإنتاجية أو زمن الوصول الخاصة بـ Aurabase. تقارن هذه المقالة Rust وNode.js بشكل عام، استنادًا إلى منصات من مصادر خارجية - وهذه ليست مقارنة بين Aurabase ومنافس.
الفرق في الإنتاجية والذاكرة، ما الفرق الذي يحدثه في فاتورة البنية التحتية؟+
في النسخة المذكورة، يستهلك Axum 8.5 ميجابايت من الذاكرة مقارنة بـ 82.5 ميجابايت لـ Express على Node.js - وهو عامل قريب من ×10 (Sharkbench، 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 أرقامها الخاصة بعد؛ وعندما يحدث ذلك، فإن المنهجية تأتي أولاً.

هل أنت جاهز للنشر؟

الواجهة الخلفية الخاصة بك في خمس دقائق.

لا حاجة لبطاقة ائتمان · 500 ميجابايت مجانًا · 50000 MAU