أدوات تحليل الأداء
ruby-prof وstackprof
أدوات تحليل الأداء درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
Benchmark في مقابل Profiler
يخبرك اختبار الأداء بالمدة التي يستغرقها الشيء. أما محلل الأداء فيخبرك بموضع استهلاك الزمن داخله.
- يفصّل محللو الأداء الزمن حسب الطريقة أو السطر
- يكشفون نقاط الاختناق التي لن تتوقعها أبدًا
- من محللات أداء Ruby الشائعة: ruby-prof وstackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'نظرة عامة على ruby-prof
ruby-prof هو محلل أداء تفصيلي يعتمد على تتبع التنفيذ. فهو يتصل بكل استدعاء لطريقة.
- يوفر أعداد استدعاءات وأزمنة دقيقة جدًا
- له تكلفة إضافية أعلى، لذا استخدمه على عينات ممثلة
- يُثبّت باستخدام
gem install ruby-prof
# Gemfile
gem 'ruby-prof'تحليل كتلة باستخدام ruby-prof
غلّف الشيفرة داخل RubyProf.profile لالتقاط نتيجة يمكنك طباعتها.
- يُرجع كائن نتيجة للتحليل
- مرّره إلى أداة طباعة لإخراج النتيجة
require 'ruby-prof'
result = RubyProf.profile do
1000.times { |i| (1..i).reduce(:+) }
end
RubyProf::FlatPrinter.new(result).print(STDOUT)أدوات طباعة ruby-prof
يوفر ruby-prof عدة أدوات طباعة لعرض البيانات بطرق مختلفة.
FlatPrinterقائمة مرتبة بالطرقGraphPrinterعلاقات المستدعي والمستدعىCallTreePrinterمخرجات متوافقة مع KCachegrind
require 'ruby-prof'
result = RubyProf.profile { 100.times { 'x' * 1000 } }
RubyProf::GraphPrinter.new(result).print(STDOUT, min_percent: 1)قراءة تحليل مسطّح
يسرد التحليل المسطّح الطرق حسب الزمن المستهلك.
- يمثل %self الزمن المستغرق في الطريقة نفسها
- يمثل total الزمن شاملًا الطرق المستدعاة
- يمثل calls عدد مرات الاستدعاء
ركّز أولًا على الإدخالات ذات أعلى قيمة %self.
# Example flat output columns:
# %self total self wait child calls name
puts 'Optimize the top %self method first'نظرة عامة على stackprof
stackprof هو محلل أداء يعتمد على أخذ العينات. إذ يسجل مكدس الاستدعاءات دوريًا.
- تكلفته الإضافية منخفضة جدًا، لذا فهو آمن للاستخدام في الإنتاج
- يأخذ عينات حسب وحدة المعالجة المركزية أو الزمن الفعلي أو تخصيص الكائنات
- يُثبّت باستخدام
gem install stackprof
# Gemfile
gem 'stackprof'تشغيل stackprof
تحلل StackProf.run كتلةً وتكتب النتائج إلى ملف.
- يمكن أن تكون
mode:هي:cpuأو:wallأو:object - تحدد
out:مسار ملف التفريغ
require 'stackprof'
StackProf.run(mode: :cpu, out: 'profile.dump') do
1_000_000.times { |i| Math.sqrt(i) }
endفحص نتائج stackprof
استخدم أداة سطر الأوامر stackprof لقراءة ملف التفريغ.
- استخدم
stackprof profile.dump --textللحصول على ملخص - يتعمق الخيار
--method Name#methفي طريقة واحدة - ينشئ الخيار
--flamegraphبيانات مخطط اللهب
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'أخذ العينات في مقابل تتبع التنفيذ
يوازن محللا الأداء بين الدقة والتكلفة الإضافية.
- يتتبع ruby-prof كل استدعاء: دقيق لكنه أبطأ
- يأخذ stackprof عينات: تقريبي لكنه منخفض التكلفة
- استخدم stackprof في الإنتاج وruby-prof للتحليلات المتعمقة
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }الزمن الفعلي في مقابل زمن CPU
اختر وضع تحليل الأداء بناءً على عنق الزجاجة.
- يعرض وضع CPU الشيفرة كثيفة الحسابات
- يلتقط الوضع الفعلي أيضًا فترات انتظار الإدخال والإخراج، مثل الشبكة أو القرص
- تحتاج نقاط النهاية البطيئة التي تستدعي قاعدة البيانات إلى الوضع الفعلي
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"سير عمل تحليل الأداء
يتبع تحليل الأداء الفعال دورة متكررة.
- أعد إنتاج السيناريو البطيء
- حلّل الأداء للعثور على نقطة الاختناق
- حسّن نقطة الاختناق تلك فقط
- أعد التحليل للتأكد من التحسن
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }تحقق سريع
اختبر معرفتك بتحليل الأداء.
مراجعة
لقد تعلمت عن أدوات تحليل الأداء:
- توضح محللات الأداء موضع استهلاك الزمن، وليس مدته فقط
- يتتبع
ruby-profكل استدعاء للحصول على تفاصيل دقيقة - يأخذ
stackprofعينات منخفضة التكلفة، وهو آمن للاستخدام في الإنتاج - اختر وضع CPU أو الوضع الفعلي بناءً على عنق الزجاجة
- اتبع دورة إعادة الإنتاج والتحليل والتحسين وإعادة التحليل
ستعمل بعد ذلك على تقليل تخصيصات الذاكرة.
الأسئلة الشائعة
هل درس «أدوات تحليل الأداء» مجاني؟
نعم — نص درس «أدوات تحليل الأداء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «أدوات تحليل الأداء»؟
ruby-prof وstackprof تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «أدوات تحليل الأداء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- قياس الأداء
- أدوات تحليل الأداء
- تحسين الذاكرة
- الاختناقات الشائعة