1
00:00:03,680 --> 00:00:07,140
مناقشة حول وحدات العقدة غير مكتملة

2
00:00:07,140 --> 00:00:10,310
دون الحديث عن الاسترجاعات ومعالجة الأخطاء.

3
00:00:10,310 --> 00:00:14,820
ما هي الاستدعاءات ولماذا هي ضرورية

4
00:00:14,820 --> 00:00:17,250
لدعم الحساب غير المتزامن الذي هو

5
00:00:17,250 --> 00:00:20,610
مفيد جدا عندما نكتب تطبيقات Node.js؟

6
00:00:20,610 --> 00:00:25,130
كيف تتم معالجة الأخطاء في تطبيقات العقدة؟

7
00:00:25,130 --> 00:00:29,615
دعونا نتحدث بإيجاز عن هذه في هذه المحاضرة.

8
00:00:29,615 --> 00:00:34,305
قبل المضي قدما في الحديث عن وحدات العقدة والاستدعاءات،

9
00:00:34,305 --> 00:00:40,315
نحن بحاجة إلى فهم اثنين من الميزات البارزة حول لغة جافا سكريبت نفسها.

10
00:00:40,315 --> 00:00:46,295
أولا وقبل كل شيء، جافا سكريبت يدعم ما يسمى وظائف من الدرجة الأولى.

11
00:00:46,295 --> 00:00:48,430
ماذا نعني بوظائف من الدرجة الأولى؟

12
00:00:48,430 --> 00:00:52,838
هو أن وظيفة يمكن التعامل معها تماما مثل أي متغير آخر.

13
00:00:52,838 --> 00:00:55,620
وبالتالي، يمكن تمرير الوظائف

14
00:00:55,620 --> 00:01:00,955
كمعلمات داخل استدعاء الدالة إلى وظائف أخرى.

15
00:01:00,955 --> 00:01:06,630
وهذا يسمح لنا بشكل أساسي بإرسال وظائف كوظائف رد اتصال يمكن

16
00:01:06,630 --> 00:01:14,110
استدعاؤها من وحدة عقدة أخرى من أجل الحصول على بعض العمل المنجز.

17
00:01:14,110 --> 00:01:20,010
ثم انظر إلى كيف يكون هذا مفيدًا جدًا في دعم عمليات الاسترجاعات في Node.js.

18
00:01:20,010 --> 00:01:25,107
الجانب الثاني حول جافا سكريبت هو دعم الإغلاق.

19
00:01:25,107 --> 00:01:26,835
ماذا نعني بالإغلاقات؟

20
00:01:26,835 --> 00:01:31,185
خاصة، إذا كنت معتادًا على لغات البرمجة الوظيفية،

21
00:01:31,185 --> 00:01:33,325
فأنت تفهم كيف يعمل الإغلاق.

22
00:01:33,325 --> 00:01:37,050
وظيفة محددة داخل وظيفة أخرى

23
00:01:37,050 --> 00:01:42,955
يحصل تلقائيا الوصول إلى المتغيرات التي يتم الإعلان عنها في وظيفة الخارجي.

24
00:01:42,955 --> 00:01:46,185
لذلك حتى إذا تم الانتهاء من تنفيذ الوظيفة الخارجية،

25
00:01:46,185 --> 00:01:51,000
عندما يتم تنفيذ الوظيفة الداخلية لاحقًا، ستظل الوظيفة الداخلية قادرة على الوصول إلى

26
00:01:51,000 --> 00:01:56,020
قيم المتغيرات داخل تلك الوظيفة الخارجية.

27
00:01:56,020 --> 00:01:57,465
وهذا مرة أخرى،

28
00:01:57,465 --> 00:02:05,244
يستخدم بشكل فعال جدا عندما نستخدم الاسترجاعات في تطبيقات العقدة.

29
00:02:05,244 --> 00:02:08,790
إذا كنت معتادًا على الطريقة القياسية لكتابة التطبيقات،

30
00:02:08,790 --> 00:02:12,870
فأنت معتاد على حساب متزامن حيث

31
00:02:12,870 --> 00:02:17,918
تحدد حسابًا كمجموعة من الخطوات التي يجب القيام بها واحدًا تلو الآخر.

32
00:02:17,918 --> 00:02:21,165
الآن، إذا قمت بتنظيم الحساب الخاص بك

33
00:02:21,165 --> 00:02:27,885
على النحو التالي، كما هو موضح على الجانب الأيسر من الشريحة هنا،

34
00:02:27,885 --> 00:02:33,260
لدينا حساب واحد ثم تليها حساب تشغيل طويل،

