﻿1
00:00:01,190 --> 00:00:02,840
‫Jonas: Sekarang mari kita

2
00:00:02,840 --> 00:00:05,520
‫menulis beberapa kode untuk mendapatkan pemahaman yang lebih

3
00:00:05,520 --> 00:00:07,893
‫baik tentang apa yang terjadi di loop acara.

4
00:00:09,200 --> 00:00:11,370
‫Jadi seperti sebelumnya, untuk

5
00:00:11,370 --> 00:00:13,670
‫memulai bagian pengkodean bagian ini,

6
00:00:13,670 --> 00:00:15,970
‫lanjutkan dan ambil file starter

7
00:00:15,970 --> 00:00:18,550
‫untuk bagian ini, salin di suatu

8
00:00:18,550 --> 00:00:22,050
‫tempat, lalu buka proyek di editor kode Anda.

9
00:00:22,050 --> 00:00:24,310
‫Jadi saya memilikinya di sini di desktop, dan

10
00:00:24,310 --> 00:00:27,550
‫di VSCode saya, dan semua yang kita miliki di sini untuk

11
00:00:27,550 --> 00:00:31,420
‫memulai adalah file uji ini. txt, jadi saya akan membuat file baru di

12
00:00:31,420 --> 00:00:35,033
‫sini, dan saya akan menyebutnya event-loop. js.

13
00:00:38,040 --> 00:00:41,530
‫Baiklah, sekarang sebenarnya sangat sulit untuk mensimulasikan loop acara dengan

14
00:00:41,530 --> 00:00:44,000
‫benar, karena kita tidak dapat benar-benar menempatkan

15
00:00:44,000 --> 00:00:46,400
‫banyak panggilan balik di semua antrian

16
00:00:46,400 --> 00:00:48,080
‫panggilan balik yang

17
00:00:48,080 --> 00:00:51,260
‫telah kita bicarakan sebelumnya pada saat yang sama, kan.

18
00:00:51,260 --> 00:00:53,710
‫Situasi itu terjadi ketika misalnya

19
00:00:53,710 --> 00:00:56,360
‫banyak permintaan masuk ke aplikasi Anda,

20
00:00:56,360 --> 00:01:00,240
‫tetapi di sini secara lokal, itu sangat sulit untuk ditiru.

21
00:01:00,240 --> 00:01:03,150
‫Tapi bagaimanapun, kami masih akan melakukan beberapa eksperimen

22
00:01:03,150 --> 00:01:05,390
‫yang sangat menarik menggunakan beberapa hal yang

23
00:01:05,390 --> 00:01:07,540
‫kami pelajari di video terakhir.

24
00:01:07,540 --> 00:01:09,830
‫Dan yang akan kita

25
00:01:09,830 --> 00:01:12,190
‫lakukan adalah menulis sekumpulan baris kode,

26
00:01:12,190 --> 00:01:15,130
‫dan kemudian mencoba mencari tahu urutan eksekusinya

27
00:01:15,130 --> 00:01:17,950
‫dalam loop peristiwa, dan menganalisis apakah hasil

28
00:01:17,950 --> 00:01:20,360
‫yang kita peroleh benar-benar masuk akal.

29
00:01:20,360 --> 00:01:22,710
‫Jadi mari kita mulai dengan menulis setTimeout,

30
00:01:24,290 --> 00:01:26,513
‫jadi pada dasarnya untuk menyetel timer,

31
00:01:27,980 --> 00:01:29,890
‫dan saya menggunakan fungsi panah

32
00:01:29,890 --> 00:01:31,270
‫di sini, dan

33
00:01:31,270 --> 00:01:33,773
‫satu-satunya hal yang akan saya lakukan adalah

34
00:01:34,930 --> 00:01:39,930
‫masuk ke konsol beberapa string, jadi konsol. log, timer satu selesai,

35
00:01:41,800 --> 00:01:45,390
‫dan saya ingin ini kedaluwarsa setelah nol detik.

36
00:01:45,390 --> 00:01:47,740
‫Oke, simpan, dan kemudian Anda melihat bahwa

37
00:01:47,740 --> 00:01:50,030
‫itu benar-benar mengoreksi string ini di sini,

38
00:01:50,030 --> 00:01:53,120
‫jadi itu mengubah tanda kutip ini, dan menambahkan titik

39
00:01:53,120 --> 00:01:54,810
‫koma, dan itu karena

40
00:01:54,810 --> 00:01:56,940
‫ekstensi Prettier yang kami instal sebelumnya.

41
00:01:56,940 --> 00:01:58,510
‫Sekarang saya tidak akan mengonfigurasinya

42
00:01:58,510 --> 00:01:59,850
‫di sini, karena untuk

43
00:01:59,850 --> 00:02:02,050
‫contoh kecil ini, itu tidak terlalu diperlukan, oke.

44
00:02:02,050 --> 00:02:05,150
‫Jadi itu adalah mengatur timer, maka mari

45
00:02:05,150 --> 00:02:09,320
‫kita juga menggunakan setImmediate, jadi ingat itu dari video terakhir.

46
00:02:09,320 --> 00:02:11,620
‫Oke, sekarang saya tidak akan menjelaskan banyak di sini,

47
00:02:11,620 --> 00:02:13,350
‫untuk sekarang mari kita tulis

