الانتقال إلى المحتوى الرئيسي

كيفية زيادة سرعة تنفيذ كود بايثون

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

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

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

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

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

  1. تحسين الحسابات
  2. القضاء على العمليات الزائدة عن الحاجة
  3. اختيار الخوارزميات الصحيحة
  4. العمل مع الذاكرة
  5. تحسين استخدام القوائم
  6. استخدام المولدات والمكررات
  7. تعدد مؤشرات الترابط والتوازي
  8. باستخدام تيارات
  9. سؤال وجواب
  10. ما هي الطرق التي يمكن استخدامها لتحسين سرعة تنفيذ التعليمات البرمجية بيثون?
  11. ما هي الأدوات التي يمكنني استخدامها لملف تعريف رمز بايثون?
  12. التي تقدم وحدات بيثون تطبيقات الأمثل لبعض الوظائف?
  13. كيف يمكنني تحسين تنفيذ الحلقات في بيثون?

تحسين الحسابات

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

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

نأمل أن تساعدك هذه النصائح على زيادة سرعة تنفيذ كود بايثون الخاص بك وزيادة كفاءته.

القضاء على العمليات الزائدة عن الحاجة

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

فيما يلي بعض النصائح حول كيفية التخلص من العمليات الزائدة عن الحاجة في كود بايثون الخاص بك:

  1. تجنب الحلقات والتكرار غير الضرورية. تحقق من التعليمات البرمجية الخاصة بك للحاجة إلى إجراء حلقات أو تكرارات غير ضرورية. إذا كان من الممكن تحسين الكود الخاص بك لتقليل عدد الحلقات أو التكرارات ، فيمكنه تحسين سرعة تنفيذه.
  2. استخدم خوارزميات أكثر كفاءة. إذا كانت شفرتك تقوم بحسابات معقدة أو معالجة بيانات ، ففكر في استخدام خوارزميات أكثر كفاءة. في بعض الأحيان ، يمكن أن يؤدي تغيير بسيط في الخوارزمية إلى تسريع تنفيذ التعليمات البرمجية بشكل كبير.
  3. الجمع بين العمليات في مجموعات أكثر كفاءة. إذا كانت التعليمات البرمجية تحتوي على العديد من العمليات التي يمكن إجراؤها في نفس المجموعة أو التعبير ، فقم بدمجها. يمكن أن يساعد ذلك في تقليل عدد عمليات الوصول إلى الذاكرة وتحسين سرعة التنفيذ.
  4. استخدم الوظائف والأساليب القياسية. توفر بايثون العديد من الوظائف والأساليب القياسية التي يمكن استخدامها لأداء العمليات المشتركة. يمكن أن يكون استخدام هذه الوظائف والأساليب القياسية أكثر كفاءة من كتابة التعليمات البرمجية الخاصة بك.

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

اختيار الخوارزميات الصحيحة

أحد العوامل الرئيسية التي تؤثر على سرعة تنفيذ كود بايثون هو اختيار الخوارزميات الصحيحة. يمكن للخوارزمية المثلى أن تقلل بشكل كبير من وقت تشغيل البرنامج.

هناك العديد من العوامل المهمة التي يجب مراعاتها عند اختيار الخوارزمية:

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

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

العمل مع الذاكرة

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

1. استخدم متغيرات صغيرة. إنشاء كائنات كبيرة يستغرق المزيد من الذاكرة. إذا كنت بحاجة إلى تخزين قيم صغيرة ، فاستخدم أرقام الفاصلة العائمة بدلا من أرقام الدقة المزدوجة أو الأعداد الصحيحة.

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

3. تجنب نسخ البيانات غير الضرورية. عند العمل مع صفائف البيانات الكبيرة ، قد تواجه موقفا يكون فيه نسخ صفيف زائدا كليا أو جزئيا. حاول تقليل نسخ البيانات واستخدام الروابط أو طريقة عرض" العرض " للبيانات الموجودة.

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

