NodeJS

Tour d’horizon

Christophe Porteneuve à #blendwebmix 2013

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–2013

  1. JSConf.EU 2009 : annonce officielle (0.1.17). Joyent.
  2. Juin 2010 : Nodejitsu
  3. Novembre 2010 : Express 1.0
  4. Février 2011 : version 0.4, 1ers usages prod
  5. Mai 2011 : npm 1.0
  6. Aujourd’hui : 42K+ modules dans npm, conférences JS et Node pratiquement toutes les semaines, partout dans le monde.

Node en prod

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

eBay (ql.io), LinkedIn (1, 2, 3, 4), Uber, MySpace, Mozilla (Persona), Klout, Yahoo! (Manhattan, Mojito, Cocktails…), Dow Jones, New York Times (parties), BBC (cœur), 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.

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

42K+ modules dans npm (~ +100/jour, leader)

~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

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

Merci !

@porteneuve

JS Attitude