48
00:02:13,350 --> 00:02:15,510
‫kode ini, lalu analisis apa yang terjadi, oke.

49
00:02:15,510 --> 00:02:20,320
‫Jadi setImmediate, dan seperti timer lainnya, ia menerima

50
00:02:20,320 --> 00:02:22,500
‫fungsi panggilan balik.

51
00:02:22,500 --> 00:02:25,130
‫Dan yang akan kita lakukan hanyalah

52
00:02:27,720 --> 00:02:31,440
‫menulis yang segera selesai, dan yang ini tidak

53
00:02:31,440 --> 00:02:33,520
‫punya waktu, karena

54
00:02:33,520 --> 00:02:36,930
‫itu tidak perlu karena seperti namanya, itu segera.

55
00:02:36,930 --> 00:02:38,540
‫Kemudian hal lain yang ingin

56
00:02:38,540 --> 00:02:41,620
‫kita lakukan adalah membaca file ini di sini, dan

57
00:02:41,620 --> 00:02:44,930
‫kemudian melewatkan fungsi panggilan balik, oke, jadi hal pertama yang

58
00:02:44,930 --> 00:02:48,963
‫harus kita lakukan adalah membutuhkan modul yang benar, jadi FS, dan sekarang

59
00:02:52,600 --> 00:02:54,987
‫fs. readFile, dan kami ingin file teks. txt,

60
00:03:05,586 --> 00:03:08,003
‫dan kemudian sesuatu terjadi.

61
00:03:09,270 --> 00:03:12,153
‫Dan seperti sebelumnya, katakan saja

62
00:03:13,740 --> 00:03:17,263
‫di sini, dalam hal ini I/O selesai, baiklah.

63
00:03:18,830 --> 00:03:21,170
‫Jadi I/O karena panggilan

64
00:03:21,170 --> 00:03:24,830
‫balik ini sebenarnya terkait dengan tugas I/O, yang

65
00:03:24,830 --> 00:03:28,440
‫sebenarnya mendapatkan fasenya sendiri di loop acara, kan.

66
00:03:28,440 --> 00:03:31,930
‫Dan akhirnya, mari kita tambahkan konsol. log di sini,

67
00:03:31,930 --> 00:03:35,473
‫mengatakan baik, halo dari kode tingkat atas.

68
00:03:37,517 --> 00:03:40,440
‫Oke, dan jadi kode tingkat atas, karena itu sebenarnya satu-satunya

69
00:03:40,440 --> 00:03:43,130
‫yang tidak ada di dalam panggilan balik apa pun.

70
00:03:43,130 --> 00:03:46,000
‫Jadi dalam contoh kecil yang kita miliki untuk saat ini, mari kita

71
00:03:46,000 --> 00:03:48,400
‫coba mencari tahu apa yang harus terjadi terlebih dahulu.

72
00:03:48,400 --> 00:03:50,510
‫Ingat, langkah pertama saat

73
00:03:50,510 --> 00:03:53,310
‫kita memuat modul adalah kode tingkat

74
00:03:53,310 --> 00:03:56,000
‫atas dieksekusi, jadi kita akan segera

75
00:03:56,000 --> 00:03:59,360
‫melihat konsol ini. log di sini, benar,

76
00:03:59,360 --> 00:04:02,110
‫baru kemudian kita akan melihat log lain yang

77
00:04:02,110 --> 00:04:04,280
‫berasal dari callback lain ini, karena

78
00:04:04,280 --> 00:04:06,820
‫callback ini akan benar-benar berjalan di loop acara.

79
00:04:06,820 --> 00:04:09,190
‫Jadi mari kita coba untuk melihat apakah

80
00:04:09,190 --> 00:04:12,000
‫itu benar-benar masalahnya, dan kemudian menganalisisnya sedikit lebih baik.

81
00:04:12,000 --> 00:04:15,150
‫Jadi membuka konsol di sini, dan lagi,

82
00:04:15,150 --> 00:04:17,250
‫saya melakukannya dengan menggunakan

83
00:04:17,250 --> 00:04:22,023
‫terminal, atau sebenarnya di tampilan, jadi terminal ini di sini, oke.

84
00:04:23,100 --> 00:04:27,020
‫Jadi perhatikan, acara-loop. js, atau sebenarnya sebelum

85
00:04:27,020 --> 00:04:30,960
‫kita melakukannya, saya perlu memperbaiki kesalahan ketik ini di sini, jadi

86
00:04:30,960 --> 00:04:33,580
‫ini adalah file uji, bukan file teks.

87
00:04:33,580 --> 00:04:36,093
‫Oke, tapi sekarang kita siap untuk

88
00:04:36,960 --> 00:04:40,320
‫menjalankan perintah ini, dan hasilnya masuk, jadi log pertama

89
00:04:40,320 --> 00:04:43,810
‫yang kita miliki di sini adalah halo dari kode

90
00:04:43,810 --> 00:04:46,100
‫tingkat atas, dan itu diharapkan,

91
00:04:46,100 --> 00:04:49,390
‫kan, karena ini adalah kode yang dieksekusi langsung.

92
00:04:49,390 --> 00:04:52,940
‫Kemudian setelah itu, kita memiliki tiga keluaran ini, tetapi sebenarnya

