background preloader

Node.JS

Facebook Twitter

Introduction - Chrome V8. Welcome to the developer documentation for V8. V8 is Google's open source, high performance JavaScript engine. It is written in C++ and is used in Google Chrome, Google's open source browser. This documentation is aimed at C++ developers who want to use V8 in their applications, as well as anyone interested in V8's design and performance. This document introduces you to V8, while the remaining documentation shows you how to use V8 in your code and describes some of its design details, as well as providing a set of JavaScript benchmarks for measuring V8's performance.

About V8 V8 implements ECMAScript as specified in ECMA-262, 5th edition, and runs on Windows (XP or newer), Mac OS X (10.5 or newer), and Linux systems that use IA-32, x64, or ARM processors. V8 compiles and executes JavaScript source code, handles memory allocation for objects, and garbage collects objects it no longer needs. V8 enables any C++ application to expose its own objects and functions to JavaScript code. Understanding the node.js event loop. So the largest waste with current programming technologies comes from waiting for I/O to complete. There are several ways in which one can deal with the performance impact (from Sam Rushing): The second basis thesis is that thread-per-connection is memory-expensive: [e.g. that graph everyone showns about Apache sucking up memory compared to Nginx] Apache is multithreaded: it spawns a thread per request (or process, it depends on the conf).

You can see how that overhead eats up memory as the number of concurrent connections increases and more threads are needed to serve multiple simulataneous clients. Nginx and Node.js are not multithreaded, because threads and processes carry a heavy memory cost. They are single-threaded, but event-based. This eliminates the overhead created by thousands of threads/processes by handling many connections in a single thread. There is no way of making code run in parallel within a single request. First-class functions. E.g. I really enjoyed your article. Ed, Performance web Node.JS. Benchmarking Node.js - basic performance tests against Apache + PHP :: Change(b)log. Several days ago I have done few very basic performance tests to see how node.js server behaves compared to Apache when serving very simple pages.

All tests were executed on dual-core Intel T4200 2 GHZ machine with 4 GB RAM running Ubuntu 10.04 Lucid (with X). For comparison I have used node.js 0.1.103 on one side, and Apache 2.2.14 with prefork MPM and PHP 5.2.10 on the other, hitting them with ApacheBench 2.3 and total of 100,000 request with 1,000 concurrent requests during first test: ab -r -n 100000 -c 1000 <url> and then with total of 1,000,000 requests and 20,000 concurrent requests during the second one: ab -r -n 1000000 -c 20000 <url> Basic "Hello World" node.js server used for testing: and equally basic "Hello World" PHP file for Apache: Results 1) Total request: 100,000; concurrency level: 1,000 node.js results: Apache results: CPU Usage: node.js vs Apache/PHP in ApacheBench test - 100k requests, 1k concurrent requests 2) Total requests: 1,000,000; concurrency level: 20,000 Conclusions. Node.js.

Node.js : le livre du débutant. JavaScript et vous▲ Avant de rentrer dans les détails techniques, prenons un moment pour parler de vous et de votre rapport avec JavaScript. Ce chapitre va vous servir à déterminer s'il vous est utile de continuer la lecture de ce livre. Si vous êtes comme moi, vous avez commencé le développement Web il y a quelques années en écrivant des pages HTML. Vous avez commencé à utiliser cette chose étrange appelée JavaScript, mais juste pour ajouter un peu d'interactivité ici ou là.

Ce que vous vouliez était surtout apprendre à créer des pages Web complexes ; vous avez donc appris des langages comme PHP, Ruby, Java pour écrire du code serveur. Malgré tout, vous avez gardé un œil sur JavaScript et avez découvert, avec l'apparition de jQuery, Prototype ou autres bibliothèques, que JavaScript pouvait réaliser des choses avancées, bien au-delà de simples window.open(). Puis vint Node.js : du JavaScript côté serveur ! Vous avez donc décidé de vous intéresser aux nouveautés de ce vieux JavaScript.

Une introduction à node.js. Node.js est un framework implémentant, coté serveur, la version 8 du moteur Javascript de Google (pour une présentation rapide, je vous conseille de parcourir ces quelques slides). L'objectif de ce billet est d'installer Node.js sur votre machine GNU/Linux et d'exécuter votre premier programme (hello.js). Il n'existe pas, à l'heure à laquelle je rédige ce billet, de "package" officiel de Node.js pour Debian/Ubuntu (voir le chapitre suivant pour une installation depuis un PPA). L'installation est cependant assez simple. Pour installer la dernière version (stable) depuis le dépôt officiel GIT, il suffit de saisir les commandes suivantes: mkdir ~/src cd ~/src git clone cd ~/src/node git checkout v0.8.0 sudo mkdir /opt/node .

/configure --prefix=/opt/node make sudo make install echo 'export PATH=$PATH:/opt/node/bin' >> ~/.profile echo 'export NODE_PATH=/opt/node:/opt/node/lib/node_modules' >> ~/.profile source ~/.profile Puis l'installation de Nodejs et NPM: Node.js partie 1 - Tout ce que vous devez savoir sur Node.js. Parmi les nombreuses technologies qui me passionnent actuellement, Node.js tient une place importante. Et pour plusieurs raisons : développement Javascript côté serveur, gestion des entrées/sorties de manières non bloquantes, communauté très présente avec de nombreux modules comme Socket.IO et bien d’autres choses encore. C’est pour toutes ces raisons, et aussi parce que la nouvelle version 0.4.0 vient de sortir, que Web Tambouille vous propose une série de 4 billets consacrée exclusivement à votre futur serveur préféré : Node !

