سؤال

هناك الفرق ملحوظ جدا في تطبيق الوقت بين بدء تشغيل بلدي المواصفات من سطر الأوامر مع روبي 1.9.x مقابل1.8.7.طلبي يبدأ أسرع بكثير مع روبي 1.8.7 من روبي 1.9.1 أو 1.9.2.تطبيق الشروع في فرق حوالي 18 ثانية.يستغرق حوالي 5 ثوان بلدي التطبيق لتهيئة مع 1.8.7 و 23 ثانية مع 1.9.1 و 1.9.2.

تطبيق التهيئة الوقت ليست صفقة كبيرة للإنتاج ، وإنما هو صفقة كبيرة جدا BDD التنمية.في كل مرة أغير رمز تشغيل المواصفات, علي أن أنتظر إضافية 18 ثانية في التكرار.

أفترض أن هذا التطبيق التهيئة الوقت يعزى إلى YARV تجميع بايت كود بلدي التطبيق تهيئة.

هل أنا على صواب YARV تباطؤ الطلب التهيئة ، و هل هناك طريقة لتعطيل YARV على سطر الأوامر.سيكون من الجميل جدا أن تكون قادرة على تعطيل YARV فقط عندما أنا أدير عملي المواصفات.

هل كانت مفيدة؟

المحلول

YARV هو محض روبي مترجم.إذا قمت بتعطيل ذلك ، ليس هناك شيء اليسار.

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

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

فقط فسر تنفيذ روبي 1.9 الآن هو JRuby.بالطبع يوجد لديك كل JVM النفقات العامة للتعامل معها.أفضل شيء يمكنك القيام به هو محاولة مدى سرعة يمكنك الحصول على JRuby لبدء (استخدام ليلا 1.6.0.ديف يبني من http://CI.JRuby.Org/snapshots/ لأن كلا 1.9 الدعم و وقت بدء التشغيل بشدة عملت على حق هذه اللحظة) إما باستخدام بعض سريع جدا ابتداء من سطح المكتب المنحى JVM مثل IBM J9 أو محاولة JRuby هو Nailgun الدعم الذي يحتفظ JVM قيد التشغيل في الخلفية.

هل يمكن أيضا محاولة للتخلص من جواهر روبي ، والتي عادة يستهلك الكثير من وقت بدء التشغيل ، خاصة على YARV.(استخدام --disable-gem فلكس الخيار حقا في التخلص من ذلك.)

نصائح أخرى

لا توجد حاليًا طريقة لتعطيل YARV ، وذلك ببساطة لأن MRI 1.9 يتضمن الجهاز الظاهري فقط ، وليس مترجمًا فوريًا.سيكون الحفاظ على كليهما بمثابة عمل كثير للغاية بالنسبة للفريق الأساسي.

في المستقبل ، من المحتمل أن تكون هناك طرق للتخزين المؤقت للكود الثانوي الذي يولده YARV (كما يفعل روبينيوس).في الوقت الحالي ، لا توجد طريقة لتحميل هذا الرمز الثانوي من خلال Ruby (انظر #971) ، ولكن يمكنك بسهولة كتابة امتداد C الذي ينجز ذلك.

ومع ذلك ، أود أن أقول إن 18 ثانية هي الكثير جدًا وربما يكون خطأ.أعلم أن هناك بعض الخيوط في قلب الياقوت التي تناقش بطء require ؛ربما تجد شيئًا مثيرًا للاهتمام هناك!

قد يكون خرج RC التالي البالغ 1.9.2 أسرع لأنه لا يتم تحميل $: مع كل ما تبذلونه من dirs الأحجار الكريمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top