93
00:04:52,940 --> 00:04:55,460
‫tidak dalam urutan tertentu, dan itu

94
00:04:55,460 --> 00:04:57,640
‫karena kode ini di sini,

95
00:04:57,640 --> 00:05:00,970
‫jadi kode ini, sebenarnya tidak dalam siklus I/O, jadi

96
00:05:00,970 --> 00:05:03,780
‫tidak berjalan di dalam loop peristiwa, karena itu

97
00:05:03,780 --> 00:05:07,170
‫tidak berjalan di dalam fungsi panggilan balik apa pun.

98
00:05:07,170 --> 00:05:10,370
‫Oke, jadi di komputer Anda, Anda mungkin benar-benar melihat log

99
00:05:11,470 --> 00:05:13,160
‫ini di sini sebelum

100
00:05:13,160 --> 00:05:15,360
‫yang ini, lalu yang ini di

101
00:05:15,360 --> 00:05:18,550
‫sini hanya yang terakhir karena jenis file besar di

102
00:05:18,550 --> 00:05:20,840
‫sini membutuhkan waktu untuk dibaca, jadi mungkin

103
00:05:20,840 --> 00:05:23,060
‫akan selalu menjadi yang terakhir satu.

104
00:05:23,060 --> 00:05:27,140
‫Jadi sekali lagi, pada titik ini, urutan ketiganya di sini tidak

105
00:05:27,140 --> 00:05:29,640
‫ada hubungannya dengan loop acara, karena

106
00:05:29,640 --> 00:05:31,320
‫mereka sebenarnya belum berjalan

107
00:05:31,320 --> 00:05:33,420
‫di dalam loop acara dulu.

108
00:05:33,420 --> 00:05:36,490
‫Untuk itu, kita harus memindahkannya, atau

109
00:05:36,490 --> 00:05:40,490
‫setidaknya memindahkan keduanya ke sini, di dalam fungsi panggilan balik.

110
00:05:40,490 --> 00:05:43,713
‫Jadi, untuk itu kita akan menggunakan yang ini di sini sebenarnya.

111
00:05:45,270 --> 00:05:50,190
‫Jadi biarkan saya meletakkannya di sini, dan katakan timer dua dan timer dua

112
00:05:50,190 --> 00:05:55,190
‫di sini, atau langsung dua, dan saya juga akan menambahkan timer lain di sini,

113
00:05:55,270 --> 00:05:57,740
‫jadi timer tiga, dan yang ini

114
00:05:57,740 --> 00:06:01,140
‫akan berjalan selama tiga detik, jadi 3000 milidetik .

115
00:06:01,140 --> 00:06:03,840
‫Jadi sekarang mari kita coba hasil yang satu ini.

116
00:06:03,840 --> 00:06:06,230
‫Tapi sebelum kita melakukan itu,

117
00:06:06,230 --> 00:06:09,660
‫mari kita pikirkan mengapa setelah semua kode sebelumnya

118
00:06:09,660 --> 00:06:13,730
‫dijalankan, program kemudian keluar dan kembali ke prompt di sini.

119
00:06:13,730 --> 00:06:16,500
‫Jadi ingat bagaimana Node. js memutuskan apakah

120
00:06:16,500 --> 00:06:19,000
‫itu harus terus menjalankan loop acara, baik itu

121
00:06:19,000 --> 00:06:21,620
‫melakukannya dengan menanyakan apakah masih ada waktu yang berjalan

122
00:06:21,620 --> 00:06:24,580
‫di latar belakang, dan jika demikian, itu tidak akan selesai,

123
00:06:24,580 --> 00:06:26,800
‫dan jika masih ada pengatur waktu yang

124
00:06:26,800 --> 00:06:29,140
‫tertunda, maka itu tidak akan keluar dari program.

125
00:06:29,140 --> 00:06:30,920
‫Tetapi jika tidak ada, seperti yang

126
00:06:30,920 --> 00:06:33,920
‫terjadi pada contoh pertama di sini, maka ia akan segera keluar

127
00:06:33,920 --> 00:06:36,660
‫dari program, oke, tapi sekarang kita sebenarnya memiliki satu

128
00:06:36,660 --> 00:06:38,980
‫timer di sini, jadi yang ini akan berjalan

129
00:06:38,980 --> 00:06:41,620
‫selama tiga detik, jadi mari kita coba mencari tahu

130
00:06:41,620 --> 00:06:43,220
‫apa terjadi di sini.

131
00:06:45,260 --> 00:06:47,450
‫Oke, jadi Anda lihat itu

132
00:06:47,450 --> 00:06:50,640
‫tidak keluar, dan baru sekarang, setelah timer tiga

133
00:06:50,640 --> 00:06:53,170
‫selesai, itu kemudian keluar dari aplikasi.

134
00:06:53,170 --> 00:06:56,100
‫Oke, jadi mari kita lihat itu

135
00:06:56,100 --> 00:06:59,480
‫lagi, jadi semua timer log ini berjalan, timer

136
00:06:59,480 --> 00:07:02,070
‫selesai, dan keluar dari aplikasi.

137
00:07:02,070 --> 00:07:04,490
‫Sekarang tentang hasil ini di sini, mari kita

138
00:07:04,490 --> 00:07:06,820
‫buat ini di sini sedikit lebih

