في ال Backend Engineering، فهم مفهومي (Synchronous) و (Asynchronous) يُعتبر مهما جدا.. شخصيًا، واجهت لبسًا كبيرًا في هذا المفهوم، ورغم أنني لم أصل إلى درجة التعمق الكامل فيه، إلا أنني سأشارك ما تعلمته لعله ينفع.
الخلاصة:
هناك مفهومان أساسيان:
- الأول (Synchronous) يمثل طريقة تقليدية لعمل request معينة وفي نفس الوقت يشكل مشكلة.
- الثاني (Asynchronous) هو الحل الذي أتى لمعالجة المشكلة الأولى
التحليل قادم..
--- Synchronous ---
يعني أن المرسل يقوم بإرسال طلب (Request) وينتظر ردًا فوريًا قبل أن يُكمل أي مهمة أخرى. في هذه الحالة يقوم ال CPU بوقف جميع العمليات الأخرى حتى يتم تنفيذ الطلب، ثم يسمى في العمل بعد ذلك.
--- مثال واقعي---:
تطبيق يطلب منك إدخال اسمك ليُظهر لك رسالة "مرحبًا (اسمك)".
- في هذا المثال، لا يستطيع التطبيق فعل أي شيء آخر أثناء انتظارك لإدخال الاسم، و اثناء انتظارك انت ابضا لل output.
- هذا يُمثل مشكلة كبيرة في التطبيقات المتوسطة والكبيرة، خاصة عند الاعتماد على الإنترنت في نقل البيانات، لأن البرنامج سبكون في حالة توقف في انتظار المستخدم أو الردمن server.
---المشكلة---:
هذا الأسلوب يجعل التطبيق غير قادر على التعامل مع مهام متعددة في نفس الوقت.. خصوصا في حالة استخدام الإنترنت.. قد يتسبب ذلك في بطء شديد أو حتى توقف البرنامج إذا تأخر ال input او ال response فب اعطاء output معينة.
---Asynchronous---
يعني أن التطبيق يستطيع معالجة طلبات اخرى دون انتظار الرد الفوري، مما يسمح له بأداء مهام أخرى بالتوازي.
---الحل---:
عند طلب إدخال اسمك في نفس مثال التطبيق السابق، يمكن للتطبيق:
- تجهيز UI في الخلفية.
- تخزين الاسم في قاعدة البيانات.
- تنفيذ مهام أخرى أثناء انتظار عرض الرسالة: "مرحبًا (اسمك)".
---مثال واقعي آخر---:
عند إرسال ايمايل، فإنك لا تنتظر الرد الفوري، بل تواصل أداء مهامك الأخرى، فب انتظار الرد على ايمايلك.
---كيف يعمل ال Asynchronous؟
يتم استخدام ما يُعرف بـ Threads لتنفيذ مهام متعددة في وقت واحد.
- على سبيل المثال، يمكن للتطبيق إرسال طلب إلى ال server وانتظار الرد في خلفية البرنامج، بينما يواصل معالجة واجهة المستخدم أو تنفيذ مهام أخرى..
فهم هذين المفهومين يساعد بشكل كبير في التعامل مع ال request/response model، مما يؤدي إلى:
- تحسين أداء التطبيقات
- زيادة كفاءتهه في التعامل مع عدد كبير من الطلبات أو المهام المتزامنة.
- تقديم تجربة مستخدم أفضل في التطبيقات الحديثة
- جعلك مطوى برمجيات افضل.
## لو أفادك المقال انشره و ادعو لنا بالمغفرة و الصحة و العلم النافع والعمل الصالح، لا حاجة لذكري اسمي في نشره 😊
#BackendEngineering #Backend #برمجة #تعلم_مستمر #تعلم
الخلاصة:
هناك مفهومان أساسيان:
- الأول (Synchronous) يمثل طريقة تقليدية لعمل request معينة وفي نفس الوقت يشكل مشكلة.
- الثاني (Asynchronous) هو الحل الذي أتى لمعالجة المشكلة الأولى
التحليل قادم..
--- Synchronous ---
يعني أن المرسل يقوم بإرسال طلب (Request) وينتظر ردًا فوريًا قبل أن يُكمل أي مهمة أخرى. في هذه الحالة يقوم ال CPU بوقف جميع العمليات الأخرى حتى يتم تنفيذ الطلب، ثم يسمى في العمل بعد ذلك.
--- مثال واقعي---:
تطبيق يطلب منك إدخال اسمك ليُظهر لك رسالة "مرحبًا (اسمك)".
- في هذا المثال، لا يستطيع التطبيق فعل أي شيء آخر أثناء انتظارك لإدخال الاسم، و اثناء انتظارك انت ابضا لل output.
- هذا يُمثل مشكلة كبيرة في التطبيقات المتوسطة والكبيرة، خاصة عند الاعتماد على الإنترنت في نقل البيانات، لأن البرنامج سبكون في حالة توقف في انتظار المستخدم أو الردمن server.
---المشكلة---:
هذا الأسلوب يجعل التطبيق غير قادر على التعامل مع مهام متعددة في نفس الوقت.. خصوصا في حالة استخدام الإنترنت.. قد يتسبب ذلك في بطء شديد أو حتى توقف البرنامج إذا تأخر ال input او ال response فب اعطاء output معينة.
---Asynchronous---
يعني أن التطبيق يستطيع معالجة طلبات اخرى دون انتظار الرد الفوري، مما يسمح له بأداء مهام أخرى بالتوازي.
---الحل---:
عند طلب إدخال اسمك في نفس مثال التطبيق السابق، يمكن للتطبيق:
- تجهيز UI في الخلفية.
- تخزين الاسم في قاعدة البيانات.
- تنفيذ مهام أخرى أثناء انتظار عرض الرسالة: "مرحبًا (اسمك)".
---مثال واقعي آخر---:
عند إرسال ايمايل، فإنك لا تنتظر الرد الفوري، بل تواصل أداء مهامك الأخرى، فب انتظار الرد على ايمايلك.
---كيف يعمل ال Asynchronous؟
يتم استخدام ما يُعرف بـ Threads لتنفيذ مهام متعددة في وقت واحد.
- على سبيل المثال، يمكن للتطبيق إرسال طلب إلى ال server وانتظار الرد في خلفية البرنامج، بينما يواصل معالجة واجهة المستخدم أو تنفيذ مهام أخرى..
فهم هذين المفهومين يساعد بشكل كبير في التعامل مع ال request/response model، مما يؤدي إلى:
- تحسين أداء التطبيقات
- زيادة كفاءتهه في التعامل مع عدد كبير من الطلبات أو المهام المتزامنة.
- تقديم تجربة مستخدم أفضل في التطبيقات الحديثة
- جعلك مطوى برمجيات افضل.
## لو أفادك المقال انشره و ادعو لنا بالمغفرة و الصحة و العلم النافع والعمل الصالح، لا حاجة لذكري اسمي في نشره 😊
#BackendEngineering #Backend #برمجة #تعلم_مستمر #تعلم
❤5👏4
عند استخدام Laravel Factories في اختباراتك، احرص على التمييز بين make() و create()، فالأمر بالغ الأهمية في سياق اختبارات قواعد البيانات.
- حالة استخدام:
ترغب في اختبار إمكانية إنشاء Category جديدة:
it('can create a category', function () {
$categoryData = CategoryFactory::new()->make()->toArray();
$response = $this->post(route('category.store'), $categoryData);
$this->assertDatabaseHas('categories', [
'name' => $categoryData['name'],
'slug' => $categoryData['slug'],
]);
$response->assertStatus(302);
expect(Category::count())->toBe(1);
});
هذا الاختبار سيؤدي إلى نتيجة خاطئة Assertion Failure في الغالب،، وذلك لأن make() تُنشئ Collection دون حفظه في قاعدة البيانات، ومع استخدام RefreshDatabase تُفقد البيانات بعد عملية إعادة التوجيه التي يقم بها ال Route.
الحل: استبدل make() بـ create():
$categoryData = CategoryFactory::new()->create()->toArray();
- ال make() تُنشئ ال Collection فقط دون حفظه في قاعدة البيانات.
- ال create() تُنشئ Collection وتُخزّنه في قاعدة البيانات مباشرة.
#Laravel #Factories #PHP #Backend #TDD #programming
- حالة استخدام:
ترغب في اختبار إمكانية إنشاء Category جديدة:
it('can create a category', function () {
$categoryData = CategoryFactory::new()->make()->toArray();
$response = $this->post(route('category.store'), $categoryData);
$this->assertDatabaseHas('categories', [
'name' => $categoryData['name'],
'slug' => $categoryData['slug'],
]);
$response->assertStatus(302);
expect(Category::count())->toBe(1);
});
هذا الاختبار سيؤدي إلى نتيجة خاطئة Assertion Failure في الغالب،، وذلك لأن make() تُنشئ Collection دون حفظه في قاعدة البيانات، ومع استخدام RefreshDatabase تُفقد البيانات بعد عملية إعادة التوجيه التي يقم بها ال Route.
الحل: استبدل make() بـ create():
$categoryData = CategoryFactory::new()->create()->toArray();
- ال make() تُنشئ ال Collection فقط دون حفظه في قاعدة البيانات.
- ال create() تُنشئ Collection وتُخزّنه في قاعدة البيانات مباشرة.
#Laravel #Factories #PHP #Backend #TDD #programming