Vous êtes sur la page 1sur 9

Node.js : mais quoi a sert ?

Et si on commenait par rpondre toutes ces questions qui vous


taraudent :

PourquoiNode.jssembletilaussiapprcidesdveloppeursweb?

PourquoiavoirutilisunlangagecommeJavaScript?Jecroyaisquec'taitjustepourfairedeseffets
danssapageweb?

D'ovientcetterapiditsupposedeNode.js?Aquoiapeutmeservir?

Estcequecetrucestmature?Quil'utilise(partdesgeeksbarbus)?Devraisjel'utilisermoiaussi?

Allez,pasdechichis,onvarpondretoutaetmmeplusdanscepremierchapitre.

Si l'aventure vous tente, vous pourrez passer la suite avec moi et


installer Node.js sur votre machine !
Du JavaScript " la papa" Node.js
OK, j'avoue, l'expression "JavaScript la papa" est un peu forte.
Mais il y a du vrai l-dedans : JavaScript a eu plusieurs vies. Il a eu
mauvaise presse. On l'a considr comme un "petit truc parfois bien
pratique", longtemps pour "faire des effets dans sa page web". Or,
JavaScript est avant tout un langage. Un langage au mme titre que le C,
Ruby, PHP et bien d'autres.
Aujourd'hui, JavaScript est de retour et il prend sa revanche.
En quelque sorte, les dveloppeurs sont en train de dcouvrir que ce
langage qu'ils ont longtemps ignor, parfois mme mpris, cache en fait
bien son jeu.
Non,JavaScriptn'estpasjusteunpetitlangageutilitaire.
Oui,JavaScriptestunlangagepart,quis'utilisevraimentdiffremmentdeJava,duCetd'untasd'autres
langages.
Oui,JavaScriptpeuttrecompliquutiliser,maisreclederriread'unevraiepuissance.
Alorsquecelangageatcren1995(laprhistoiredel'informatique,vousvousrendezcompte!),iladepuis
bienvolu.Jevousinvite(re)lirelapetitehistoiredeJavaScriptraconteparlescompresThundersebet
Nesquik69dansleurcourssurJavaScript(chapitred'introduction).
JevousdisaisqueJavaScripttaitunlangagequi,pourmoi,avaitconnuplusieursvies.Poursituerleschoses,je
diraismmequ'ilaconnu3vies:
1.

Danslesannes90,onparlaitdeDHTML(DynamicHTML).Onutilisaitenfaitlestoutespremires
versionsdeJavaScriptpourfairedespetitseffetsdanssespagesweb:afficheruneimagelorsd'unclic
surunboutonparexemple.C'taitl'poquedeNetscapeetd'InternetExplorer5.5(monDieuame
rajeunitpas!).

2.

Danslesannes2000,onacommencutiliserlelangagepourcrerdesinterfacesctclient.C'estl
quedesbibliothquescommejQueryouMootoolssontapparues.Aujourd'hui,cetusagedeJavaScript
esttrsrpanduetmature.Onaprisl'habitudedemanipulerleDOM(DocumentObjectModel)pour
affectersesbalisesHTMLenJavaScriptetleurfairesubirtoutessortesdetraitements.

3.

Puis,auxalentoursde2010,JavaScriptestentrdansunenouvellere.Googleacommencrendrele
langagebeaucoupplusrapideavecl'apparitiondunavigateurGoogleChrome.Aveccenavigateurest
nlemoteurd'excutionV8quiaconsidrablementpermisd'acclrerl'excutiondecodeJavaScript
(j'yreviendrai).DesoutilscommeNode.jssontensuiteapparus.Lesbibliothquesdontlenomfinit
par.jssesontmultiplies:Backbone.js,Ember.js,Meteor.js.JavaScriptal'airnouveaucool...et
sembleenmmetempspluscompliququ'iln'yparaissaitaupremierabord.

Les 3 vies de JavaScript

Soyons clairs : jQuery n'est pas mort et a ne veut pas dire qu'il faut
cesser de l'utiliser (par contre DHTML et Netscape sont bel et bien morts
eux
). Les nouveaux outils JavaScript comme Node.js font des choses
trs diffrentes de jQuery et consorts. Les deux peuvent tout fait se
complter.
Bon,maisaapportequoiconcrtementNode.js?

Node.js nous permet d'utiliser le langage JavaScript sur le serveur...


Il nous permet donc de faire du JavaScript en dehors du navigateur !
Node.js bnficie de la puissance de JavaScript pour proposer une toute
nouvelle faon de dvelopper des sites web dynamiques.
Je vous propose justement maintenant de rentrer dans le dtail du
fonctionnement de Node.js.
Node.js : le JavaScript ct serveur
Jusqu'ici, JavaScript avait toujours t utilis du ct du client, c'est--dire
du ct du visiteur qui navigue sur notre site. Le navigateur web du
visiteur (Firefox, Chrome, IE...) excute le code JavaScript et effectue des
actions sur la page web.
Le schma classique : PHP sur le serveur, JavaScript chez le client
Qu'estcequichangeavecl'arrivedeNode.js?
OnpeuttoujoursutiliserduJavaScriptctclientpourmanipulerlapageHTML.Ca,anechangepas.
Parcontre,Node.jsoffreunenvironnementctserveurquinouspermetaussid'utiliserlelangageJavaScript
pourgnrerdespagesweb.Engros,ilvientenremplacementdelangagesserveurcommePHP,JavaEE,etc.

Avec Node.js, on peut aussi utiliser du JavaScript sur le serveur !

PourquoiNode.jssembletilsidiffrent?Parcequ'ilutiliseJavaScript?
Oui,etparcequeJavaScriptestunlangagebassurlesvnements,doncNode.jsestluimmebassurles
vnements.Ducoup,c'esttoutelafaond'criredesapplicationswebquichange!Etc'estdelqueNode.js
tiretoutesapuissanceetsarapidit.
AvecNode.js,vouspouvezcrerdesapplicationsrapidescomme:

UnserveurdeChat

Unsystmed'uploadtrsrapide

...etdefaongnralen'importequelleapplicationquidoitrpondredenombreusesrequtes
rapidementetefficacement,entempsrel

Node.jsn'estpasunframework.Node.jsestunenvironnementtrsbasniveau.Ilserapprochedoncenquelque
sorteplusduCquedePHP,RubyonRailsouDjango.Voilpourquoiiln'estpasvraimentconseillaux
dbutants.
Notezqu'ilexistedesframeworkswebcommeExpressquisontbasssurNode.js.Ilsnouspermettentd'viter
lestchesrptitivesquinoussontimposesparlanaturebasniveaudeNode.js,maisilsrestentquandmme
pluscomplexesutiliserquedeslangagescommePHP.
JavaScriptn'estpasvraimentunlangageorientobjet,ilestdonctrsloindeJava,RubyouPython.Ecrireune
applicationavecNode.jsdemandeunegymnastiqued'espritcompltementdiffrente!C'estunpeudroutantau
dbutpourtoutvousavouer,maisquandoncommencematrisercetoutil,onsesentunpeucommesion
venaitd'avoirdenouveauxsuperpouvoirsqu'onnesouponnaitpas.
VoilpourquoitantdegeeksbarbussontexcitsproposdeNode.js!

Pourquoi Node.js est-il rapide ?


SiNode.jsestrapide,celatientprincipalementdeuxchoses:lemoteurV8etsonfonctionnementnon
bloquant.

Le moteur V8
Node.jsutiliselemoteurd'excutionultrarapideV8deGoogleChrome.CemoteurV8avaitfaitbeaucoupparler
deluilasortiedeGoogleChrome,carc'estunoutilopensourcecrparGooglequianalyseetexcutedu
codeJavaScripttrsrapidement.

Le logo du moteur JavaScript V8 de Google


Jusqu'lasortiedeChrome,laplupartdesnavigateurslisaientlecodeJavaScriptdefaonpeuefficace:lecode
taitluetinterprtaufuretmesure.LenavigateurmettaitbeaucoupdetempslireleJavaScriptetle
transformerencodemachinecomprhensiblepourleprocesseur.
LemoteurV8deGoogleChrome,quiestrutilisiciparNode.js,fonctionnecompltementdiffrent.Trs
optimis,ilfaitcequ'onappelledelacompilationJIT(JustInTime).IltransformelecodeJavaScripttrs
rapidementencodemachineetl'optimisemmegrcedesprocdscomplexes:codeinlining,copyelisionet
j'enpasse.
Vousn'avezpasbesoindeconnatrelefonctionnementdeV8pourutiliserNode.js.Retenezjustequ'ilpermetde
rendrel'excutiondecodeJavaScriptultrarapide(etquelesdveloppeurschezGooglequil'ontconusontdes
bonsvraisbarbus

).