139
00:07:06,820 --> 00:07:10,113
‫mudah untuk dilihat, dan tambahkan hanya pemisah kecil di sini.

140
00:07:11,360 --> 00:07:14,683
‫Oke, bersihkan ini, oke.

141
00:07:16,510 --> 00:07:19,600
‫Jadi keempat yang di sini adalah output yang

142
00:07:19,600 --> 00:07:22,110
‫tidak benar-benar berjalan di loop acara, tetapi

143
00:07:22,110 --> 00:07:24,380
‫ketiganya di sini sebenarnya keluar

144
00:07:24,380 --> 00:07:28,150
‫dari loop acara, jadi sekarang mari kita menganalisis hasil ini.

145
00:07:28,150 --> 00:07:29,980
‫Sekarang, jika Anda

146
00:07:29,980 --> 00:07:32,690
‫ingat diagram dari kuliah sebelumnya, Anda

147
00:07:32,690 --> 00:07:36,960
‫mungkin akan berpikir bahwa timer, jadi timer dua di sini,

148
00:07:36,960 --> 00:07:39,640
‫harus benar-benar selesai sebelum setSegera,

149
00:07:39,640 --> 00:07:42,640
‫karena dalam diagram, itu benar-benar muncul pertama

150
00:07:42,640 --> 00:07:45,100
‫tepat di atas lingkaran acara.

151
00:07:45,100 --> 00:07:48,090
‫Jadi kita harus menyetel batas waktu

152
00:07:48,090 --> 00:07:52,500
‫di sini dengan nol, yang seharusnya sama dengan setImmediate, kan.

153
00:07:52,500 --> 00:07:54,610
‫Jadi mengapa

154
00:07:54,610 --> 00:07:57,630
‫setImmediate benar-benar muncul sebelum setTimeout?

155
00:07:57,630 --> 00:08:00,020
‫Nah, ada sesuatu yang tidak

156
00:08:00,020 --> 00:08:02,470
‫saya jelaskan di video terakhir, karena

157
00:08:02,470 --> 00:08:05,750
‫saya tidak ingin membuatnya semakin membingungkan, dan itu adalah

158
00:08:05,750 --> 00:08:09,320
‫bahwa loop acara sebenarnya menunggu hal-hal terjadi di fase polling.

159
00:08:09,320 --> 00:08:12,270
‫Jadi dalam fase di mana panggilan balik I/O ditangani.

160
00:08:12,270 --> 00:08:15,400
‫Jadi ketika antrian panggilan balik ini kosong, yang merupakan

161
00:08:15,400 --> 00:08:17,940
‫kasus dalam contoh fiksi kami di sini,

162
00:08:17,940 --> 00:08:20,270
‫jadi kami tidak memiliki panggilan balik

163
00:08:20,270 --> 00:08:23,500
‫I/O, yang kami miliki hanyalah pengatur waktu ini, maka loop

164
00:08:23,500 --> 00:08:27,490
‫acara akan menunggu di fase ini sampai ada yang kedaluwarsa pengatur waktu.

165
00:08:27,490 --> 00:08:31,430
‫Namun, jika kita menjadwalkan panggilan balik menggunakan setImmediate, maka

166
00:08:31,430 --> 00:08:34,320
‫panggilan balik itu akan benar-benar dieksekusi segera

167
00:08:34,320 --> 00:08:36,920
‫setelah fase pemungutan suara, dan

168
00:08:36,920 --> 00:08:40,240
‫bahkan sebelum penghitung waktu yang kedaluwarsa, jika ada.

169
00:08:40,240 --> 00:08:43,270
‫Dan dalam hal ini, penghitung waktu segera berakhir,

170
00:08:43,270 --> 00:08:46,080
‫jadi setelah nol detik, tetapi sekali lagi,

171
00:08:46,080 --> 00:08:49,710
‫loop acara benar-benar menunggu, sehingga berhenti di fase pemungutan suara.

172
00:08:49,710 --> 00:08:52,100
‫Dan agar panggilan balik

173
00:08:52,100 --> 00:08:55,580
‫setImmediate benar-benar dieksekusi terlebih dahulu, jadi itulah alasan

174
00:08:55,580 --> 00:08:59,730
‫mengapa kami memiliki ini segera setelah kami memiliki penghitung waktu.

175
00:08:59,730 --> 00:09:02,770
‫Oke, dan saya tahu ini terdengar sangat membingungkan,

176
00:09:02,770 --> 00:09:04,810
‫dan saya sepenuhnya setuju, tapi

177
00:09:04,810 --> 00:09:08,090
‫memang begitulah Node.js. js bekerja.

178
00:09:08,090 --> 00:09:11,380
‫Dan sekarang mari kita buat ini sedikit lebih membingungkan,

179
00:09:11,380 --> 00:09:14,250
‫dan tambahkan prosesnya. nextTick yang

180
00:09:14,250 --> 00:09:16,950
‫kita bicarakan juga di kuliah terakhir.

181
00:09:16,950 --> 00:09:21,950
‫Jadi kita katakan proses. nextTick, dan kemudian seperti sebelumnya, kami

182
00:09:22,170 --> 00:09:24,323
‫hanya memberikannya fungsi panggilan balik.

183
00:09:25,540 --> 00:09:27,640
‫Dan lagi, saya hanya ingin masuk ke