5. استخدم أدوات تحليل الذاكرة. هناك أدوات خاصة مثل ميموريبروفيلر و هيبي التي تسمح لك لتحليل استخدام الذاكرة في التطبيق. استخدمها لتحديد مناطق المشاكل في الكود وتحسين استخدام الذاكرة.

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

7. تجنب العمليات غير الضرورية على الكائنات. يمكن أن تكون بعض العمليات على الكائنات ، مثل إضافة عناصر أو إزالتها من قائمة ، كثيفة الذاكرة. إذا أمكن ، استخدم هياكل بيانات أو طرقا أكثر كفاءة لأداء العمليات.

  1. إنشاء كائنات كبيرة يستغرق المزيد من الذاكرة;
  2. استخدام المولدات والمكررات;
  3. تجنب نسخ البيانات غير الضرورية;
  4. تحرير الذاكرة بعد الاستخدام;
  5. استخدم أدوات تحليل الذاكرة;
  6. استخدم مدير السياق للعمل مع الملفات واتصالات الشبكة;
  7. تجنب العمليات غير الضرورية على الكائنات.
استخدام الذاكرةأمثلة
استخدام أرقام الفاصلة العائمة بدلا من الدقة المزدوجةبدلا من ذلك
استخدام المولدات والمكررات

للبند في النطاق (1000000):

بدلا من ذلك

من العناصر = [عنصر للبند في النطاق(1000000)]

للبند في العناصر:

استخدام الروابط أو عرض البيانات الموجودة بدلا من
إصدار صريحمن ذاكرة الكائن ديل
استخدام أدوات تحليل الذاكرةمن ميموري_بروفيلر استيراد الملف الشخصي

@الملف الشخصي

وظيفة ديف():

وظيفة()

استخدام مدير السياق للعمل مع الملفات واتصالات الشبكة
استخدام هياكل البيانات الفعالة وطرق تنفيذ العملياتلإزالة التكرارات

تحسين استخدام القوائم

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

فيما يلي بعض النصائح لمساعدتك على تحسين استخدام القوائم في بايثون:

  1. استخدم الشرائح: باستخدام الشرائح ، يمكنك بسهولة الحصول على جزء من القائمة ، والذي يتجنب العمليات غير الضرورية مع العناصر غير المطلوبة في الوقت الحالي. على سبيل المثال ، بدلا من الوصول إلى قائمة باستخدام حلقة ، يمكنك استخدام شريحة للحصول على العناصر الضرورية فقط.
  2. استخدام قائمة الادراج: قائمة الادراج تسمح لك لإنشاء قائمة جديدة استنادا إلى قائمة موجودة باستخدام بناء جملة المدمجة وفعالة. غالبا ما تعمل بشكل أسرع من الدورات المكافئة.
  3. إرجاع مجموع عناصر القائمة دون الحاجة إلى الحلقات.
  4. تجنب تحور القائمة في حلقة: يمكن أن يؤدي تغيير حجم القائمة في حلقة إلى تشغيل برنامج غير فعال. من الأفضل إنشاء قائمة جديدة بناء على القائمة القديمة أو استخدام الشرائح لتغيير عناصر القائمة.
  5. استخدام قائمة المولدات: تسمح لك مولدات القائمة بإنشاء قوائم دون الحاجة إلى تخزين جميع العناصر في ذاكرة الوصول العشوائي على الفور. أنها تولد القيم ديناميكيا حسب الحاجة ، والتي يمكن أن تقلل بشكل كبير من استخدام الذاكرة.

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

استخدام المولدات والمكررات

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

المولدات هي وظائف تستخدم مشغل العائد بدلا من إرجاع قيمة. بيان العائد يعلق مؤقتا تنفيذ وظيفة وإرجاع قيمة. في المرة التالية التي يتم فيها استدعاء الوظيفة ، يستمر التنفيذ من نفس المكان الذي تم تعليقه فيه.