Le modle non bloquant


CommeJavaScriptestunlangageconuautourdelanotiond'vnement,Node.jsapumettreenplaceune
architecturedecodeentirementnonbloquante.
Maisaufait,connaissezvousladiffrenceentreuncodebloquantetuncodenonbloquant?Hmmm,unpeu
d'explicationsnepeuventpasfairedemaljevois!

Modle bloquant vs modle non bloquant


Imaginezunprogrammedontlerleestdetlchargerunfichierpuisdel'afficher.Voicicommentoncriraitle
codedansunmodlebloquant:
TlchargerunfichierAfficherlefichierFaireautrechose
Lesactionssonteffectuesdansl'ordre.Ilfautlireleslignesdehautenbas:
1.

LeprogrammevatlchargerunfichiersurInternet

2.

Leprogrammeaffichelefichierl'utilisateur

3.

Puisensuiteleprogrammepeutfaired'autreschoses(effectuerd'autresactions)

Maintenant,onpeutcrirelemmecodesurunmodlenonbloquant:
TlchargerunfichierDsquec'esttermin,afficherlefichier
Faireautrechose
Leprogrammen'excuteplusleslignesdansl'ordreoellessontcrites.Ilfaitceci:
1.

Leprogrammelanceletlchargementd'unfichiersurInternet

