﻿1
00:00:01,170 --> 00:00:02,830
‫Istruttore: Ora, per

2
00:00:02,830 --> 00:00:04,710
‫preparare il terreno per il

3
00:00:04,710 --> 00:00:08,083
‫prossimo paio di lezioni, iniziamo imparando qualcosa sull'architettura Node.

4
00:00:09,430 --> 00:00:11,980
‫Quindi rappresentiamo qui quell'architettura in termini

5
00:00:11,980 --> 00:00:14,610
‫di dipendenze di Node, che sono

6
00:00:14,610 --> 00:00:16,620
‫solo un paio

7
00:00:16,620 --> 00:00:20,300
‫di librerie da cui Node dipende per funzionare correttamente.

8
00:00:20,300 --> 00:00:23,320
‫Quindi il tempo di esecuzione del nodo ha

9
00:00:23,320 --> 00:00:25,010
‫diverse dipendenze e

10
00:00:25,010 --> 00:00:29,030
‫le più importanti sono il motore V8 (mumbles) e libuv.

11
00:00:29,030 --> 00:00:32,800
‫Ora abbiamo detto prima che Node è un runtime JavaScript

12
00:00:32,800 --> 00:00:35,570
‫basato sul motore V8 di Google, giusto?

13
00:00:35,570 --> 00:00:39,140
‫E quindi, ecco perché appare qui come una dipendenza.

14
00:00:39,140 --> 00:00:42,620
‫Se non fosse per V8, Node non avrebbe assolutamente

15
00:00:42,620 --> 00:00:45,980
‫modo di comprendere il codice JavaScript che scriviamo.

16
00:00:45,980 --> 00:00:48,770
‫E quindi, V8 è una parte

17
00:00:48,770 --> 00:00:50,880
‫fondamentale nell'architettura Node.

18
00:00:50,880 --> 00:00:55,450
‫Quindi, ancora una volta, il motore V8 è ciò che converte il codice

19
00:00:55,450 --> 00:00:59,470
‫JavaScript in codice macchina che un computer può effettivamente comprendere.

20
00:00:59,470 --> 00:01:03,370
‫Ok, ma questo da solo non è sufficiente per creare un intero

21
00:01:03,370 --> 00:01:05,380
‫framework lato server come Node.

22
00:01:05,380 --> 00:01:09,100
‫Ed è per questo che abbiamo anche libuv in Node.

23
00:01:09,100 --> 00:01:12,380
‫E libuv è una libreria open source con

24
00:01:12,380 --> 00:01:15,060
‫una forte attenzione all'IO asincrono.

25
00:01:15,060 --> 00:01:16,860
‫Quindi, input output.

26
00:01:16,860 --> 00:01:19,500
‫Questo livello è ciò che consente a Node

27
00:01:19,500 --> 00:01:21,790
‫di accedere al sistema operativo del

28
00:01:21,790 --> 00:01:25,240
‫computer sottostante, al file system, alla rete e altro ancora.

29
00:01:25,240 --> 00:01:28,440
‫Oltre a ciò, libuv implementa anche due funzionalità estremamente importanti

30
00:01:28,440 --> 00:01:30,540
‫di Node. JS che sono

31
00:01:30,540 --> 00:01:34,010
‫il ciclo degli eventi e anche il pool di thread.

32
00:01:34,010 --> 00:01:37,130
‫E in termini semplici, il ciclo degli eventi è

33
00:01:37,130 --> 00:01:40,430
‫responsabile della gestione di attività semplici come l'esecuzione di richiamate

34
00:01:40,430 --> 00:01:44,790
‫e I/O di rete mentre il pool di thread è per lavori più pesanti

35
00:01:44,790 --> 00:01:48,200
‫come l'accesso ai file o la compressione o qualcosa del genere.

36
00:01:48,200 --> 00:01:50,120
‫Ma imparerai tutto su questo,

37
00:01:50,120 --> 00:01:52,430
‫quindi sul ciclo degli eventi e sul pool

38
00:01:52,430 --> 00:01:54,430
‫di thread, nei prossimi due video.

39
00:01:54,430 --> 00:01:56,080
‫Una cosa importante da

40
00:01:56,080 --> 00:01:59,010
‫notare qui è che libuv è in realtà

41
00:01:59,010 --> 00:02:01,840
‫completamente scritto in C++ e non in JavaScript.

42
00:02:01,840 --> 00:02:06,840
‫E lo stesso V8, oltre a JavaScript, utilizza anche il codice C++.

43
00:02:06,950 --> 00:02:10,150
‫Quindi, Node stesso è un programma scritto

44
00:02:10,150 --> 00:02:14,170
‫in C++ e JavaScript e non solo in JavaScript come

45
00:02:14,170 --> 00:02:16,530
‫ci si potrebbe aspettare, giusto?

46
00:02:16,530 --> 00:02:19,660
‫Ora la bellezza di questo è che Node. JS lega

47
00:02:19,660 --> 00:02:22,310
‫insieme tutte queste librerie, non importa

48
00:02:22,310 --> 00:02:25,640
‫se scritte in C++ o JavaScript, e quindi

49
00:02:25,640 --> 00:02:30,380
‫dà a noi sviluppatori l'accesso alle loro funzioni in puro JavaScript.

50
00:02:30,380 --> 00:02:33,090
‫Quindi ci fornisce davvero un ottimo

51
00:02:33,090 --> 00:02:37,290
‫livello di astrazione per rendere la nostra vita molto più

52
00:02:37,290 --> 00:02:41,200
‫semplice invece di dover pasticciare con il codice C++.

53
00:02:41,200 --> 00:02:43,970
‫Sarebbe un'esperienza terribile, giusto?

54
00:02:43,970 --> 00:02:47,450
‫Quindi, ancora una volta, questa architettura ci consente di scrivere

55
00:02:47,450 --> 00:02:49,490
‫codice JavaScript puro al 100%,

56
00:02:49,490 --> 00:02:52,960
‫in esecuzione in Node. JS e accedono ancora

57
00:02:52,960 --> 00:02:55,490
‫a funzioni come per la lettura dei

58
00:02:55,490 --> 00:02:57,650
‫file, che dietro le quinte sono

59
00:02:57,650 --> 00:03:01,290
‫effettivamente implementate in libuv o in altre librerie nel linguaggio C++.

60
00:03:01,290 --> 00:03:03,090
‫E parlando di

61
00:03:03,090 --> 00:03:06,750
‫altre librerie, Node in realtà non si basa

62
00:03:06,750 --> 00:03:10,920
‫solo su V8 e libuv, ma anche su http-parser per

63
00:03:10,920 --> 00:03:15,920
‫l'analisi di http, c-ares o qualcosa del genere per alcune richieste

64
00:03:16,420 --> 00:03:21,420
‫DNS, OpenSSL per la keepography e anche zlib per la compressione.

65
00:03:21,490 --> 00:03:24,740
‫E questi non sono così importanti da capire, va bene?

66
00:03:24,740 --> 00:03:27,830
‫Quindi alla fine, quando tutti questi pezzi si incastrano

67
00:03:27,830 --> 00:03:32,030
‫bene insieme, finiamo con Node. JS pronto per essere utilizzato

68
00:03:32,030 --> 00:03:35,000
‫sul lato server di tutte e quattro le applicazioni.

69
00:03:35,000 --> 00:03:37,670
‫E poi, imparerai di più sui thread in Node

70
00:03:37,670 --> 00:03:39,600
‫e sul pool di thread.

71
00:03:39,600 --> 00:03:41,663
‫Quindi resta sintonizzato per quello.

