0Pricing
Ruby Academy · درس

أدوات تحليل الأداء

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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قياس الأداء
  2. أدوات تحليل الأداء
  3. تحسين الذاكرة
  4. الاختناقات الشائعة
← العودة إلى Ruby Academy