1
00:00:03,680 --> 00:00:07,140
Une discussion sur les modules de nœud est incomplète

2
00:00:07,140 --> 00:00:10,310
sans parler des rappels et de la gestion des erreurs.

3
00:00:10,310 --> 00:00:14,820
Que sont les rappels et pourquoi sont-ils essentiels pour

4
00:00:14,820 --> 00:00:17,250
prendre en charge le calcul asynchrone qui est très

5
00:00:17,250 --> 00:00:20,610
utile lorsque nous écrivons des applications Node.js ?

6
00:00:20,610 --> 00:00:25,130
Comment la gestion des erreurs est-elle effectuée dans les applications Node ?

7
00:00:25,130 --> 00:00:29,615
Parlons brièvement de ceux-ci dans cette conférence.

8
00:00:29,615 --> 00:00:34,305
Avant de continuer à parler des modules de nœud et des rappels,

9
00:00:34,305 --> 00:00:40,315
nous devons comprendre deux caractéristiques saillantes sur le langage JavaScript lui-même.

10
00:00:40,315 --> 00:00:46,295
D' abord et avant tout, JavaScript prend en charge ce qu'on appelle des fonctions de première classe.

11
00:00:46,295 --> 00:00:48,430
Qu' entend-on par fonctions de première classe ?

12
00:00:48,430 --> 00:00:52,838
Est-ce qu'une fonction peut être traitée comme toute autre variable.

13
00:00:52,838 --> 00:00:55,620
Et par conséquent, les fonctions peuvent être transmises en tant que

14
00:00:55,620 --> 00:01:00,955
paramètres à l'intérieur des appels de fonction à d'autres fonctions.

15
00:01:00,955 --> 00:01:06,630
Et cela nous permet essentiellement d'envoyer des fonctions en tant que fonctions de rappel qui peuvent être

16
00:01:06,630 --> 00:01:14,110
appelées à partir d'un autre module Node afin d'obtenir du travail accompli.

17
00:01:14,110 --> 00:01:20,010
Ensuite, regardez comment cela est très utile pour prendre en charge les rappels dans Node.js.

18
00:01:20,010 --> 00:01:25,107
Le deuxième aspect à propos de JavaScript est le support de Fermetures.

19
00:01:25,107 --> 00:01:26,835
Qu' entend-on par Fermetures ?

20
00:01:26,835 --> 00:01:31,185
Surtout, si vous êtes familier avec les langages de programmation fonctionnels,

21
00:01:31,185 --> 00:01:33,325
vous comprenez comment la fermeture fonctionne.

22
00:01:33,325 --> 00:01:37,050
Une fonction définie dans une autre fonction

23
00:01:37,050 --> 00:01:42,955
obtient automatiquement l'accès aux variables qui sont déclarées dans la fonction externe.

24
00:01:42,955 --> 00:01:46,185
Donc, même si la fonction externe est terminée l'exécution,

25
00:01:46,185 --> 00:01:51,000
lorsque la fonction interne s'exécute plus tard, la fonction interne aura toujours accès

26
00:01:51,000 --> 00:01:56,020
aux valeurs des variables dans cette fonction externe.

27
00:01:56,020 --> 00:01:57,465
Et c'est encore une fois,

28
00:01:57,465 --> 00:02:05,244
très efficacement utilisé lorsque nous utilisons des callbacks dans les applications Node.

29
00:02:05,244 --> 00:02:08,790
Si vous êtes habitué à la manière standard d'écrire des applications,

30
00:02:08,790 --> 00:02:12,870
vous êtes familier avec le calcul synchrone où vous

31
00:02:12,870 --> 00:02:17,918
spécifiez un calcul comme un ensemble d'étapes à effectuer l'une après l'autre.

32
00:02:17,918 --> 00:02:21,165
Maintenant, si vous organisez votre calcul comme suit,

33
00:02:21,165 --> 00:02:27,885
comme indiqué sur le côté gauche de la diapositive ici,

34
00:02:27,885 --> 00:02:33,260
nous avons un calcul suivi d'un calcul long,