2.

Leprogrammefaitd'autreschoses(leprogrammesuitsoncours)

3.

Dsqueletlchargementesttermin,leprogrammeeffectuelesactionsqu'onluiavaitdemandes:il
affichelefichier

Schmatiquement,l'excutionduprogrammepeutdoncsereprsentercommea:

Le modle non bloquant en programmation


C'estjustementcommeaquefonctionneNode.js.Dsquel'vnement"Fichiertlcharg"apparat,une
fonctionappelefonctiondecallbackestappeleeteffectuedesactions(ici,lafonctiondecallbackaffichele
fichier).

Le modle non bloquant avec Node.js


Bon,etavecduvraicodeadonnequoi?VoiciunexempledeprogrammeNode.jsquitlchargeunfichiersur
Internetetaffiche"Fichiertlcharg!"quandilatermin:
request('http://www.site.com/fichier.zip',function(error,response,body)
{
console.log("Fichiertlcharg!");
});
console.log("Jefaisd'autreschosesenattendant...");
Larequtedetlchargementestlanceenpremier.Ensuite,leprogrammefaitd'autreschoses(ici,ilafficheun
messagedanslaconsole,maisilpourraitfairen'importequoid'autre).Dsqueletlchargementesttermin,le
programmevalaligne2etaffiche"Fichiertlcharg!".

Mais...Commentamarche?Jevoisunefonctionenparamtredelafonctionrequest!C'estunefonctiondans
unefonction,ausecourscesbarbussontfous!
Holapasdepanique.
Cequevousvoyezlestunefonctiondecallback.EnJavaScriptonpeuttoutfait
envoyerunefonctionenparamtred'uneautrefonction.Celasignifieici:"Excutecettefonctionquandle
tlchargementesttermin".
Ici,lafonctionn'apasdenom.Onditquec'estunefonctionanonyme.Maisonpourraitdcomposercecode
commececi,lersultatseraitidentique:
//Rsultatidentiqueaucodeprcdent

varcallback=function(error,response,body){
console.log("Fichiertlcharg!");
});

request('http://www.site.com/fichier.zip',callback);
console.log("Jefaisd'autreschosesenattendant...");
Lafonctiondecallbackestenregistredansunevariable.Commetouteslesfonctions,ellen'estpasexcute
tantqu'onnel'apasappele.
Ensuite,onenvoiecettefonctiondecallbackenparamtredelafonctionrequest()pourdire:"Dsquela
requtedetlchargementesttermine,appellecettefonctiondecallback".
Enpratique,lesdveloppeursJavaScriptmettentrgulirementdesfonctionsanonymesdirectementl'intrieur
d'autresfonctionsenparamtre,commedansmonpremiercode.C'estunpeutrangeaudbutmaisons'yfait
vite!
Jenevoispaspourquoiarendraitleprogrammeplusrapide.J'ail'impressionquealerendsurtoutplus
compliqu!
JevousavaisditqueNode.jsn'taitpassimple,maislejeuenvautlachandelle!Vousallezcomprendre
pourquoi.Imaginezqu'ondemandeletlchargementde2fichiersNode.js:
varcallback=function(error,response,body){
console.log("Fichiertlcharg!");
});