35
00:02:33,260 --> 00:02:36,095
تليها حساب اثنين، وحساب ثلاثة.

36
00:02:36,095 --> 00:02:38,400
لذا في هذا الترتيب،

37
00:02:38,400 --> 00:02:41,940
لنفترض أن الحساب الثاني يعتمد

38
00:02:41,940 --> 00:02:45,250
على الحساب الطويل الأمد الذي يكمل عمله،

39
00:02:45,250 --> 00:02:48,690
فمن المنطقي أن ينتظر الحساب الثاني حتى يتم

40
00:02:48,690 --> 00:02:53,430
الانتهاء من حساب التشغيل الطويل قبل أن يتم تنفيذه.

41
00:02:53,430 --> 00:02:56,670
الآن، قد يكون لدينا جزء آخر من العمل

42
00:02:56,670 --> 00:03:00,435
يجب القيام به والتي يتم تعريفها من خلال حساب ثلاثة.

43
00:03:00,435 --> 00:03:05,055
قد يكون الحساب الثالث في noway يعتمد على الحساب الثاني،

44
00:03:05,055 --> 00:03:11,092
أو الحساب الجاري لفترة طويلة لإكمال قبل تنفيذه.

45
00:03:11,092 --> 00:03:12,420
حتى في هذه الحالة،

46
00:03:12,420 --> 00:03:16,635
إذا قمنا بتنفيذ متزامن لهذا الحساب،

47
00:03:16,635 --> 00:03:18,825
ثم حساب ثلاثة سوف تتعثر، على

48
00:03:18,825 --> 00:03:23,895
الرغم من أنه لا يعتمد وسيلة على الانتهاء من إما حساب اثنين،

49
00:03:23,895 --> 00:03:25,800
أو حساب المدى الطويل.

50
00:03:25,800 --> 00:03:29,310
وبالتالي، فإن مقدار العمل الذي يتعين القيام به عن طريق حساب ثلاثة،

51
00:03:29,310 --> 00:03:35,625
سوف يتأخر بسبب عدم وجود سبب له، أليس كذلك؟

52
00:03:35,625 --> 00:03:41,725
بدلا من ذلك يتأخر بسبب شيء يسبقه في تسلسل الحساب.

53
00:03:41,725 --> 00:03:45,735
الآن، حساب غير متزامن، يمكننا إعادة ترتيب هذا العمل

54
00:03:45,735 --> 00:03:50,265
في مثل هذه الطريقة التي حساب واحد، عندما يكتمل،

55
00:03:50,265 --> 00:03:57,350
يمكن أن تفرخ تلك الحسابات طويلة المدى ليتم القيام بها وراء الكواليس بشكل مستقل،

56
00:03:57,350 --> 00:04:02,706
وبما أن حساب اثنين يعتمد على حساب المدى الطويل لإنهاء،

57
00:04:02,706 --> 00:04:09,314
ثم حساب اثنين يمكن تنفيذها عند الانتهاء من حساب المدى الطويل.

58
00:04:09,314 --> 00:04:14,265
الآن، هذا يحرر حساب ثلاثة للاستمرار،

59
00:04:14,265 --> 00:04:16,820
مباشرة بعد الانتهاء من حساب واحد.

60
00:04:16,820 --> 00:04:18,585
لذا فإن هذه الطريقة في الترتيب،

61
00:04:18,585 --> 00:04:22,815
تضمن أن الحساب الثالث سينتهي أسرع بكثير من

62
00:04:22,815 --> 00:04:28,000
كونه عالقًا خلف حساب التشغيل الطويل، وحساب اثنين.

63
00:04:28,000 --> 00:04:33,945
لذا فإن هذا النهج لإعادة ترتيب عملك مفيد للغاية خاصة،

64
00:04:33,945 --> 00:04:37,650
عندما يكون لديك حساب طويل الأمد بشكل خاص،

65
00:04:37,650 --> 00:04:40,000
يتم حساب ربط الإدخال/الإخراج.

66
00:04:40,000 --> 00:04:43,174
لذلك في هذه الحالة، يمكنك تفرخ حساب I/O المنضم،

67
00:04:43,174 --> 00:04:44,700
وعندما يكتمل ذلك،

68
00:04:44,700 --> 00:04:47,580
ثم كل ما يجب القيام به بعد ذلك،

69
00:04:47,580 --> 00:04:51,830
يمكن إرساله إليه كرد اتصال.

70
00:04:51,830 --> 00:04:54,540
لذلك سيتم تحويل الحساب الثاني إلى