184
00:09:27,640 --> 00:09:31,663
‫konsol, dan saya akan mengatakan proses. berikutnyaCentang.

185
00:09:32,550 --> 00:09:36,150
‫Jadi menurut Anda apa yang akan terjadi dalam kasus ini?

186
00:09:36,150 --> 00:09:40,170
‫Silakan dan tebak, dan setelah Anda siap, Anda dapat

187
00:09:40,170 --> 00:09:42,883
‫menjalankan ini, jadi ayo lakukan itu.

188
00:09:44,120 --> 00:09:48,280
‫Simpan di sini dulu, jalankan, dan ini dia.

189
00:09:48,280 --> 00:09:51,760
‫Jadi hasilnya masuk lagi, dan sekarang panggilan balik

190
00:09:51,760 --> 00:09:55,640
‫pertama yang dieksekusi sebenarnya adalah fungsi ini di sini.

191
00:09:55,640 --> 00:09:58,220
‫Makanya ada prosesnya. nextTick kanan

192
00:09:58,220 --> 00:09:59,710
‫di yang pertama.

193
00:09:59,710 --> 00:10:03,500
‫Jadi mengapa fungsi panggilan balik ini dari proses. nextCentang yang pertama

194
00:10:03,500 --> 00:10:06,570
‫dari semuanya yang akan dieksekusi?

195
00:10:06,570 --> 00:10:09,070
‫Nah, ingat bahwa nextTick adalah

196
00:10:09,070 --> 00:10:12,410
‫bagian dari antrian microtasks, yang dieksekusi setelah

197
00:10:12,410 --> 00:10:16,530
‫setiap fase, jadi tidak hanya setelah satu centang penuh.

198
00:10:16,530 --> 00:10:19,120
‫Jadi yang terjadi di sini

199
00:10:19,120 --> 00:10:23,660
‫adalah fungsi callback ini sebenarnya berjalan sebelum fase di mana fungsi

200
00:10:23,660 --> 00:10:26,970
‫callback ini berjalan, dan fase sebelumnya, oke.

201
00:10:26,970 --> 00:10:30,850
‫Sekarang nextTick sebenarnya adalah nama yang menyesatkan, karena

202
00:10:30,850 --> 00:10:33,990
‫tick sebenarnya adalah seluruh loop, tapi

203
00:10:33,990 --> 00:10:37,860
‫nextTick sebenarnya terjadi sebelum fase loop berikutnya, dan

204
00:10:37,860 --> 00:10:41,990
‫bukan seluruh tick, jadi itulah yang saya katakan sebelumnya.

205
00:10:41,990 --> 00:10:45,830
‫Kemudian di sisi lain, setImmediate akan membuat

206
00:10:45,830 --> 00:10:49,690
‫Anda berpikir bahwa panggilan baliknya akan segera

207
00:10:49,690 --> 00:10:52,780
‫dieksekusi, tetapi sebenarnya tidak, kan, jadi

208
00:10:52,780 --> 00:10:55,570
‫setImmediate sebenarnya dieksekusi sekali

209
00:10:55,570 --> 00:10:58,800
‫per centang, sementara nextTick segera dieksekusi.

210
00:10:58,800 --> 00:11:01,820
‫Jadi dua nama mereka sebenarnya harus diganti.

211
00:11:01,820 --> 00:11:03,700
‫Mereka seharusnya sebaliknya, dan ini dapat

212
00:11:03,700 --> 00:11:05,390
‫menyebabkan banyak kebingungan, jadi

213
00:11:05,390 --> 00:11:08,440
‫yang terbaik adalah selalu berpegang pada salah satunya, dan

214
00:11:08,440 --> 00:11:12,470
‫itu biasanya setImmediate dan bukan proses. berikutnyaCentang.

215
00:11:12,470 --> 00:11:15,070
‫Sekarang, seperti yang saya sebutkan di video

216
00:11:15,070 --> 00:11:18,530
‫terakhir, mekanisme ini sebenarnya lebih untuk kasus penggunaan yang cukup

217
00:11:18,530 --> 00:11:20,320
‫canggih, itulah sebabnya kami

218
00:11:20,320 --> 00:11:22,760
‫mungkin tidak akan menggunakannya dalam proyek kami.

219
00:11:22,760 --> 00:11:24,970
‫Tetapi jika Anda ingin mempelajari lebih

220
00:11:24,970 --> 00:11:28,060
‫lanjut tentang mereka, Anda selalu dapat membaca dokumentasi Node resmi.

221
00:11:28,060 --> 00:11:30,660
‫Oke, jadi dengan ini kami telah mensimulasikan

222
00:11:30,660 --> 00:11:33,250
‫beberapa aspek dari loop acara, tetapi untuk

223
00:11:33,250 --> 00:11:35,500
‫menyelesaikannya, saya ingin memperkenalkan sesuatu tentang

224
00:11:35,500 --> 00:11:38,290
‫kumpulan utas dengan cepat juga, dan untuk itu

225
00:11:38,290 --> 00:11:40,950
‫kami akan melakukan operasi yang lebih kompleks yang

226
00:11:40,950 --> 00:11:43,490
‫sebenarnya akan diturunkan ke kumpulan utas, dan

227
00:11:43,490 --> 00:11:47,040
‫lihat berapa lama operasi ini berjalan, dan bagaimana kita dapat