request('http://www.site.com/fichier.zip',callback);
request('http://www.site.com/autrefichier.zip',callback);
Silemodleavaittbloquant,leprogrammeaurait:
1.

Lancletlchargementdufichier1,etattenduqu'ilsetermine...

2.

...puislancletlchargementdufichier2,etattenduqu'ilsetermine.

Or,avecNode.js,lesdeuxtlchargementssontlancsenmmetemps!Leprogrammen'attendpaslafindu
premiertlchargementpourpasserl'instructionsuivante.
Ducoup,letlchargementdes2fichiersautotalvabeaucoupplusvitepuisqueleprogrammefaitles2la
fois:

En modle non bloquant (comme Node.js), les 2 fichiers sont


tlchargs en mme temps et l'ensemble finit plus vite
Danslesapplicationsweb,ilestcourantd'avoirdesoprationslonguesetbloquantescomme:

Lesappelsauxbasesdedonnes

Lesappelsdesservicesweb(ex:l'APIdeTwitter)

Node.jsnousvitedeperdredutempsennouspermettantdefaired'autreschosesenattendantquelesactions
longuessoienttermines!

InstallerNode.js
Voustesconvaincus?VousvoulezvousmettreNode.js?
Trsbien!N'attendonspasalors,etinstallonslabte!
Danscechapitre,nouscouvrironsl'installationpourchaqueOS:

Windows

MacOSX

Linux

Vousdevezjustelirelasectionquicorrespondvotresystmed'exploitation.Iln'yaurariendebiendifficileici
rassurezvous.
Ensuite,noustesteronsunetoutepremireapplicationtrssimplepourvrifierqueNode.jsestbieninstallet
fonctionnecorrectement.Cettederniresectiondoitvidemmenttreluepartoutlemondesivousvouleztre
prtspourleprochainchapitre.

InstallationdeNode.jssousWindows
PourinstallerNode.jssousWindows,ilsuffitdetlchargerl'installeurquiestpropossurlesitedeNode.js.
CliquezsimplementsurlelienInstall.
Vouspouvezaussivousrendresurlapagedestlchargementspouravoirplusd'options:

LapagedetlchargementdeNode.js

Vouspouveztlchargersoitle.msi,soitle.exe(lersultatseralemme).Prenezlaversion64bitssivousavez
unWindows64bits(casdelaplupartdesPCrcents).
Dansledoute,prenezlaversion32bits.
Lancezensuitel'installeur:
InstallationdeNode.js

Aprsquelquescransclassiquesonvousdemanderacequevousvoulezinstaller.Jevousinvitetoutlaisser
coch:
Choixdeslmentsinstaller

L'installationselanceensuite.Elleneprendquequelquessecondes!
L'installationesttermine!

Alafin,onvousditqueNode.jsestinstall...oui,maiso?Commentamarche?
Enfait,vousdevriezvoiravoir2programmesinstalls:

Node.js:c'estl'inteprteurdecommandesdeNode.js(dontnousparleronslafindecechapitre).Nous
l'utiliseronsassezpeuenpratique.IlserttesterdescommandesJavaScript.

Node.jscommandprompt:c'estuneconsoledeWindowsconfigurepourreconnatreNode.js.C'est
parlquevouspasserezpourlancervosprogrammesNode.js,c'estdonccequenousutiliseronsleplus
souvent.
Node.jsL'interprteurNode.jssousWindows(serapeuutilis)

Node.jscommandprompt

LaconsoleNode.js(serafrquemmentutilise)

InstallationdeNode.jssousMacOSX
SivoustessousMacOSX,vouspouvezcliquersurlelien"Install"surlapaged'accueildeNode.js.
Sivousvoulezplusd'options,affichezlapagedestlchargements:
LapagedetlchargementdeNode.js

Lemieuxestdeprendrel'installeur(fichier.pkg).Ilouvreunassistantd'installation,danslequelilsuffitde
cliquerfrntiquementsur"Suivant","Suivant","Suivant","Terminer".

L'installationdeNode.jssousMacOSX

Unefoisl'installationtermine,vouspouvezvrifierqueNode.jsfonctionnecorrectemententapantla
commandenodedanslaconsole.OuvrezunefentredeTerminal(leTerminaltantinstallpardfautsousMac
OSX),enallantdansleFinder,section"Applications","Terminal".Jevousconseilledemettreunraccourci
dansledock!
Tapezquelquescommandescommenodev(pouravoirlenumrodeversion)ounodetoutcourtpourlancer
l'interprteurinteractif.
ExcutiondeNode.jsdansleTerminal

Lorsquel'interprteurestlanc,vouspouveztaperdescommandesJavaScriptetobtenirunerponse.Ici,par
exemple,j'aidemandcombienfont1et1.
Pourquitterl'interprteur,faitesCtrl+D(c'estlacommandeclassiquequidemandequitteruninterprteur
sousLinuxetMac).
Rassurezvous,nousn'crironspasnosprogrammesNode.jsldedans!Canousserticisurtoutpourfairedes
tests.
Enpratique,nousallonscriredesfichiers.jsetdemanderNodedelesexcuter.Nousverronsaunpeuplus
loin.