35
00:02:33,260 --> 00:02:36,095
suivi du calcul 2 et du calcul 3.

36
00:02:36,095 --> 00:02:38,400
Donc, dans cet arrangement,

37
00:02:38,400 --> 00:02:41,940
supposons que le calcul deux dépend

38
00:02:41,940 --> 00:02:45,250
du calcul à long terme qui complète son travail,

39
00:02:45,250 --> 00:02:48,690
alors il est logique que le calcul deux attende que

40
00:02:48,690 --> 00:02:53,430
le calcul à long terme soit terminé avant qu'il ne soit exécuté.

41
00:02:53,430 --> 00:02:56,670
Maintenant, nous pourrions avoir un autre travail à

42
00:02:56,670 --> 00:03:00,435
faire qui est défini par le calcul 3. Le

43
00:03:00,435 --> 00:03:05,055
calcul trois peut ne dépendre en aucun cas du calcul deux,

44
00:03:05,055 --> 00:03:11,092
ou du calcul à long terme à terminer avant qu'il ne soit exécuté.

45
00:03:11,092 --> 00:03:12,420
Donc, dans ce cas,

46
00:03:12,420 --> 00:03:16,635
si nous faisons l'exécution synchrone de ce

47
00:03:16,635 --> 00:03:18,825
calcul, alors le calcul trois sera bloqué,

48
00:03:18,825 --> 00:03:23,895
même si cela ne dépend pas de l'achèvement du calcul deux,

49
00:03:23,895 --> 00:03:25,800
ou du calcul à long terme.

50
00:03:25,800 --> 00:03:29,310
Ainsi, la quantité de travail à faire par le calcul 3,

51
00:03:29,310 --> 00:03:35,625
sera retardée à cause d'aucune raison, n'est-ce pas ?

52
00:03:35,625 --> 00:03:41,725
Au lieu de cela est retardé en raison de quelque chose qui le précède dans la séquence de calcul.

53
00:03:41,725 --> 00:03:45,735
Maintenant, le calcul asynchrone, nous pouvons réorganiser ce travail de

54
00:03:45,735 --> 00:03:50,265
telle sorte que le calcul un, une fois terminé,

55
00:03:50,265 --> 00:03:57,350
puisse engendrer ces calculs longs à faire dans les coulisses indépendamment,

56
00:03:57,350 --> 00:04:02,706
et puisque le calcul 2 dépend du calcul à long terme pour terminer,

57
00:04:02,706 --> 00:04:09,314
alors le calcul deux peut être exécuté lorsque le calcul à long terme est terminé.

58
00:04:09,314 --> 00:04:14,265
Maintenant, cela libère le calcul trois pour continuer,

59
00:04:14,265 --> 00:04:16,820
juste après la fin du calcul un.

60
00:04:16,820 --> 00:04:18,585
Donc, cette façon d'organiser,

61
00:04:18,585 --> 00:04:22,815
garantit que le calcul trois finira beaucoup plus vite que

62
00:04:22,815 --> 00:04:28,000
d'être coincé derrière le calcul à long terme, et le calcul deux.

63
00:04:28,000 --> 00:04:33,945
Donc, cette approche de réorganisation de votre travail est très utile surtout,

64
00:04:33,945 --> 00:04:37,650
lorsque vous avez un calcul à long terme en particulier, le

65
00:04:37,650 --> 00:04:40,000
calcul lié aux E/S à faire.

66
00:04:40,000 --> 00:04:43,174
Donc, dans ce cas, vous pouvez générer le calcul lié aux E/S,

67
00:04:43,174 --> 00:04:44,700
et quand cela se termine,

68
00:04:44,700 --> 00:04:47,580
alors tout ce qui doit être fait par la suite,

69
00:04:47,580 --> 00:04:51,830
peut lui être envoyé en tant que callback.

70
00:04:51,830 --> 00:04:54,540
Donc le calcul deux sera transformé en

71
00:04:54,540 --> 00:04:58,490
un callback et ensuite donné au calcul à long terme.

