المقدمة

سنتناول في هذا المقال بعض النصائح لتحسين الأداء في الـ Backend ، ولقد تناولنا في مقال سابق كيفية تحسين الأداء على مستوى الـ Frontend ويمكنكم مشاهدة المقال من هنا

Improving Performance of Software Systems on Frontend Level
مع ثورة التطور التي طرأت على مجال الـ Frontend Development على مستوى المفاهيم و المعماريات وما قام عليهما من تقنيات وأطر عمل تُعمل تلك المفاهيم في تطوير الواجهات الأمامية وأصبح لمستوى الـ Frontend في النظم والتطبيقات البرمجية دور مهم جداً في تحسين أداء عملها

Code & Programming Logic

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


Multithreaded Programming & Asynchronous Programming

من المهم جداً بالنسبة لمبرمج ال backend عن يدرك الفرق بين مفهومي ال Multithreading و ال asynchronous programming 

حتى يراعي الأنسب في بناء الأنظمة والتطبيقات فتطبيقهما بشكل صحيح يحقق:

  1. تنفيذ العمليات ومعالجة الطلبات بشكل سريع
  2. استيعاب ضغط الطلبات وكثرتها بشكل متزامن Concurrency

فإذا كان النظام يعتمد في الأساس على عمليات معالجة تستند إلى CPU bound tasks  كالعمليات الحسابية المعقدة مثلاً، فمن الأفضل أن يستخدم في هذه الحالة لغات البرمجة وأطر العمل التي تدعم الـ Multi threading.

وفي حال كان النظام يعتمد على عمليات I/o bound  مثل التعامل مع الملفات او إرسال طلبات http من الأفضل الاعتماد على لغات البرمجة وأطر العمل التي تدعم ال asynchronous programming.

ولا يوجد مانع من الاستخدام الاثنين في لغة وإطار يدعم الاثنين, ولكن المشكلة ستظهر في حال فقد أحدهما مع الحاجة إليه فإن فارق الأداء سيظهر حينها بشكل ملحوظ عندما يبدأ ال requests load القوي على النظام>

وعلى الرغم من لغات البرمجة واطر العمل تدير الـ threads في وال asynchronous operation  بشكل يساعد المبرمج إلى حد كبير, فإن ذلك لا يخلي بالكامل مسؤولية المبرمج في الفهم والتعامل معهما بالشكل الصحيح في الكود  


Caching

وهو أحد  أهم الركائز المعتمدة في تحسين الأداء في الـ Backend, فهو يختصر وقت إجراء الاستعلامات queries على قواعد البيانات في حالات معينة دون الرجوع إلى قاعدة البيانات والتي تستهلك وقتاً أكبر في إحضار البيانات.

لأن قواعد البيانات تخزن في الـ Hard disk إضافة لتخزين كل بيانات النظام بالعلاقات المركبة بينها, بينما يتميز الـ Cache بسرعة إحضار البيانات لأنها مخزنة على الذاكرة المؤقتة, إضافة لقلة البيانات وتخزينها على شكل documents بمفتاح وقيمة بعيداً عن تعقيد العلاقات في قواعد البيانات من نوع SQL.

لكن لابد من إدارة الـ Cache بالطريقة الصحيحة بما يضمن عدد من الأمور كامتلائها ببيانات كثيرة واستهلاك مساحة الـ  memory, أو احتوائها على بيانات قديمة غير محدَّثة ويمكن أن نفرد الحديث في ذلك في موضع آخر.


Payload Size

مثال على ذلك البيانات المسترجعة من الـ API, فإن كثرة البيانات يؤدي إلى بطئ في الاستجابة والعرض, ومن الحلول لذلك الـ pagination وإدارة البيانات المسترجعة بحيث لا تزيد تفاصيله عن الحاجة في العرض في الـ Frontend أو غرض استهلاك البيانات في التواصل الداخلي بين خدمات الـ Backend الموزعة في حالة الـ microservices.


في الختام

وما ذكر هو ليس استقصاء لكيفية تحسين أداء الـ Backend وإنما أهم الطرق لذلك, فهناك أمور أخرى تفيد في كيفية تحسين الأداء, أو أمور تركت بحيث تفرد في المقالات القادمة بشكل مستقل, كما في ما  يتعلق بقواعد البيانات من حيث التصميم والإدارة Database designing and management system, أو فيما يتعلق بـ  البنية التحتية والمعمارية.