حتى أن معظم مطوري Ruby on Rails ذوي الخبرة ينسون أحيانًا الأخطاء المزعجة التي ينتجونها في عمليات التطوير الطويلة ، مثل استعلامات
n + 1 أو يفقدون الكثير من الوقت مع بعض الاستعلامات غير المتوقعة من أي مكان.
لا يمكن تجنب كل هذه الأخطاء قبل الإنتاج ، ولكن على الأقل يمكنك تجربة :)
نعم ، هذه قائمة أخرى من الأحجار الكريمة المنسية أو غير المشهورة جدًا لعمليات التطوير الأفضل.
لنبدأ.
1. رصاصة
Bullet - أحد الحلول الأكثر شعبية وأسهل للقتال مع استفسارات
n + 1 .
يوفر هذا جوهرة طرق مختلفة لتظهر لك أن بعض الاستعلامات ليست فعالة. متصفح (سجل وحدة التحكم) ، سجل التنمية ، ملف الإخراج. خياري هو استخدام
سجل التطوير فقط لأنه ليس مزعجًا للغاية (تظهر بعض المشكلات في الوقت المناسب أو لا يمكن حلها بسهولة باستخدام البنية الحالية).
كيف يعمل : لديك ، على سبيل المثال ، طلب
فهرس لبعض النماذج (
الخدمات ). وهذا النموذج له العديد من العلاقات المختلفة (
خدمات has_many مجموعات ) ، لديهم علاقات أيضًا .. (
مجموعات has_many مستخدمين ،
المستخدمين has_many شعارات ، إلخ). ويمكن أن يسبب تحميل غير فعال المتكررة للبيانات (
ن + 1 ). تريد عرض logo_url وتبدأ فقط في إنشاء استعلامات غير ضرورية لكل مستخدم (في بعض الأحيان تراها على الفور ، وأحيانًا لا تكون واضحة). في معظم الحالات ، ستطلق
الرصاصة الخطوط التالية في سجلات مطوري البرامج:
GET /api/services USE eager loading detected Service => [:groups] Add to your finder: :includes => [:groups] Call stack /home/projects/test_app_name/app/services/index.rb:18:in `perform' /home/projects/test_app_name/app/controllers/services_controller.rb:7:in `index'
كما ترون ، فإنه يظهر الطلب ، وما تم العثور عليه (التحميل المتلهف) ، والطراز وما تم تحميله بالضبط عدة مرات. وندعو المكدس ، بالطبع.
بداية جيدة بما فيه الكفاية!
رصاصة يمكن أن تجد تحميل حريصة غير المستخدمة ومخابئ العداد. ويتيح لك تعطيل أي من أجهزة الكشف الخاصة به.
في مشاريعي ، أفضل
تعطيل استعلامات التحميل الشغوفة غير المستخدمة لأنها موقف شائع عند استخدام خدمة طراز تحميل واحدة في العديد من الأماكن ، وفي أماكن مختلفة ، لا تحتاج إلى تحميل بعض العلاقات المطلوبة مسبقًا في بعض الأماكن الأخرى. وهذا الوضع مزعج للغاية في النهاية. من الأفضل لك تحميل بعض المعلومات ثم تنسى تحميلها بشكل صحيح في مكان ما.
التكوين الخاص بي (في
development.rb ):
config.after_initialize do Bullet.enable = true Bullet.rails_logger = true Bullet.unused_eager_loading_enable = false end
مزيد من المعلومات :
2. ActiveRecordQueryTrace (active_record_query_trace)
active_record_query_trace - جوهرة تسجل / تعرض backtrace لجميع استعلامات SQL التي يتم تنفيذها بواسطة Active Record
(لقد قمت فقط بنسخ جزء الوصف من صفحة Github لأن لديهم كل ما تحتاج إلى معرفته)
يعرض backtrace لكل استعلام في وحدة التحكم والسجل الخاصة بتطوير Rails. يسمح لك بتتبع مكان تنفيذ الاستعلامات في التطبيق الخاص بك. مفيد لتحسين الأداء وللعثور على مكان البدء عند إجراء تغييرات على تطبيق كبير.عند التمكين ، سيتم تسجيل كل استعلام مثل:
Started GET "/" for 172.19.0.1 at 2019-09-29 07:08:04 +0000 Processing by HomeController
من جانبي أريد أن أقول ، أن هذه الأحجار الكريمة مفيدة للغاية عندما تبدأ العمل في المشروع وليس من البداية ولا تستطيع أن تعرف كيف يعمل كل شيء (أو مع ميزات الزملاء فقط) ، وبعض مكالمات الاستعلامات ليست مفهومة بسهولة. يمكن أن يوفر الكثير من الوقت ، حقا.
أيضا ملاحظة صغيرة:
لكل استعلام ActiveRecord سيكون هناك backtrace واحد إضافي في ملف السجل. بشكل افتراضي ، إنه 5 ، وهو حجم كبير بما يكفي لجعل سجلاتك غير قابلة للقراءة بالكامل.
ولكن يمكن السيطرة عليها:
ActiveRecordQueryTrace.lines = 1
مزيد من المعلومات:3. rails_panel
RailsPanel هو
امتداد كروم لتطوير Rails
سينهي خياطتك الخاصة
بالتطوير . احصل على جميع المعلومات حول طلبات تطبيق Rails في المتصفح - في لوحة أدوات المطور. يوفر نظرة ثاقبة ديسيبل / التقديم / مجموع الأوقات ، قائمة المعلمات ، وجهات النظر المقدمة وأكثر من ذلك.
لاستخدام هذا الامتداد ، تحتاج إلى إضافة
meta_request gem إلى تطبيق Gemfile الخاص بالتطبيق:
group :development do gem 'meta_request' end
قم بتثبيت ملحق RailsPanel من سوق
Chrome الإلكتروني . هذه هي الطريقة الموصى بها لتثبيت الإضافة ، حيث إنها ستقوم بالتحديث التلقائي لكل إصدار جديد.
هذا مثال على تمكين rails_panel gem / extension:
مزيد من المعلومات:4. رف مصغرة المحلل
بعد تثبيت الأحجار الكريمة وفتح مشروعك ، سترى النافذة المنبثقة في الزاوية العلوية اليسرى (يمكن إعادة تكوينها) على الصفحة:

بعد النقر فوقه ، سترى معلومات أكثر تفصيلاً:

كما ترون ، إليك الكثير من المعلومات المفيدة لمزيد من العمل الفعال. كما أنه يعمل مع تطبيقات SPA.
مزيد من المعلومات:5. newrelic / datadog
New Relic هو
نظام لإدارة الأداء ، تم تطويره بواسطة New Relic، Inc. يوفر لك معلومات عميقة حول أداء تطبيق Rails أو Ruby لأنه
يعمل في الإنتاج وينقلها إلى newrelic.com حيث يمكنك
مراقبتها في الوقت الفعلي . (أيضًا لديهم حساب بدون رسوم)
Datadog كبديل هو أيضا خيار جيد للغاية. أنها توفر نفس الوظيفة مثل New Relic. فقط تحقق من إمكانياتها وواجهة المستخدم والأسعار واختر ما تريد.
مزيد من المعلومات:شكرا للقراءة!