InstallationdeNode.jssousLinux
SousLinux,commed'habitude,vousavezdeuxchoix:

Lamthodewarrior(

Lamthodedouce,quiconsisteutiliserlegestionnairedepaquetsdesadistribution.

),quiconsistetlchargerlessourcesetlescompiler.

L,c'estunequestiondegot.Jen'airiencontrelamthodewarrior(moiaussijesais
tapermake,makeinstall
),maiscommej'aiengnralmoinsdeproblmesdeconfigurationavecla
mthodedouce,jeprfrepasserparungestionnairedepaquets.
SousUbuntuparexemple,vousdevrezrentrerlescommandessuivantes:
sudoaptgetinstallpythonsoftwarepropertiespythong++makesudoadd
aptrepositoryppa:chrislea/node.jssudoaptgetupdatesudoapt
getinstallnodejs
Notezquepouravoirlacommandeaddaptrepositoryilvousfaudrapeuttretlchargersoftwareproperties
common:sudoaptgetinstallsoftwarepropertiescommon
Etvoilletravail!PourvrifierqueNodeestbieninstall,tapezquelquescommandesdanslaconsolecomme:
nodevnode

LapremireaffichelenumrodeversiondeNode.jsquevousavezinstall.
Lasecondelancel'interprteurinteractifdeNode.js.VouspouvezytaperducodeJavaScript(essayez
simplementdetaper"1+1"pourvoir).Poursortirdel'interprteur,faitesCtrl+D.
Rassurezvous,nousn'crironspasnosprogrammesdansl'interprteurinteractif.Nouscreronspluttdes
fichiers.jsetdemanderonsNodedelesexcuter.
DepuislesversionslesplusrcentesdeNode.js,ilfautsavoirqueNPMestinstallenmmetemps
automatiquement.NPMestlegestionnairedepaquetsdeNode.js(c'estunpeul'quivalentdeapt,maispourles
extensionsNode.js).NPMestvraimentunoutilformidablequinouspermetd'tendrelespossibilitsdeNode.js
l'infini,nousledcouvrironsunpeuplustard.

TesterNode.jsavecunprogrammeminimal
IlesttempsdevrifierqueNode.jsfonctionnebien!Nousallonscrireuntouttoutpetitprogrammepour
commencer,quisecontented'afficherunmessagedanslaconsole.Ceseral'occasiondevoircomment
fonctionnel'excutiondefichiers.jsavecNode.
Pourcommencer,ouvrezvotrediteurdetextefavori(vim,Emacs,SublimeText,Notepad++...)etrentrezle
codeJavaScriptsuivant:
console.log('BienvenuedansNode.js!');
Enregistrezvotrefichiersousl'extension.js.Parexempletest.js.
Ensuite,ouvrezuneconsoledansledossierosetrouvevotrefichiertest.jsetentrezla
commandenodetest.js.Vousdevriezavoirlersultatsuivantdanslaconsole:
$nodetest.jsBienvenuedansNode.js!
Bravo,vousavezcrvotretoutpremierprogrammeNode.js!
Bon,c'taitvraimentcequ'onpouvaitfairedeplussimple.Onasimplementdemandcrireunmessagedans
laconsole.
VousavezvuquepourlancerunprogrammeNode.jsilsuffisaitd'indiquerlenomdufichier.jsexcuter.Vous
saveztoutcequ'ilfautpourlemoment!
Dansleprochainchapitre,onattaqueleschosessrieuses:onvacrernotrepremirevraieapplicationNode.js.
Attention,avasecorser!

Vous aimerez peut-être aussi