71
00:04:54,540 --> 00:04:58,490
رد اتصال ثم يتم إعطاؤه للحساب الطويل الأمد.

72
00:04:58,490 --> 00:05:01,440
لذلك عندما يكمل ذلك عمله،

73
00:05:01,440 --> 00:05:07,015
فإنه سوف استدعاء مرة أخرى الدالة التي يتم تضمينها داخل رد الاتصال.

74
00:05:07,015 --> 00:05:11,020
لذلك يتم الاستفادة من هذا بشكل فعال جدا من قبل Node.js

75
00:05:11,020 --> 00:05:17,250
في إعادة ترتيب الحساب داخل تطبيقات عقدة لدينا.

76
00:05:17,250 --> 00:05:20,740
الآن، هذا

77
00:05:20,740 --> 00:05:25,520
مفيد للغاية عندما ننظر إلى الطريقة التي يعمل بها Node.js نفسه.

78
00:05:25,520 --> 00:05:26,735
لذلك كما ندرك،

79
00:05:26,735 --> 00:05:31,830
يتم تنظيم Node.js في حلقة حدث مترابطة واحدة.

80
00:05:31,830 --> 00:05:34,690
هذه حلقة الحدث مترابطة واحدة في الأساس،

81
00:05:34,690 --> 00:05:39,620
تلتقط الطلبات لأنها تأتي في وتنفيذها واحدا تلو الآخر.

82
00:05:39,620 --> 00:05:42,592
عندما يحتاج إلى تفرخ طلب

83
00:05:42,592 --> 00:05:48,910
الإدخال/الإخراج، سيتم إنشاء طلب الإدخال/الإخراج،

84
00:05:48,910 --> 00:05:51,330
وسيتم تضمين أي عمل يجب القيام به بعد اكتمال طلب الإدخال/الإخراج داخل رد الاتصال.

85
00:05:51,330 --> 00:05:52,940
لذلك عند اكتمال طلب الإدخال/الإخراج،

86
00:05:52,940 --> 00:05:55,660
فإنه سيتم وضع رد الاتصال في قائمة انتظار الطلب،

87
00:05:55,660 --> 00:05:58,510
وسيتم التعامل مع رد الاتصال بعد ذلك،

88
00:05:58,510 --> 00:06:00,030
من خلال حلقة الحدث.

89
00:06:00,030 --> 00:06:02,890
لذا فإن حلقة الحدث هي حلقة قيد التشغيل بشكل مستمر

90
00:06:02,890 --> 00:06:06,595
والتي تلتقط بشكل أساسي الطلبات من قائمة انتظار الطلبات،

91
00:06:06,595 --> 00:06:09,240
ثم تخدمها في وقت واحد.

92
00:06:09,240 --> 00:06:11,470
لذلك عندما تفكر مرة أخرى في ذلك،

93
00:06:11,470 --> 00:06:14,093
فإنك تدرك أن Node.js هو واحد مترابطة،

94
00:06:14,093 --> 00:06:15,340
ولكن في نفس الوقت،

95
00:06:15,340 --> 00:06:19,645
فإنه قادر على تحقيق معدل أسرع بكثير من الانتهاء من العمل،

96
00:06:19,645 --> 00:06:29,680
وذلك ببساطة بسبب الاستخدام الحكيم

97
00:06:29,680 --> 00:06:32,815
للاستدعاءات، والتنفيذ غير المتزامن لطلبات الإدخال/الإخراج، مثل الملف أو قاعدة البيانات،

98
00:06:32,815 --> 00:06:39,280
أو المعالجة الطويلة التي يمكن القيام بها بشكل مستقل وراء الكواليس.

99
00:06:39,280 --> 00:06:43,045
الآن، الطريقة التي تعالج بها حلقة الحدث Node.js كل هذا،

100
00:06:43,045 --> 00:06:48,410
هو أن حلقة الحدث مرتبة في سلسلة من المراحل.

101
00:06:48,410 --> 00:06:51,710
لذلك كما ترون في الرسم البياني هو مبين هنا،

102
00:06:51,710 --> 00:06:55,060
وتشمل المراحل معالجة الموقت،

103
00:06:55,060 --> 00:06:58,390
I/O التعامل مع رد الاتصال، ثم لديك الخمول، وإعداد،

104
00:06:58,390 --> 00:07:05,800
ثم الاستطلاع حيث يتم التعامل مع الطلبات الواردة للاتصالات أو البيانات،

105
00:07:05,800 --> 00:07:07,585
ثم مرحلة الاختيار،

106
00:07:07,585 --> 00:07:10,290
وبعد ذلك أخيرا، مرحلة الاستدعاءات إغلاق.

