NodeJS

Tour d’horizon

Christophe Porteneuve à Mix-IT 2014

Salut

Moi c’est Christophe

JS Attitude, Git Attitude

Paris Web, toussa…

@porteneuve

Pourquoi Node ?

JS === langage n°1 (si) (si, si)

Langage extrêmement puissant + en forte évolution

Changement de modèle I/O pour plus de performance

Léger mais ultra-rapide

Capitalisation des compétences

Que du bonheur :-)

2009–2014

  1. 11/2009 : annonce officielle (Ryan Dahl @ JSConf.EU)
  2. 06/2010 : Nodejitsu
  3. 11/2010 : Express 1.0
  4. 05/2011 : npm 1.0
  5. 12/2011 : Même MS Azure prend en charge Node.js
  6. 2013 : déferlante de gros usages en production (eBay, PayPal, LinkedIn, Walmart, IBM…). Support officiel dans Visual Studio.
  7. Aujourd’hui : 70K+ modules dans npm, Top-5 PaaS, conférences JS/Node pratiquement toutes les semaines.

Node en prod

Nombreux très gros sites et systèmes basés sur Node

Walmart, eBay, LinkedIn, PayPal, IBM, Airbnb, Uber, Medium, Groupon, MySpace, Mozilla, Yahoo!, Klout, Dow Jones, New York Times, BBC, Transloadit, Iris Couch, Segment.io Apiary.io…

Développement sponsorisé par Joyent. Formation et consulting haut de gamme initiés par The Node Firm.

En fait, regardez ça, ça calme. Et ça aussi.

Hébergement

Aucun souci sur du dédié, évidemment.

Pour du PaaS, on a l’embarras du choix :

Joyent, Nodejitsu, Heroku, EngineYard, Azure, StrongLoop et plein d’autres…

Écosystème

riche et vivant

70K+ modules dans npm (~ +176/jour, leader)

~7,5M downloads/jour

Les grandes lignes

Evented

JavaScript reste intrinsèquement mono-thread

(on a plein d’options pour exploiter le multi-core, ceci dit)

Boucle d’événements + code asynchrone

Montée en charge bien supérieure à du multi-thread : à partir d’un haut niveau de concurrence (milliers de connexions), un serveur asynchrone non-bloquant « gagne » forcément.

Flux

Le cœur de Node, c’est de l’opti d’I/O

Réseau, FileSystem, etc.

Infra riche et puissante de flux

Binaire/texte (UTF-8 & cie), buffer/direct…

Pipes, backpressure, etc. Composable, surpuissant.

CommonJS

Avec Node, tout fichier est un module isolé.

Dépendances explicites synchrones avec require('…')

Enfin du code structuré, modulaire, découpé…

Ça + chemins intelligents = la fête

Explicite

Pas de scope magique, d’identifiants inattendus, etc.

À la base, explicite partout plutôt que CoC

Du besoin de require au design des API et modules majeurs

Prise en main moins dure pour les nouveaux : moins besoin de fouiller dans une tonne de docs et conventions, pas d’effet de surprise.

Petits modules ciblés

Philosophie Unix

Faire une seule chose et la faire bien

Composition pour traiter des besoins riches

Certains modules npm tiennent en une fonction !

Démo

Apprendre

Node School

Stream Handbook

Nodestreams

CodeSchool

How To Node?

Docs officielles

Et bien sûr…

(Obligatory shameless plug)

Formation Node.js chez JS Attitude
(prochaine inter-entreprises en septembre. Intras possibles avant !)

Merci !

@porteneuve

JS Attitude