228
00:11:47,040 --> 00:11:48,510
‫mengubah ukuran kumpulan

229
00:11:48,510 --> 00:11:50,870
‫utas yang telah kita bicarakan sebelumnya.

230
00:11:50,870 --> 00:11:52,840
‫Jadi kita akan menggunakan beberapa

231
00:11:52,840 --> 00:11:55,203
‫kriptografi di sini untuk mengenkripsi kata sandi.

232
00:11:58,620 --> 00:12:00,820
‫Jadi itu adalah paket baru yang belum

233
00:12:00,820 --> 00:12:04,130
‫pernah kami gunakan sebelumnya, dan itu disebut Crypto, tapi saya

234
00:12:04,130 --> 00:12:07,063
‫sebutkan sebelumnya bahwa sebenarnya, semua fungsi dari paket ini,

235
00:12:07,960 --> 00:12:11,260
‫mereka akan diturunkan secara otomatis oleh loop acara ke kumpulan

236
00:12:11,260 --> 00:12:13,280
‫utas, dan itulah yang kami 're

237
00:12:13,280 --> 00:12:14,780
‫akan menguji sekarang.

238
00:12:18,380 --> 00:12:22,070
‫Dan mari kita gunakan ini sekarang, jadi kripto. pb, jadi kita akan menggunakan

239
00:12:22,070 --> 00:12:25,303
‫fungsi enkripsi yang disebut pbkdf2, nama yang agak

240
00:12:27,610 --> 00:12:31,050
‫aneh, dan sekarang kita memasukkan string rahasia, yang katakan

241
00:12:31,050 --> 00:12:34,640
‫saja kata sandi, lalu kita perlu string untuk memecahkan

242
00:12:34,640 --> 00:12:37,520
‫kata sandi, dan implementasinya di sini tidak

243
00:12:37,520 --> 00:12:40,820
‫terlalu penting, jadi untuk saat ini saya tidak

244
00:12:40,820 --> 00:12:42,970
‫akan membahas detail cara kerjanya,

245
00:12:42,970 --> 00:12:46,150
‫kita akan melakukannya nanti, oke, jadi di sini

246
00:12:46,150 --> 00:12:48,320
‫kita hanya perlu panjang kunci,

247
00:12:48,320 --> 00:12:50,070
‫jadi nomor ini

248
00:12:50,070 --> 00:12:53,870
‫di sini hanya untuk jumlah iterasi, lalu ini adalah panjang

249
00:12:53,870 --> 00:12:56,020
‫kunci, dan akhirnya algoritma, yang

250
00:12:56,020 --> 00:12:58,430
‫akan digunakan untuk mengenkripsi kata sandi.

251
00:12:58,430 --> 00:13:00,380
‫Jadi angka-angka ini hanya akan

252
00:13:00,380 --> 00:13:02,483
‫menambah waktu yang dibutuhkan untuk enkripsi.

253
00:13:04,970 --> 00:13:08,610
‫Oke dan akhirnya, itu juga membutuhkan fungsi panggilan balik, dan yang akan saya lakukan di

254
00:13:08,610 --> 00:13:11,483
‫sini adalah melakukan konsol lain. log,

255
00:13:12,730 --> 00:13:16,453
‫dan katakan saja kata sandi terenkripsi.

256
00:13:17,950 --> 00:13:20,740
‫Sekarang, untuk tujuan demonstrasi ini, saya

257
00:13:20,740 --> 00:13:24,220
‫sebenarnya ingin menunjukkan kepada Anda berapa banyak waktu

258
00:13:24,220 --> 00:13:27,400
‫yang dibutuhkan setiap operasi ini, jadi apa

259
00:13:27,400 --> 00:13:32,010
‫yang akan kita lakukan pada dasarnya adalah mendefinisikan sebuah variabel di

260
00:13:32,010 --> 00:13:37,010
‫awal, mengaturnya ke tanggal. sekarang, jadi itu adalah tanggal saat ini

261
00:13:37,120 --> 00:13:41,310
‫dalam milidetik, dan kemudian di sini, yang harus kita lakukan adalah mencatat

262
00:13:41,310 --> 00:13:46,310
‫tidak hanya string, tetapi juga tanggal. sekarang, yang akan menjadi tanggal

263
00:13:46,310 --> 00:13:49,700
‫pada titik ini dalam milidetik, dikurangi awal,

264
00:13:49,700 --> 00:13:53,010
‫dan kemudian akan memberi kita jumlah milidetik

265
00:13:53,010 --> 00:13:55,380
‫yang telah berlalu untuk

266
00:13:55,380 --> 00:13:57,380
‫melakukan perhitungan ini.

267
00:13:57,380 --> 00:13:59,693
‫Oke, jadi mari kita

268
00:14:00,890 --> 00:14:05,360
‫coba, simpan, dan jalankan lagi, dan di sini Anda

269
00:14:05,360 --> 00:14:08,530
‫melihat bahwa butuh 1855 milidetik, jadi

270
00:14:08,530 --> 00:14:12,250
‫hampir dua detik untuk mengenkripsi kata sandi ini.

271
00:14:12,250 --> 00:14:15,110
‫Oke, tapi sekarang mari kita menduplikasi kode ini,

272
00:14:15,110 --> 00:14:17,360
‫atau sebenarnya saya ingin empat

