ruby لماذا يقول الناس أن روبي بطيء؟




performance (12)

أنا أحب روبي على القضبان وأنا استخدمه لجميع مشاريع تطوير الويب الخاصة بي. قبل بضع سنوات ، كان هناك الكثير من الحديث عن أن القضبان هي عبارة عن ذاكرة خناقية ، وحول كيف أنها لم تتقدم بشكل جيد ، لكن هذه الاقتراحات وضعت على السرير من قبل جريج بولاك here .

في الآونة الأخيرة ، كنت أسمع الناس يقولون أن روبي نفسها بطيئة.

  • لماذا يعتبر روبي بطيئا؟

أنا لا أجد روبي بطيئا ولكن مرة أخرى ، أنا فقط استخدمه لجعل تطبيقات CRUD بسيطة ومدونات الشركة. ما نوع المشاريع التي أحتاج إلى القيام بها قبل أن أجد أن روبي أصبح بطيئًا؟ أم أن هذا البطء هو مجرد شيء يؤثر على جميع لغات البرمجة؟

  • ما هي خياراتك كمبرمج روبي إذا كنت ترغب في التعامل مع هذا "البطء"؟

  • أي إصدار من روبي يناسب بشكل أفضل تطبيقًا مثل Stack Overflow حيث السرعة حرجة وحركة المرور شديدة؟

الأسئلة غير موضوعية ، وأدرك أن الإعداد المعماري (EC2 مقابل الخوادم المستقلة وما إلى ذلك) يحدث فارقاً كبيراً لكنني أود أن أسمع ما يفكر فيه الناس حول روبي بطيئاً.

أخيرًا ، لا أستطيع العثور على أخبار كثيرة على روبي 2.0 - أنا أعتبر أننا بعيدون جدًا عن ذلك الحين؟


Answer #1

من الواضح أن الحديث عن السرعة يخسر روبي. على الرغم من أن الاختبارات القياسية تشير إلى أن روبي ليس أبطأ بكثير من PHP. ولكن في المقابل ، أنت تحصل على رمز جاف سهل الإستخدام ، وهو الأفضل من جميع الأطر بلغات مختلفة.

بالنسبة لمشروع صغير ، لن تشعر بأي بطء (أعني حتى مثل مستخدمي <50K) بالنظر إلى أنه لا يتم استخدام أي حسابات معقدة في الكود ، فقط في الأمور السائدة.

بالنسبة لمشروع أكبر ، فإن دفع تكاليف الموارد يؤتي ثماره وهو أرخص من أجور المطورين. بالإضافة إلى ذلك ، تبين أن كتابة الشفرة على RoR أسرع بكثير من أي لغة أخرى.

في عام 2014 ، هذا الفرق في السرعة الذي تتحدث عنه هو أن معظم المواقع الإلكترونية غير مهمة.


Answer #2

جويل على برمجيات - روبي الأداء إعادة النظر بشكل جيد يفسر ذلك. قد يكون عفا عليه الزمن ...

أود أن أوصي بالتعامل معها كما اعتدت على روبي أون ريلز ،
إذا واجهت مشكلة في الأداء في أي وقت ، فيمكنك إعادة النظر في استخدام لغة وإطار عمل مختلفين.

في هذه الحالة ، أود أن أقترح حقا C # مع ASP.NET MVC 2 ، يعمل بشكل جيد جدا لتطبيقات CRUD.


Answer #3

هذا ما قاله مبتكر القضبان ، ديفيد هينيمير هانسون :

القضبان [روبي] هو للغالبية العظمى من تطبيقات الويب Fast Enough. لقد حصلنا على مواقع بها ملايين من مشاهدات الصفحة الديناميكية في اليوم. إذا انتهى بك المطاف مع صفحة ياهو أو أمازون الأمامية ، فمن غير المحتمل أن يكون إطار العمل في أي لغة مهما كان جيدًا. ربما عليك أن تتدحرج بنفسك لكن من المؤكد أنني أريد دورات CPU مجانية أيضًا. أنا فقط يحدث لرعاية أكثر بكثير عن دورات مجانية للمطورين وأرغب في تداول السابق لهذا الأخير.

أي أن طرح المزيد من الأجهزة أو الأجهزة في هذه المشكلة هو أرخص من توظيف المزيد من المطورين واستخدامها بشكل أسرع ، ولكن من الصعب الحفاظ على اللغة. بعد كل شيء ، عدد قليل من الناس يكتبون تطبيقات الويب في C.

روبي 1.9 هو تحسن كبير على 1.8. أكبر المشاكل مع Ruby 1.8 هي طبيعتها المفسرة (لا bytecode ، لا تجميع) و أن طريقة المكالمات ، واحدة من العمليات الأكثر شيوعا في Ruby ، ​​بطيئة بشكل خاص.

