Window.pipedriveLeadboosterConfig = { القاعدة: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', الإصدار: 2, } ؛(الدالة () { var w = نافذة إذا كان (w.LeadBooster) { console.warn('LeadBooster موجود بالفعل') } وإلا { { w.LeadBooster = { q: [], على: دالة (ن، ح) { { هذا.q.push({ t: 'o'، n: n، n: n، h: h }) }, الزناد: الدالة (n) { هذا.q.push({ t: 't'، n: n: n }) }, } } })() كيفية زيادة أداء القضبان - The Codest
The Codest
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • الصناعات
    • التكنولوجيا المالية والمصرفية
    • E-commerce
    • أدتك
    • التكنولوجيا الصحية
    • التصنيع
    • الخدمات اللوجستية
    • السيارات
    • إنترنت الأشياء
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
السهم الخلفي العودة إلى الوراء
2022-02-17
تطوير البرمجيات

كيفية زيادة أداء القضبان

كونستانتي كوشيفسكي

على الرغم من مزاياه العديدة، إلا أن Ruby on Rails لا يزال يعتبر إطار عمل ويب بطيء نسبيًا. نعلم جميعًا أن تويتر قد ترك Rails لصالح سكالا. ومع ذلك، مع بعض التحسينات الذكية يمكنك تشغيل تطبيقك بشكل أسرع بكثير!

روبي فيرست

روبي هي لغة موجهة للكائنات بشكل كبير. في الواقع، كل شيء (تقريبًا) في روبي كائن. قد يكلف إنشاء كائنات غير ضرورية برنامجك الكثير من الاستخدام الإضافي للذاكرة، لذا عليك تجنب ذلك.

ولقياس الفرق، سنستخدم أداة ميموري_بروفيلر الذاكرة جوهرة ووحدة معيارية مدمجة لقياس الأداء الزمني. 

استخدم طرق الضرب على السلاسل

تتطلب "ميموري_بروفيلر"

تقرير = MemoryProfiler.report.report do
البيانات = "X" * 1024 * 1024 * 1024 * 100
البيانات = data.downcase البيانات
النهاية

تقرير.pretty_print

في القائمة أدناه، أنشأنا سلسلة حجمها 100 ميغابايت وقمنا بتصغير كل حرف موجود فيها. يعطينا معيارنا التقرير التالي:

إجمالي المخصص 210765044 بايت (6 كائنات)

ومع ذلك، إذا استبدلنا السطر 6 بـ

data.downcase!

قراءة الملفات سطرًا تلو الآخر

من المفترض أننا نحتاج إلى جلب مجموعة بيانات ضخمة من 2 مليون سجل من ملف csv. عادة، سيبدو الأمر هكذا

تتطلب "معيار

Benchmark.bm do |x|
x.report do
File.readlines("2mrecords.csv").map! {||الخط|الخط.line.split("،")}
النهاية
النهاية
إجمالي نظام المستخدم الحقيقي

12.797000 2.437000 15.234000 (106.319865)

استغرقنا أكثر من 106 ثانية لتنزيل الملف بالكامل. كثيراً جداً! ولكن يمكننا تسريع هذه العملية عن طريق استبدال الخريطة مع طريقة بسيطة بينما حلقة:

تتطلب "معيار

Benchmark.bm do |x|
x.report do
ملف = file.open("2mrecords.csv", "r")
بينما السطر = file.gets
line.split("،")
النهاية
النهاية
النهاية
إجمالي نظام المستخدم الحقيقي

6.078000 0.250000 6.328000 ( 6.649422)

لقد انخفض وقت التشغيل الآن بشكل كبير منذ الخريطة ينتمي إلى فئة معينة، مثل خريطة Hash#map أو Array#mapحيث روبي سيخزن كل سطر من الملف المُحلل داخل الذاكرة طالما تم تنفيذه. جامع قمامة روبي لن يحرر الذاكرة قبل تنفيذ تلك المكررات بالكامل. ومع ذلك، فإن قراءتها سطرًا بسطر سيؤدي إلى نقل الذاكرة من الأسطر السابقة عندما لا يكون ذلك ضروريًا.

تجنب مكررات الأسلوب على المجموعات الكبيرة

هذه النقطة امتداد للنقطة السابقة مع مثال أكثر شيوعًا. كما ذكرت, روبي التكرارات هي طرائق كائنات ولن تحرر الذاكرة طالما أنها تُنفَّذ. على نطاق صغير، لا معنى للفرق (وطرق مثل الخريطة يبدو أكثر قابلية للقراءة). ومع ذلك، عندما يتعلق الأمر بمجموعات بيانات أكبر، من الجيد دائمًا التفكير في استبدالها بحلقات أساسية أكثر. كما في المثال أدناه:

عدد العناصر = 10000000
randoms = Array.new.new(numberofelements) { rand(10)}

randoms.every تفعل ||خط |
#فعل شيئًا ما
النهاية

وبعد إعادة الهيكلة

عدد العناصر = 10000000
randoms = Array.new.new(numberofelements) { rand(10)}

بينما randoms.count > 0
الخط = randoms.shift
1TP63فعل شيء ما
النهاية
"`

استخدم طريقة String::<<<

هذه نصيحة سريعة ومفيدة للغاية. إذا ألحقت سلسلة بأخرى باستخدام عامل التشغيل +=+= خلف الكواليس. روبي سينشئ كائنًا إضافيًا. إذن، هذا 

أ = "س"
 ب = "Y"
 أ += ب

في الواقع هذا يعني هذا:

أ = "س"
 ب = "Y"
 ج = أ + ب
 أ = ج

سيتجنب المشغل ذلك، مما يوفر لك بعض الذاكرة:

< أ = "س"
 ب = "Y"
 أ << ب

لنتحدث عن القضبان

إن إطار عمل القضبان يمتلك الكثير من "غيتشاس" التي من شأنها أن تسمح لك بتحسين الكود بسرعة وبدون بذل الكثير من الجهد الإضافي. 

التحميل الحريص المعروف أيضًا باسم مشكلة الاستعلام n+1

دعنا نفترض أن لدينا نموذجين مرتبطين هما "المنشور" و"المؤلف":

فئة المؤلف <سجل التطبيق
لديه_كثير :المشاركات
نهاية

صنف منشور < سجل التطبيق
ينتمي_إلى :المؤلف
النهاية

نريد جلب جميع المنشورات في وحدة التحكم الخاصة بنا وعرضها في طريقة عرض مع مؤلفيها:

وحدة التحكم

تعريف الفهرس
@posts = Post.all.all.limit(20)
نهاية

عرض

في وحدة التحكم, أكتيف ريكورد سينشئ استعلامًا واحدًا فقط للعثور على مشاركاتنا. ولكن في وقت لاحق، سيؤدي ذلك أيضًا إلى تشغيل 20 استعلامًا آخر للعثور على كل مؤلف وفقًا لذلك - مما يستغرق وقتًا إضافيًا! لحسن الحظ، يأتي Rails بحل سريع لدمج هذه الاستعلامات في استعلام واحد. باستخدام تشمل يمكننا إعادة كتابة وحدة التحكم بهذه الطريقة:

تعريف الفهرس
     @posts = Post.all.total.includes(:author).limit(20)
 نهاية

في الوقت الحالي، سيتم جلب البيانات الضرورية فقط في استعلام واحد. 

يمكنك أيضًا استخدام أحجار كريمة أخرى، مثل رصاصة لتخصيص العملية بأكملها.

اتصل بما تحتاج إليه فقط

أسلوب آخر مفيد لزيادة سرعة ActiveRecord هو استدعاء تلك السمات الضرورية فقط لأغراضك الحالية. هذا مفيد بشكل خاص عندما يبدأ تطبيقك في النمو ويزداد عدد الأعمدة في كل جدول أيضًا.

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

<مؤشر التعريف
     @posts = Post.all.all.includes(:author).select("name").limit(20)
 نهاية

الآن نوجه وحدة التحكم لدينا لتخطي جميع السمات باستثناء تلك التي نحتاجها.

تقديم الجزئيات بشكل صحيح

لنفترض أننا نريد إنشاء جزء منفصل لمشاركاتنا من الأمثلة السابقة:


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

الآن, القضبان سيكتشف تلقائيًا القالب الذي يجب استخدامه وتهيئته مرة واحدة فقط.

استخدام المعالجة الخلفية

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

صدّيق هي الجوهرة الأكثر استخدامًا لمعالجة الخلفية. يستخدم ريديس لتخزين المهام. كما يسمح لك بالتحكم في تدفق عمليات الخلفية الخاصة بك، وتقسيمها إلى قوائم انتظار منفصلة وإدارة استخدام الذاكرة لكل منها.

اكتب كوداً برمجياً أقل، واستخدم المزيد من الأحجار الكريمة

القضبان جاء بعدد هائل من الأحجار الكريمة التي لا تجعل حياتك أسهل وتسرّع عملية التطوير فحسب، بل تزيد أيضًا من سرعة أداء تطبيقك. عادةً ما تكون الأحجار الكريمة مثل Devise أو Pundit مختبرة جيدًا فيما يتعلق بسرعتها وتعمل بشكل أسرع وأكثر أمانًا من التعليمات البرمجية المكتوبة خصيصًا لنفس الغرض.

في حالة وجود أي أسئلة لتحسين أداء القضبانالوصول إلى مهندسون The Codest الخروج لاستشارة شكوكك.

عرض مطور روبي

اقرأ المزيد:

إيجابيات وسلبيات تطوير برمجيات روبي

السكك الحديدية ووسائل النقل الأخرى

تطوير القضبان باستخدام TMUX و Vim و Fzf + Ripgrep

مقالات ذات صلة

تطوير البرمجيات

إنشاء تطبيقات ويب مستقبلية: رؤى من فريق خبراء The Codest

اكتشف كيف تتفوق شركة The Codest في إنشاء تطبيقات ويب تفاعلية قابلة للتطوير باستخدام أحدث التقنيات، وتقديم تجارب مستخدم سلسة عبر جميع المنصات. اكتشف كيف تقود خبرتنا التحول الرقمي والأعمال التجارية...

ذا كوديست
تطوير البرمجيات

أفضل 10 شركات لتطوير البرمجيات في لاتفيا

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

thecodest
الحلول المؤسسية وحلول التوسعة

أساسيات تطوير برمجيات جافا: دليل للاستعانة بمصادر خارجية بنجاح

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

thecodest
تطوير البرمجيات

الدليل الشامل للاستعانة بمصادر خارجية في بولندا

إن الطفرة في outsourcing في بولندا مدفوعة بالتقدم الاقتصادي والتعليمي والتكنولوجي، مما يعزز نمو تكنولوجيا المعلومات والمناخ الملائم للأعمال.

ذا كوديست
الحلول المؤسسية وحلول التوسعة

الدليل الكامل لأدوات وتقنيات تدقيق تكنولوجيا المعلومات

تضمن عمليات تدقيق تكنولوجيا المعلومات وجود أنظمة آمنة وفعالة ومتوافقة. تعرف على المزيد حول أهميتها من خلال قراءة المقال كاملاً.

The Codest
ياكوب جاكوب جاكوبوفيتش CTO وشريك مؤسس CTO

اشترك في قاعدة معارفنا وابقَ على اطلاع على آخر المستجدات في قطاع تكنولوجيا المعلومات.

    نبذة عنا

    The Codest - شركة دولية لتطوير البرمجيات لها مراكز تقنية في بولندا.

    المملكة المتحدة - المقر الرئيسي

    • المكتب 303 ب، 182-184 شارع هاي ستريت نورث E6 2JA
      لندن، إنجلترا

    بولندا - مراكز التكنولوجيا المحلية

    • مجمع مكاتب فابريتشنا المكتبي، أليجا
      بوكوجو 18، 31-564 كراكوف
    • سفارة الأدمغة، كونستروكتورسكا
      11, 02-673 02-673 وارسو، بولندا

      The Codest

    • الصفحة الرئيسية
    • نبذة عنا
    • الخدمات
    • دراسات الحالة
    • اعرف كيف
    • الوظائف
    • القاموس

      الخدمات

    • استشاري
    • تطوير البرمجيات
    • تطوير الواجهة الخلفية
    • تطوير الواجهة الأمامية
    • Staff Augmentation
    • مطورو الواجهة الخلفية
    • مهندسو السحابة
    • مهندسو البيانات
    • أخرى
    • مهندسو ضمان الجودة

      الموارد

    • حقائق وأساطير حول التعاون مع شريك خارجي لتطوير البرمجيات
    • من الولايات المتحدة الأمريكية إلى أوروبا: لماذا تقرر الشركات الأمريكية الناشئة الانتقال إلى أوروبا؟
    • مقارنة مراكز تطوير التكنولوجيا في الخارج: تك أوفشور أوروبا (بولندا)، آسيان (الفلبين)، أوراسيا (تركيا)
    • ما هي أهم التحديات التي تواجه CTOs ومديري تكنولوجيا المعلومات؟
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • شروط استخدام الموقع الإلكتروني

    جميع الحقوق محفوظة © 2025 بواسطة The Codest. جميع الحقوق محفوظة.

    arArabic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek arArabic