273
00:14:17,360 --> 00:14:19,660
‫contoh ini menunjukkan sesuatu kepada Anda.

274
00:14:19,660 --> 00:14:23,400
‫Jadi jika kita menjalankan ini sekarang, mungkin dibutuhkan waktu

275
00:14:23,400 --> 00:14:25,710
‫yang kira-kira sama, dan ya, jadi

276
00:14:25,710 --> 00:14:27,980
‫itu 1. 8

277
00:14:27,980 --> 00:14:31,620
‫detik, sekarang 2. 2 detik, yang sangat mirip.

278
00:14:31,620 --> 00:14:34,530
‫Oke, dan ingat bahwa saya memberi tahu Anda di

279
00:14:34,530 --> 00:14:36,630
‫salah satu kuliah sebelumnya, bahwa secara

280
00:14:36,630 --> 00:14:39,360
‫default ukuran kumpulan utas adalah empat, jadi ada

281
00:14:39,360 --> 00:14:41,720
‫empat utas yang melakukan pekerjaan pada saat

282
00:14:41,720 --> 00:14:44,010
‫yang sama, dan itulah mengapa keempat enkripsi

283
00:14:44,010 --> 00:14:46,160
‫kata sandi ini memakan waktu kira-kira

284
00:14:46,160 --> 00:14:48,000
‫waktu yang sama dan

285
00:14:48,000 --> 00:14:50,740
‫terjadi pada dasarnya semua pada waktu yang sama.

286
00:14:50,740 --> 00:14:53,990
‫Tapi kita sebenarnya bisa mengubah ukuran kumpulan utas itu.

287
00:14:53,990 --> 00:14:57,100
‫Jadi, izinkan saya menunjukkan kepada Anda bagaimana kami melakukannya, dan kami

288
00:14:57,100 --> 00:14:59,867
‫melakukannya dengan mengatakan proses. env, dan

289
00:15:01,290 --> 00:15:03,230
‫itu adalah variabel lingkungan, dan

290
00:15:03,230 --> 00:15:05,680
‫sekali lagi kita akan membicarakannya nanti, dan

291
00:15:06,684 --> 00:15:08,613
‫UV, yang merupakan singkatan dari

292
00:15:11,232 --> 00:15:15,500
‫LibUV, ukuran kumpulan utas, jadi jika kita menyetel ini ke satu, kita

293
00:15:15,500 --> 00:15:18,783
‫hanya akan memiliki satu utas di kumpulan utas kita.

294
00:15:21,110 --> 00:15:26,110
‫Jadi mari kita coba lagi, dan mari kita lihat apa yang terjadi sekarang.

295
00:15:28,650 --> 00:15:32,840
‫Jadi Anda melihat bahwa mereka semua membutuhkan waktu lebih lama untuk menghitung.

296
00:15:32,840 --> 00:15:35,490
‫Pada dasarnya, mereka dihitung satu demi satu.

297
00:15:35,490 --> 00:15:38,470
‫Jadi yang ini yang pertama, lalu yang ini di sini

298
00:15:38,470 --> 00:15:40,610
‫membutuhkan waktu dua kali lipat, dan sekali

299
00:15:40,610 --> 00:15:42,980
‫lagi itu karena yang ini hanya bisa dimulai

300
00:15:42,980 --> 00:15:45,160
‫segera setelah yang pertama selesai, dan sama

301
00:15:45,160 --> 00:15:46,893
‫dengan yang ketiga dan keempat.

302
00:15:47,920 --> 00:15:49,620
‫Sekarang katakanlah kita mengubahnya

303
00:15:52,170 --> 00:15:54,300
‫menjadi dua, maka kita akan melihat dua

304
00:15:54,300 --> 00:15:56,990
‫yang pertama dengan waktu yang sama, dan tepatnya,

305
00:15:56,990 --> 00:15:59,710
‫dua yang kedua juga dengan waktu yang sama.

306
00:15:59,710 --> 00:16:01,363
‫Jadi masuk akal, kan.

307
00:16:02,650 --> 00:16:04,500
‫Hanya demi penyelesaian di

308
00:16:05,610 --> 00:16:08,950
‫sini, sekarang sama dengan tiga, jadi ketiganya memiliki waktu

309
00:16:08,950 --> 00:16:11,340
‫yang sama, dan kemudian yang terakhir.

310
00:16:11,340 --> 00:16:15,440
‫Baiklah, jadi beginilah cara kerja kumpulan utas pada dasarnya, jadi saya

311
00:16:15,440 --> 00:16:18,660
‫memutuskan untuk tidak hanya fokus pada loop peristiwa,

312
00:16:18,660 --> 00:16:22,630
‫tetapi juga memberi Anda gambaran umum, yang sangat cepat, tentang kumpulan

313
00:16:22,630 --> 00:16:25,010
‫utas dan bagaimana kita dapat mengubah

314
00:16:25,010 --> 00:16:27,620
‫ukuran kumpulan utas , oke, perlu diingat

315
00:16:27,620 --> 00:16:29,560
‫bahwa kode ini di

316
00:16:29,560 --> 00:16:33,230
‫sini sebenarnya masih asinkron, karena kami melewati fungsi panggilan balik.