لا يساعد ذلك إلى حد كبير كل شيء هو البحث عن طريقة في روبي - إضافة رقمين ، فهرسة مصفوفة. حيث تعرض اللغات الأخرى الاختراقات (طريقة __add__ في Python ، __add__ 's overload.pm) ، يقوم Ruby __add__ OO خالص في جميع الحالات ، وهذا يمكن أن يؤذي الأداء إذا لم يكن المترجم / المترجم ذكيًا بما يكفي.

إذا كنت أكتب طلبًا شائعًا على الويب في Ruby ، ​​فسيتم التركيز على التخزين المؤقت. يعمل التخزين المؤقت للصفحة على تقليل وقت المعالجة لهذه الصفحة إلى الصفر ، بغض النظر عن اللغة التي تستخدمها. بالنسبة إلى تطبيقات الويب ، فإن مقدار الحمل في قاعدة البيانات والإدخال / الإخراج الأخرى يبدأ في زيادة أهمية اللغة ، لذا سأركز على تحسين ذلك.


Answer #4

أود أن أقول أن روبي بطيء لأنه لم يتم بذل الكثير من الجهد في جعل المترجم أسرع. وينطبق الشيء نفسه على بايثون. يعتبر Smalltalk ديناميكيًا تمامًا مثل روبي أو بايثون ، ولكنه يحقق أداءً أفضل من حيث الحجم ، راجع http://benchmarksgame.alioth.debian.org . منذ أن تم استبدال Smalltalk بدرجة أو بأخرى بجافا و C # (التي كانت قبل 10 سنوات على الأقل) لم يتم عمل تحسين للأداء أكثر من ذلك و Smalltalk لا تزال طرق أسرع من Ruby و Python. كان لدى الأشخاص في زيروكس بارك وفي شركة أو تي آي / آي بي إم المال لدفع الناس الذين يعملون على جعل سمال توك أسرع. ما لا أفهمه هو لماذا لا تنفق غوغل المال على جعل بايثون أسرع لأنها متجر كبير في بايثون. بدلاً من ذلك ينفقون المال على تطوير لغات مثل Go ...


Answer #5

الجواب بسيط: يقول الناس أن روبي بطيء لأنه بطيء على أساس المقارنات المقاسة مع اللغات الأخرى. ضع في اعتبارك أن "بطيئًا" نسبي. في كثير من الأحيان ، يكون روبي ولغات "بطيئة" أخرى سريعة بما فيه الكفاية.


Answer #6

الأداء دائمًا ما يكون حول التصميم الجيد وتفاعلات قاعدة البيانات المحسنة. يفعل روبي ما تحتاج إليه معظم مواقع الويب بسرعة كبيرة ، خاصة الإصدارات الأحدث ؛ وتوفر سرعة التطوير وسهولة الصيانة مكاسب كبيرة في التكاليف وفي الحفاظ على رضا العملاء. أجد أن JAVA لديها أداء تنفيذ بطيء في بعض المهام ، ونظرا لصعوبة التطوير في JAVA ، فإن العديد من المطورين ينشئون تطبيقات بطيئة بغض النظر عن القدرة النظرية للسرعة كما هو موضح في المعايير (عادة ما يتم ابتكار المعايير لإظهار قدرة محددة وضيقة). عندما أحتاج إلى معالجة مكثفة غير ملائمة بشكل جيد لقدرات قاعدة البيانات الخاصة بي ، اخترت C أو Objective-C أو بعض اللغات الأخرى ذات الأداء العالي المجمعة بالفعل لتلك المهام حسب النظام الأساسي. إذا كنت بحاجة إلى إنشاء تطبيق ويب قاعدة بيانات ، فإنني أستخدم RoR أو أحيانًا C # ASP.NET وفقًا للمتطلبات الأخرى ؛ لأن جميع المنصات لديها نقاط القوة والضعف. سرعة التنفيذ للأشياء التي يقوم بها التطبيق الخاص بك مهمة ، ولكن بعد كل شيء ، إذا كان أداء التنفيذ لأحد الجوانب الضيقة للغة هو كل ذلك. عندها ربما أستخدم لغة Assembler في كل شيء.


Answer #7

يكون Ruby أبطأ من C ++ في عدد من المهام القابلة للقياس بسهولة (على سبيل المثال ، تنفيذ التعليمات البرمجية التي تعتمد بشكل كبير على النقطة العائمة). هذا ليس مفاجئاً للغاية ، ولكنه مبرر كافٍ لبعض الناس ليقولوا إن "روبي بطيء" دون مؤهل. انهم لا يحسبون حقيقة أنه من الأسهل والأكثر أمانا لكتابة رمز روبي من C ++.

أفضل حل هو استخدام وحدات مستهدفة مكتوبة بلغة أخرى (على سبيل المثال ، C ، C ++ ، Fortran) في روبي الخاص بك. يمكن أن يقوم هؤلاء بالرفع الثقيل ويمكن أن تركز النصوص الخاصة بك على قضايا التنسيق الأعلى مستوى.


Answer #8

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


Answer #9

أداء روبي جيدًا لإنتاجية المطورين. روبي من قبل قوى الطبيعة اختبار مدفوعة التنمية بسبب عدم وجود أنواع. يقوم روبي بأداء جيد عند استخدامه كملف عالي المستوى للمكتبات C. كما يقوم روبي بأداء جيد أثناء العمليات طويلة الأمد عندما يتم تجميع JIT إلى رمز الجهاز عبر JVM أو Rbx VM. لا يقوم روبي بأداء جيد عندما يطلب منه تسجيل الأرقام في وقت قصير باستخدام شفرة روبي نقية.


Answer #10

بادئ ذي بدء ، أبطأ فيما يتعلق ماذا ؟ C؟ الثعبان؟ دعونا نحصل على بعض الأرقام في لعبة معايير لغة الكمبيوتر :

لماذا يعتبر روبي بطيئا؟

يعتمد على الشخص الذي تسأله. يمكن أن يقال لك:

  • روبي هي لغة مفسرة وسوف تميل اللغات المفسرة إلى أن تكون أبطأ من تلك المترجمة
  • يستخدم Ruby مجموعة البيانات المهملة (على الرغم من أن C # ، والتي تستخدم أيضًا مجموعة البيانات المهملة ، تأتي من مجموعتين متقدما من Ruby و Python و PHP وما إلى ذلك في المقارنات الأكثر خوارزمية وأقل تخصيصًا للذاكرة أعلاه)
  • تكون مكالمات أسلوب روبي بطيئة (على الرغم من أنه ، بسبب بط الكتابة ، يمكن القول أنها أسرع من اللغات المفسرة المكتوبة بقوة)
  • روبي (باستثناء JRuby) لا يدعم خاصية multithreading الحقيقية
  • إلخ

ولكن ، مرة أخرى ، بطيئة فيما يتعلق ماذا؟ روبي ٩.٩ تقريبا بسرعة Python و PHP (ضمن عامل أداء 3x) عند مقارنته بـ C (والتي يمكن أن تصل إلى 300x أسرع) ، لذلك ما سبق (باستثناء اعتبارات الترابط ، إذا كان التطبيق الخاص بك يعتمد بشكل كبير على هذا الجانب ) هي أكاديمية إلى حد كبير.

ما هي خياراتك كمبرمج روبي إذا كنت ترغب في التعامل مع هذا "البطء"؟

اكتب من أجل قابلية التوسع وإلقاء المزيد من الأجهزة عليها (مثل الذاكرة)

أي إصدار من روبي يناسب بشكل أفضل تطبيقًا مثل حيث السرعة حرجة وحركة المرور شديدة؟

حسناً ، REE (مع Passenger ) ستكون مرشحاً جيداً.


Answer #11

طريقة التعامل مع أداء روبي في تطبيق الويب هي نفسها كما في أي لغة برمجة أخرى:

هندسة معمارية

هذا أسهل في Rails منه في معظم أطر الويب الأخرى.

على مستوى التطبيق ، من خلال التخزين المؤقت لأي من المفترض أن يتم تخزينه مؤقتًا وإدارة الوصول إلى قاعدة البيانات بطريقة ذكية (نظرًا لأن عنق الزجاجة يكون عادةً على وصول "DB" لمعظم تطبيقات WEB).

القضبان تجعل من السهل جدا والطبيعي حل هذه المشاكل. هناك العديد من الأفكار التجريدية للتخزين المؤقت للبيانات والصفحات والأجزاء ، وهناك أيضًا تجريدات لطيفة جدًا للتعامل مع جزء SQL بطريقة محسنة وقابلة لإعادة الاستخدام ( سجل نشط و AREL ).

هذا هو السبب في أن الكثير من التطبيقات المكتوبة بلغات أسرع وغير معبرة (مثل php) تصبح أبطأ من نظرائهم في Ruby. ليس من السهل والأنيق معالجة التخزين المؤقت والاستعلام مع هذه اللغات أكثر من روبي.

على مستوى البنية التحتية من المعقول أن نفكر في موازنة الحمل وكل تلك الأشياء التي لا أعرف الكثير عنها. Heroku بهذه المشكلة عن طريق الاستعانة ببعض المنصات كمزود خدمة ، مثل Heroku أو Engine Yard . على أي حال. قد لا يكون من الصعب جدًا نشر القضبان مع موازنة الحمل.


Answer #12

يقول الناس أن روبي بطيء لأنهم يقارنون برامج روبي بالبرامج المكتوبة بلغات أخرى. ربما لا تحتاج البرامج التي تكتبها إلى أن تكون أسرع. ربما بالنسبة للبرامج التي تكتبها ليس روبي عنق الزجاجة الذي يبطئ الأمور.

روبي 2.1 مقارنة بجافا سكريبت V8

روبي 2.1 مقارنة مع لوا العادي

روبي 2.1 مقارنة بايثون 3





performance