72
00:04:58,490 --> 00:05:01,440
Donc, quand cela terminera son travail,

73
00:05:01,440 --> 00:05:07,015
alors il rappellera la fonction qui est incluse dans le rappel.

74
00:05:07,015 --> 00:05:11,020
Donc, cela est exploité très efficacement par Node.js pour

75
00:05:11,020 --> 00:05:17,250
réorganiser le calcul au sein de nos applications Node.

76
00:05:17,250 --> 00:05:20,740
Maintenant, c'est très,

77
00:05:20,740 --> 00:05:25,520
très utile lorsque nous regardons la façon dont Node.js fonctionne lui-même.

78
00:05:25,520 --> 00:05:26,735
Donc, comme nous le réalisons,

79
00:05:26,735 --> 00:05:31,830
Node.js est organisé en une seule boucle d'événement thread.

80
00:05:31,830 --> 00:05:34,690
Cette boucle d'événement unique thread en gros,

81
00:05:34,690 --> 00:05:39,620
ramasse les requêtes au fur et à mesure qu'elles entrent et l'exécute l'une après l'autre.

82
00:05:39,620 --> 00:05:42,592
Chaque fois qu'il doit générer une demande d'E/S,

83
00:05:42,592 --> 00:05:44,650
la demande d'E/S sera générée,

84
00:05:44,650 --> 00:05:48,910
et tout travail qui doit être effectué après la fin de la demande d'E/S

85
00:05:48,910 --> 00:05:51,330
sera inclus dans un rappel.

86
00:05:51,330 --> 00:05:52,940
Donc, lorsque la demande d'E/S est terminée,

87
00:05:52,940 --> 00:05:55,660
il mettra le rappel dans la file d'attente de requête,

88
00:05:55,660 --> 00:05:58,510
et le rappel sera géré par la suite,

89
00:05:58,510 --> 00:06:00,030
par la boucle d'événement.

90
00:06:00,030 --> 00:06:02,890
Donc, la boucle d'événement est une boucle en cours d'exécution continue

91
00:06:02,890 --> 00:06:06,595
qui capte essentiellement les demandes de la file d'attente de demandes,

92
00:06:06,595 --> 00:06:09,240
puis les services une à la fois.

93
00:06:09,240 --> 00:06:11,470
Donc, quand vous y pensez,

94
00:06:11,470 --> 00:06:14,093
vous vous rendez compte que Node.js est un seul thread,

95
00:06:14,093 --> 00:06:15,340
mais en même temps,

96
00:06:15,340 --> 00:06:19,645
il est capable d'atteindre un taux d'achèvement beaucoup plus rapide du travail,

97
00:06:19,645 --> 00:06:24,580
simplement en raison de l'utilisation judicieuse des rappels,

98
00:06:24,580 --> 00:06:29,680
et l'exécution asynchrone des requêtes d'E/S,

99
00:06:29,680 --> 00:06:32,815
comme pour le fichier accès ou base de données,

100
00:06:32,815 --> 00:06:39,280
ou un long traitement qui peut être fait indépendamment dans les coulisses.

101
00:06:39,280 --> 00:06:43,045
Maintenant, la façon dont la boucle d'événement Node.js gère tout cela,

102
00:06:43,045 --> 00:06:48,410
est que la boucle d'événement est organisée dans une séquence de phases.

103
00:06:48,410 --> 00:06:51,710
Ainsi, comme vous le voyez dans le diagramme illustré ici, les

104
00:06:51,710 --> 00:06:55,060
phases incluent la gestion du minuteur, la

105
00:06:55,060 --> 00:06:58,390
gestion du rappel d'E/S, puis vous avez inactif, préparer,

106
00:06:58,390 --> 00:07:05,800
puis le sondage où les demandes entrantes de connexions ou de données sont traitées,

107
00:07:05,800 --> 00:07:07,585
puis la phase de vérification,

108
00:07:07,585 --> 00:07:10,290
puis enfin, la phase de rappel de fermeture.