317
00:16:33,230 --> 00:16:36,490
‫Oke, dan kita sebenarnya bisa menggunakan versi sinkron, tapi

318
00:16:36,490 --> 00:16:38,920
‫itu akan memblokir loop acara.

319
00:16:38,920 --> 00:16:40,650
‫Ingin melihat itu?

320
00:16:40,650 --> 00:16:43,183
‫Jadi izinkan saya dengan cepat menunjukkannya kepada Anda juga,

321
00:16:44,120 --> 00:16:46,130
‫sehingga yang satu itu tidak benar-benar

322
00:16:46,130 --> 00:16:48,240
‫direncanakan, tetapi mari kita lakukan, karena menurut

323
00:16:48,240 --> 00:16:50,090
‫saya sangat menarik untuk dilihat.

324
00:16:51,580 --> 00:16:53,830
‫Oke, jadi itu akan berfungsi seperti ini.

325
00:16:53,830 --> 00:16:57,570
‫Kami menggunakan lagi versi sinkronisasi dari fungsi yang

326
00:16:57,570 --> 00:16:59,950
‫sama, yang catatan, tersedia berkali-kali.

327
00:16:59,950 --> 00:17:02,760
‫Ingat kami memiliki yang sama untuk file baca, jadi

328
00:17:02,760 --> 00:17:05,190
‫kami telah membaca file, yang menerima

329
00:17:05,190 --> 00:17:08,290
‫panggilan balik, dan kami telah membaca sinkronisasi file, yang merupakan

330
00:17:08,290 --> 00:17:11,440
‫versi sinkron yang tidak menerima panggilan balik, jadi seperti ini.

331
00:17:11,440 --> 00:17:13,520
‫Jadi yang ini kemudian akan

332
00:17:13,520 --> 00:17:16,890
‫mengenkripsi kata sandi, memblokir eksekusi kode, dan kemudian pindah ke baris

333
00:17:16,890 --> 00:17:19,700
‫berikutnya, yang kemudian akan mencatatnya di sini ke konsol.

334
00:17:19,700 --> 00:17:21,823
‫Jadi sekarang mari kita duplikat ini di sini.

335
00:17:23,570 --> 00:17:26,553
‫Itu terlalu banyak, singkirkan yang ini di sini,

336
00:17:27,500 --> 00:17:31,310
‫dan sekarang keempat enkripsi kata sandi ini tidak akan lagi

337
00:17:31,310 --> 00:17:33,350
‫berjalan di loop acara.

338
00:17:33,350 --> 00:17:37,070
‫Jadi mereka tidak akan lagi diturunkan ke kumpulan utas.

339
00:17:37,070 --> 00:17:39,980
‫Oke, dan sekarang bahkan jika kita memiliki kumpulan utas

340
00:17:39,980 --> 00:17:42,583
‫berukuran empat, mari kita lihat apa yang terjadi.

341
00:17:46,010 --> 00:17:50,080
‫Jadi Anda lihat, itu terjadi sepenuhnya dengan cara yang sinkron.

342
00:17:50,080 --> 00:17:53,290
‫Jadi satu demi satu, dan yang lebih buruk

343
00:17:53,290 --> 00:17:55,350
‫lagi, adalah semua timer

344
00:17:55,350 --> 00:17:57,960
‫ini di sini, bahkan nextTick dan

345
00:17:57,960 --> 00:18:01,850
‫yang langsung, hanya muncul setelah enkripsi kata sandi terjadi.

346
00:18:01,850 --> 00:18:04,990
‫Jadi ini benar-benar memblokir seluruh eksekusi, bahkan jika pengatur

347
00:18:04,990 --> 00:18:07,460
‫waktu ini di sini, misalnya yang ini

348
00:18:07,460 --> 00:18:09,580
‫di sini, selesai setelah nol detik,

349
00:18:09,580 --> 00:18:11,440
‫dan yang ini setelah

350
00:18:11,440 --> 00:18:13,830
‫tiga detik, tetapi mereka semua harus menunggu

351
00:18:13,830 --> 00:18:16,010
‫tujuh detik sampai semua enkripsi kata

352
00:18:16,010 --> 00:18:19,670
‫sandi ini di sini akhirnya siap, sekali lagi karena mereka tidak

353
00:18:19,670 --> 00:18:22,120
‫berjalan di dalam loop acara, tetapi ini.

354
00:18:22,120 --> 00:18:24,960
‫Jadi mereka pada dasarnya bekerja di latar belakang

355
00:18:24,960 --> 00:18:26,890
‫dan hanya dapat diambil

356
00:18:26,890 --> 00:18:29,470
‫oleh loop peristiwa ketika mereka siap,

357
00:18:29,470 --> 00:18:32,110
‫tepat setelah empat enkripsi kata sandi ini,

358
00:18:32,110 --> 00:18:34,760
‫jadi yang ini adalah contoh bagus lainnya

359
00:18:34,760 --> 00:18:38,240
‫untuk melihat pemblokiran kode dan loop peristiwa semuanya beraksi.

360
00:18:38,240 --> 00:18:41,600
‫Oke, cukup untuk satu kuliah, saya harap Anda

361
00:18:41,600 --> 00:18:43,270
‫menganggapnya menarik, dan

362
00:18:43,270 --> 00:18:45,220
‫sampai jumpa di kuliah berikutnya.