Et cela commence dès aujourd’hui avec une petite introduction générale du serveur, ses concepts, les interviews et autres vidéos à ne pas manquer, les liens à connaître… bref un condensé de tout ce que vous devez absolument savoir sur Node ! Présentation Node s’appuie sur V8, le moteur Javascript de Google utilisé dans Chrome, qui fait partie des moteurs Javascript les plus puissants du marché actuellement. Prenons l’exemple du serveur Apache. Juste pour pinailler. Introduction à node.js - Damien MATHIEU.

Node.JS, Performances, WebSocket, et clustering. Slide - Socket.IO. Node.JS - nodejs.org Un exécutable: node Un moteur performant: v8 Un cœur minimal: KISS Une API filesystem & network: HTTP/1.1 Mais surtout une API asynchrone et un single-thread event loop En tous cas c'est plus facile qu'Erlang, et vachement plus puissant que PHP Node.JS - Installation Node.JS - HTTP/1.1 Les navigateurs supportent tous partiellement HTTP/1.1. Idem pour les serveurs. Un nouveau verbe: UPGRADE Le cache: ETag, If-Modified-Since Réseau: Connexions persistantes, Pipelining, Chunk Transfer Encoding... Node.JS supporte tout le protocole. Node.JS - Modules Don't Repeat Yourself Don't Reinvent the Wheel Learn 2 Search, mother fucker!

Une implémentation de CommonJS: require() Un dépôt de modules: NPM Un dépôt de modules: NPM There's a module for that Node.JS - API asynchrone Single-Thread Event Loop: l'analogie du roi Le roi ordonne à ses messagers, qui reviennent dès qu'ils le peuvent, et le roi traite les réponses au fur et à mesure, une à la fois.

Single-Thread et performances Web Sockets. Slide - Performances. Node.JS - nodejs.org Un exécutable: node Un moteur performant: v8 Un cœur minimal: KISS Une API filesystem & network: HTTP/1.1 Mais surtout une API asynchrone et un single-thread event loop En tous cas c'est plus facile qu'Erlang, et vachement plus puissant que PHP Node.JS - Installation Node.JS - HTTP/1.1 Les navigateurs supportent tous partiellement HTTP/1.1. Idem pour les serveurs. Un nouveau verbe: UPGRADE Le cache: ETag, If-Modified-Since Réseau: Connexions persistantes, Pipelining, Chunk Transfer Encoding...

Node.JS supporte tout le protocole. Node.JS - Modules Don't Repeat Yourself Don't Reinvent the Wheel Learn 2 Search, mother fucker! Une implémentation de CommonJS: require() Un dépôt de modules: NPM Un dépôt de modules: NPM There's a module for that Node.JS - API asynchrone Single-Thread Event Loop: l'analogie du roi Le roi ordonne à ses messagers, qui reviennent dès qu'ils le peuvent, et le roi traite les réponses au fur et à mesure, une à la fois. Single-Thread et performances Web Sockets. Slide - Cluster. Node.JS - nodejs.org Un exécutable: node Un moteur performant: v8 Un cœur minimal: KISS Une API filesystem & network: HTTP/1.1 Mais surtout une API asynchrone et un single-thread event loop En tous cas c'est plus facile qu'Erlang, et vachement plus puissant que PHP Node.JS - Installation Node.JS - HTTP/1.1 Les navigateurs supportent tous partiellement HTTP/1.1.

Idem pour les serveurs. Un nouveau verbe: UPGRADE Le cache: ETag, If-Modified-Since Réseau: Connexions persistantes, Pipelining, Chunk Transfer Encoding... Node.JS supporte tout le protocole. Node.JS - Modules Don't Repeat Yourself Don't Reinvent the Wheel Learn 2 Search, mother fucker! Une implémentation de CommonJS: require() Un dépôt de modules: NPM Un dépôt de modules: NPM There's a module for that Node.JS - API asynchrone Single-Thread Event Loop: l'analogie du roi Le roi ordonne à ses messagers, qui reviennent dès qu'ils le peuvent, et le roi traite les réponses au fur et à mesure, une à la fois. Single-Thread et performances Web Sockets. Node.js. Package.json dependencies done rightblog. This is part one of a three part post on npm Dependency management.

Need I say more? Entire developer ecosystems live and die by how dependency management works. Ask a Ruby developer what they would do without RubyGems, or ask (most) Java developers how to get things done without Maven. Npm recently received a pretty serious makeover in Version 1.0. Npm installs modules and applications based on an interpretation of the package.json specification. How npm works with dependencies in a package.json manifest. Tldr;? There are two separate (but equally important) entities that must have specified versions in a package.json manifest: modules dependencies and node version. What is slightly modified about it? Ok, so npm uses semver, awesome. The versions for both the dependencies and node properties in the example above are interpreted using node-semver, a library created and maintained by isaacs for working with semantic version strings.

Now suppose that we install the above example using npm: Express - node web framework. Écrire un module pour Node.js. $ mkdir sleep-sort $ cd sleep-sort $ git init Parfait, je viens d'initialiser un dépôt et je n'ai plus qu'à le remplir. J'aime beaucoup le concept de Readme Driven Development, dans cet esprit, je vais donc commencer par créer un fichier Readme. $ vi Readme.md $ cat Readme.md `sleep-sort` works by creating a task for every number to be sorted. The task will "sleep" n number of milliseconds and then push the number onto an array. When all tasks are done, the array is returned sorted. $ git add . $ git commit -m 'Added Readme' J'ai donc mis en place un dépôt local et fait un commit du fichier Readme.

. $ gh create-from-local Counting objects: 3, done. Le code ci-dessus a créé le dépôt distant, envoyé les modifications locales et affecté l'origine. Même si dans cet exemple le module sera relativement simple, je vais créer des répertoires pour y placer les différents fichiers que je vais utiliser. Je crée maintenant les fichiers. Très bien. J'installe ces dépendances avec la commande npm install. EJS - Templating for Node.JS.