109
00:07:10,290 --> 00:07:16,351
Maintenant, quelques détails sur ce qui est fait dans chacune de ces phases sont listés sur le côté droit.

110
00:07:16,351 --> 00:07:17,905
Dans la phase de temporisation,

111
00:07:17,905 --> 00:07:21,550
la boucle d'événement gère tout ce qui est déclenché par la

112
00:07:21,550 --> 00:07:25,770
fonction setTimeout () en JavaScript.

113
00:07:25,770 --> 00:07:29,010
Les rappels d'E/S sont exécutés,

114
00:07:29,010 --> 00:07:32,620
presque tous les rappels qui reviennent pour être

115
00:07:32,620 --> 00:07:36,795
exécutés après une requête d'E/S seront gérés par la file d'attente de rappels d'E/S.

116
00:07:36,795 --> 00:07:41,065
Ainsi, chacune de ces phases conserve sa propre file d'attente séparée,

117
00:07:41,065 --> 00:07:46,053
et la boucle d'événement Node.js récupère les requêtes de chacune de ces files d'attente et les gère.

118
00:07:46,053 --> 00:07:52,150
Le, inactif, prepare, est destiné à une utilisation interne par Node.js.

119
00:07:52,150 --> 00:07:57,910
Le sondage est l'endroit où il récupère les nouveaux événements d'E/S à traiter et peut-être

120
00:07:57,910 --> 00:08:00,313
les demandes venant de l'extérieur.

121
00:08:00,313 --> 00:08:08,354
La phase de rappel de fermeture gère toutes les fermetures de socket qui doivent être gérées, et ainsi de suite.

122
00:08:08,354 --> 00:08:11,050
Maintenant, nous n'avons pas besoin de trop nous inquiéter de

123
00:08:11,050 --> 00:08:15,430
tous ces détails si nous avons besoin de vraiment écrire une application Node.js.

124
00:08:15,430 --> 00:08:19,720
Lorsque cela est nécessaire, nous examinerons certains de ces détails au fur et à mesure

125
00:08:19,720 --> 00:08:25,030
qu'ils sont essentiels pour comprendre comment fonctionne notre application Node.

126
00:08:25,030 --> 00:08:27,985
Mais pour le moment, cela vous donne une vue d'ensemble

127
00:08:27,985 --> 00:08:31,990
de la façon dont la boucle d'événement Node.js est gérée. Il

128
00:08:31,990 --> 00:08:35,830
suffit de dire que c'est assez d'informations pour nous permettre de

129
00:08:35,830 --> 00:08:40,590
comprendre les applications Node et comment elles fonctionnent pour le moment.

130
00:08:40,590 --> 00:08:42,895
Si vous voulez en savoir plus de détails,

131
00:08:42,895 --> 00:08:46,810
alors je vous ai donné un lien vers une description détaillée dans la

132
00:08:46,810 --> 00:08:53,930
documentation Node.js qui explique la boucle d'événement plus en détail.

133
00:08:53,930 --> 00:08:58,615
Avec cette compréhension rapide de la gestion des nœuds

134
00:08:58,615 --> 00:09:01,445
, des rappels et des erreurs,

135
00:09:01,445 --> 00:09:03,296
nous allons passer à l'exercice,

136
00:09:03,296 --> 00:09:09,280
où nous allons examiner comment une application Node peut écrire avec des rappels,

137
00:09:09,280 --> 00:09:14,110
et comment les erreurs peuvent être traitées dans une application Node.

138
00:09:14,110 --> 00:09:18,840
Nous verrons l'utilisation répétée de ce modèle dans les exercices suivants,

139
00:09:18,840 --> 00:09:21,421
et les leçons ultérieures spécifiquement,

140
00:09:21,421 --> 00:09:22,960
lorsque nous examinons Express,

141
00:09:22,960 --> 00:09:26,860
et comment nous construisons des applications côté serveur

142
00:09:26,860 --> 00:09:32,720
en utilisant Express plus en détail dans la partie ultérieure de ce cours.