Bash / المتقدم: القنوات والتزامن وتصميم واجهة قابلة للصيانة / الدرس 17
تحسين البرامج بتقليل العمل غير اللازم
استخدم المضمن والتدفق والدفعات والحالة المحدودة عند ملاءمتها وقس السلوك الكامل لا عدد العمليات فقط.
في هذه الصفحة
أهداف الدرس
- تحديد كلفة عمليات وتحليل قابلة للتجنب.
- اختيار التدفق والجمع من الحجم.
- حفظ الحالة والسجلات والنقل أثناء التحسين.
تحسين عملية متكررة مقيسة
قد يكلف إطلاق صغار الخارجي أكثر من العمل داخل حلقة كبيرة. تزيل توسعة أو حساب بعض الإطلاق إذا طابقت الدلالة، ولا يعني ذلك أفضلية كل إعادة مضمنة. قد تتفوق أداة تدفق واحدة. حدد المتكرر والحجم والهدف. نوضح المكافئ بمثبتات صغيرة دون ادعاء قياس المضيف.
استخدام التحويل الأصلي عند ملاءمة قواعده
تزيل التوسعة لاحقة أو تستبدل نمطاً دون ابن لكل قيمة. أكد ملاءمة قواعدها. تختلف المحلية والمحارف عن أدوات البايت وللمعقد محلل. احفظ الاقتباس. لا يكافئ تحسين يغير الفارغ والأسطر والتشوه؛ احتفظ باختبارات الحدود قبل الاختصار.
names=('alpha.txt' 'red apple.txt' 'literal*name.txt')
for name in "${names[@]}"; do
printf '<%s>\n' "${name%.txt}"
done
<alpha>
<red apple>
<literal*name>
اللاحقة نمط ثابت والناتج مقتبس. يثبت التحويل لا مقارنة أداء مقيسة.
تحديد الذاكرة بتدفق سجلات صريح
يجعل الجمع الذاكرة متناسبة مع المدخل، وتحتفظ الحلقة بإجمالي صغير وتخدم الأداة التدفق بكفاءة. اختر للحاجة لا mapfile والاستبدال لكل شيء. احفظ الفاصل والنهاية. يغير الأنبوب البيئة والحالة؛ راجع الصحة والأداء معاً. وقد تتجاوز مصفوفة الابن حد الوسائط رغم ملاءمتها الذاكرة.
تغير الدفعات الكلفة ونطاق الفشل
تقلل المجموعة الإطلاق وتغير ربط الفشل والجزئي بالمدخل. حدها واحفظ الربط ولا تقسم الأسماء بالمسافة. قد تزيد الذاكرة وكمون أول رد رغم الإنتاجية، ويضيف التوازي الترتيب والموارد. قس النجاح والخطأ بمدخل مطابق؛ لا يحقق العقد تجاوز المشوه خفية.
total=0
count=0
while IFS= read -r value; do
case $value in ''|*[!0-9]*) exit 2 ;; esac
total=$((total + 10#$value))
count=$((count + 1))
done < <(printf '%s\n' 02 03 04)
printf 'count=%s total=%s\n' "$count" "$total"
count=3 total=9
تمر القيم المضبوطة بفحص الأرقام وتفسر عشرية وتخزن العدد والمجموع فقط؛ لا يعد المثال بأمان تجاوز أعداد خارجية عشوائية.
قياس العقد الكامل واختيار لغة أنسب عند الحاجة
قس حملاً آمناً معزولاً ببيانات وحدود معلنة واذكر الفعلي. أدرج البدء والتحليل والفشل والإكمال عند الحاجة. قد يفوق التباين تعديلًا صغيراً فلا تعمم تشغيلًا. إذا هيمن المعقد والحساب والتزامن فانقل المكون للغة مناسبة للكفاءة والصيانة. أبق Bash تنسيقاً واضحاً لا حيل ترميز.
الأخطاء الشائعة وإصلاحها
اعتبار قلة العمليات إثبات سرعة
- لماذا يحدث؟
- لم يُقس الحمل والكفاءة.
- كيف تصلحه؟
- قارن عملاً محدوداً مكافئاً ونتائج كاملة.
- كيف تتجنب تكراره؟
- افصل توضيح الدلالة من القياس.
تغيير التحسين حدود السجل
- لماذا يحدث؟
- أُهملت المسافة والنهاية.
- كيف تصلحه؟
- استعد العقد واختبر الحدود.
- كيف تتجنب تكراره؟
- احفظ المثبتات قبل الإعادة.
تجاوز مصفوفة ضخمة حد وسائط الابن
- لماذا يحدث؟
- اختلط التخزين بسعة استدعاء غير محدودة.
- كيف تصلحه؟
- استخدم دفعات أو تدفقاً.
- كيف تتجنب تكراره؟
- حدد الحجم عند حد الأمر.
اختبر فهمك
1. لماذا قد تتفوق أداة تدفق على حلقة مضمنة؟
اعرض الحل المشروح
تعالج الأداة الكثير بتنفيذ محسن دون كلفة الحلقة. يعتمد الاختيار الدلالة والحجم والصيانة لا عدد الإطلاقات وحده.
2. ماذا يبقى عند استبدال أنبوب لكل سطر بتوسعة؟
اعرض الحل المشروح
احفظ قواعد التطابق والمسافة والفارغ والترميز والتشخيص والفشل واختبر الحدود والخرج قبل ادعاء التكافؤ.
أهم ما تعلمته
- قلل المتكرر المبرر دون الدلالة.
- استخدم تدفقاً محدوداً وانقل المعقد خارج Bash.