من ناحية أخرى ، تسمح لك التكرارات باجتياز مجموعة من العناصر واحدة تلو الأخرى ، دون الحاجة إلى تخزين جميع العناصر بالكامل في الذاكرة. يمكن إنشاء التكرارات باستخدام وظيفة إيتر () والكائنات القابلة للاستدعاء التي تنفذ أساليب__ إيتر __() و__ التالي _ _ ().

مزايا استخدام المولدات والمكررات:

  • توفير الذاكرة: تتيح لك المولدات والمكررات معالجة كميات كبيرة من البيانات دون الحاجة إلى تخزينها بالكامل في الذاكرة.
  • تسريع العمل: تسمح لك المولدات والمكررات بإجراء عمليات على البيانات عند وصولها ، بدلا من انتظار تحميل جميع البيانات بالكامل.
  • التحميل البطيء: يتيح لك استخدام المولدات والمكررات تحميل البيانات حسب الحاجة ، مما قد يكون مفيدا عند العمل مع الملفات الكبيرة أو قواعد البيانات.

Пример использования генератора:

ديف فيبوناتشي (ن):

أ ، ب = 0 ، 1

في حين أن < ن:

العائد أ

أ ، ب = ب ، أ + ب

للاسطوانات في فيبوناتشي (100):

طباعة (الأسطوانات)

Пример использования итератора:

عداد الصف:

مواطنه _ _ الحرف الأول__(النفس ، بداية ، نهاية):

النفس.الحالي = البداية

النفس.النهاية = النهاية

مواطنه _ _ إيتر _ _ (النفس):

عودة النفس

مواطنه _ _ التالي _ _ (النفس):

إذا النفس.الحالي > الذات.النهاية:

رفع التوقف

آخر:

النفس.الحالي + = 1

عودة النفس.الحالي-1

عداد = عداد (1 ، 10)

للاسطوانات في العداد:

طباعة (الأسطوانات)

يتيح لك استخدام المولدات والمكررات العمل بكفاءة مع كميات كبيرة من البيانات وزيادة سرعة تنفيذ كود بايثون بشكل كبير.

تعدد مؤشرات الترابط والتوازي

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

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

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

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

ومع ذلك ، عند استخدام تعدد مؤشرات الترابط والتوازي ، يجب ألا يغيب عن البال أن مزامنة مؤشرات الترابط ومشاركة الموارد بينهما يمكن أن تؤدي إلى أخطاء ومشاكل في الأداء. لذلك ، يجب أن تكون دائما حذرا وحذرا عند استخدام هذه الأدوات.

باستخدام تيارات

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

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

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

استيراد خيوط

ديف وظيفتي (أرغ 1 ، أرغ 2):

# رمز ليتم تنفيذها في الموضوع

الموضوع = خيوط.الموضوع (الهدف = وظيفتي ، أرجس=(أرغ 1 ، أرغ 2))

الموضوع.بداية()

بعد إنشاء الدفق وتكوينه ، يجب أن يبدأ باستخدام طريقة البدء (). عندما يتم استدعاء هذه الطريقة ، يبدأ تنفيذ الوظيفة في مؤشر ترابط منفصل.

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

استيراد خيوط

فئة أسطورة (خيوط.الموضوع):

مواطنه تشغيل (النفس):

# التعليمات البرمجية التي سيتم تنفيذها في الموضوع

الموضوع = ميثريد()

الموضوع.بداية()

بالإضافة إلى ذلك ، توفر وحدة الترابط العديد من الوظائف والأساليب الأخرى لإدارة مؤشرات الترابط ، مثل تعيين أولوية مؤشر الترابط ، وانتظار إكمال مؤشر الترابط ، وغيرها.

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

سؤال وجواب

ما هي الطرق التي يمكن استخدامها لتحسين سرعة تنفيذ التعليمات البرمجية بيثون?

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

ما هي الأدوات التي يمكنني استخدامها لملف تعريف رمز بايثون?

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

التي تقدم وحدات بيثون تطبيقات الأمثل لبعض الوظائف?

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

كيف يمكنني تحسين تنفيذ الحلقات في بيثون?

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