107
00:07:10,290 --> 00:07:16,351
الآن، يتم سرد بعض التفاصيل حول ما يتم القيام به في كل من هذه المراحل إلى الجانب الأيمن.

108
00:07:16,351 --> 00:07:17,905
في مرحلة الموقت،

109
00:07:17,905 --> 00:07:21,550
تعالج حلقة الحدث أي شيء يتم تشغيله بواسطة

110
00:07:21,550 --> 00:07:25,770
الدالة setTimeout () في JavaScript.

111
00:07:25,770 --> 00:07:32,620
يتم تنفيذ عمليات الاسترجاعات الإدخال/الإخراج،

112
00:07:32,620 --> 00:07:36,795
سيتم التعامل مع كافة عمليات الاسترجاعات التي تعود ليتم تنفيذها بعد طلب الإدخال/الإخراج تقريبًا بواسطة قائمة انتظار الاستدعاءات I/O.

113
00:07:36,795 --> 00:07:41,065
لذلك تحتفظ كل من هذه المراحل بقائمة انتظار منفصلة خاصة بها،

114
00:07:41,065 --> 00:07:46,053
وتلتقط حلقة الحدث Node.js طلبات من كل من قوائم الانتظار هذه، وتتعامل معها.

115
00:07:46,053 --> 00:07:52,150
و، الخمول، إعداد، المقصود للاستخدام الداخلي بواسطة Node.js.

116
00:07:52,150 --> 00:07:57,910
الاستطلاع هو المكان الذي يسترد أحداث الإدخال/الإخراج الجديدة التي سيتم التعامل معها وربما

117
00:07:57,910 --> 00:08:00,313
الطلبات القادمة من الخارج.

118
00:08:00,313 --> 00:08:08,354
تعالج مرحلة رد الاتصال الإغلاق أي إغلاق مأخذ التوصيل التي تحتاج إلى التعامل معها، وهكذا.

119
00:08:08,354 --> 00:08:11,050
الآن، لا داعي للقلق كثيرا حول

120
00:08:11,050 --> 00:08:15,430
كل هذه التفاصيل إذا كنا بحاجة إلى كتابة تطبيق Node.js حقا.

121
00:08:15,430 --> 00:08:19,720
عند الحاجة، سننظر في بعض هذه التفاصيل عندما يكون

122
00:08:19,720 --> 00:08:25,030
ذلك ضروريًا لفهم كيفية عمل تطبيق العقدة.

123
00:08:25,030 --> 00:08:27,985
ولكن في الوقت الحالي، وهذا يمنحك عرض صورة كبيرة

124
00:08:27,985 --> 00:08:31,990
لكيفية التعامل مع حلقة الحدث Node.js.

125
00:08:31,990 --> 00:08:35,830
يكفي أن نقول أن هذا يكفي من المعلومات بالنسبة لنا

126
00:08:35,830 --> 00:08:40,590
لفهم تطبيقات العقدة وكيفية عملها في الوقت الحالي.

127
00:08:40,590 --> 00:08:42,895
إذا كنت تريد معرفة المزيد من التفاصيل،

128
00:08:42,895 --> 00:08:46,810
فقد أعطيتك رابطًا لوصف تفصيلي في

129
00:08:46,810 --> 00:08:53,930
وثائق Node.js الذي يشرح حول حلقة الحدث بمزيد من التفصيل.

130
00:08:53,930 --> 00:08:58,615
مع هذا الفهم السريع للعقدة،

131
00:08:58,615 --> 00:09:01,445
والاستدعاءات، ومعالجة الأخطاء،

132
00:09:01,445 --> 00:09:03,296
سننتقل إلى التمرين،

133
00:09:03,296 --> 00:09:09,280
حيث سننظر في كيفية كتابة تطبيق Node باستخدام عمليات رد الاتصال،

134
00:09:09,280 --> 00:09:14,110
وكيف يمكن التعامل مع الأخطاء داخل تطبيق Node.

135
00:09:14,110 --> 00:09:18,840
سنرى الاستخدام المتكرر لهذا النمط في التدريبات اللاحقة،

136
00:09:18,840 --> 00:09:21,421
والدروس اللاحقة على وجه التحديد،

137
00:09:21,421 --> 00:09:22,960
عندما ننظر إلى Express،

138
00:09:22,960 --> 00:09:26,860
وكيف نبني تطبيقات جانب الخادم باستخدام Express

139
00:09:26,860 --> 00:09:32,720
بمزيد من التفصيل في الجزء الأخير من هذه الدورة.