59
The First Experience Of 谢传贵 @十月光风 前端开发工程师 2011-07-29 11年7月29日星期五

A preliminary study of node js

Embed Size (px)

Citation preview

Page 1: A preliminary study of node js

The First Experience Of

谢传贵 @十月光风

前端开发工程师

2011-07-29

11年7月29日星期五

Page 2: A preliminary study of node js

Topic

• Professionalism in JavaScript

• Web Server and SSJS

• Understanding NodeJS

• Writing Code with NodeJS

• Demo

11年7月29日星期五

Page 3: A preliminary study of node js

The World's Most Misunderstood Programming Language

JavaScript

Has Become the World's Most Popular Programming Language

11年7月29日星期五

Page 4: A preliminary study of node js

The JavaScript Age

1991-1999 2000-2009 2010-Present

11年7月29日星期五

Page 5: A preliminary study of node js

The JavaScript Age

1991-1999HTML

2000-2009LAMP

2010-PresentJvaScript

11年7月29日星期五

Page 6: A preliminary study of node js

11年7月29日星期五

Page 8: A preliminary study of node js

Browser WarsBrowsers not only need to support the Web standards well, allowing developers to optimize, but also to do a little optimization of their own. JavaScript being a core component of Web 2.0, AJAX web sites has become part of the battleground.Each browser has their own JavaScript runtimes

more:http://upload.wikimedia.org/wikipedia/commons/7/74/Timeline_of_web_browsers.svg

11年7月29日星期五

Page 9: A preliminary study of node js

...

JavaScript Engine

11年7月29日星期五

Page 10: A preliminary study of node js

V8 C++

JaegerMonkey C++

JScript JSctipt.Net

Nitro C++

Karakan C++

...

JavaScript Engine

11年7月29日星期五

Page 11: A preliminary study of node js

Web Server

• Web服务(Apache/IIS/JBoss/Nginx)

--处理请求、线程、IO...

• 语言引擎(php/Asp/Java)

--面向开发者

11年7月29日星期五

Page 12: A preliminary study of node js

Web Server

• Web服务(Apache/IIS/JBoss/Nginx)

--处理请求、线程、IO...

• 语言引擎(php/Asp/Java/JavaScript)

--面向开发者

11年7月29日星期五

Page 13: A preliminary study of node js

Server-side JavaScript

11年7月29日星期五

Page 14: A preliminary study of node js

http://jaxer.org/https://developer.mozilla.org/En/JavaScript/Server-Side_JavaScript/Walkthrough

WebServer+SpiderMonkey

11年7月29日星期五

Page 15: A preliminary study of node js

浏览器渲染DOM的部分工作分担到服务器

11年7月29日星期五

Page 16: A preliminary study of node js

http://nodejs.org/

https://github.com/joyent/node

11年7月29日星期五

Page 17: A preliminary study of node js

Brand

11年7月29日星期五

Page 18: A preliminary study of node js

Trends

文本

http://www.google.com/trends?q=node.js%2C+phonegap&ctab=0&geo=all&date=all&sort=2

11年7月29日星期五

Page 19: A preliminary study of node js

Ryan Dahl

Blog: http://four.livejournal.com/

video:http://www.youtube.com/watch?v=jo_B4LTHi3I&feature=player_embedded

NodeJS是个好东西,不管你们信不信,反正我信了

11年7月29日星期五

Page 20: A preliminary study of node js

V8

thread pool

(libeio)

event loop

(libev)

Node bindings

Node standard library

C

JavaScript

NodeJS代码架构

11年7月29日星期五

Page 21: A preliminary study of node js

Why?

Node's goal is to provide an easy way to build scalable network programs.

--Ryan Dahl

11年7月29日星期五

Page 22: A preliminary study of node js

Whatʼs NodeJs ?• JavaScript Framework

• Server-side

• Uses V8

• Evented and non-blocking

• CommonJs

• Uses ECMAScript 5

• Http Libraries

• Module System

11年7月29日星期五

Page 23: A preliminary study of node js

NodeJs Choose?

http://code.google.com/p/v8/

11年7月29日星期五

Page 24: A preliminary study of node js

Google V8 JavaScript Engine

• It’s a VM!

• Developed by Google

• The team lead is Lars Bak (Sun’s Java VM & Smalltalk VM)

• No JIT, compiled to Assembler

11年7月29日星期五

Page 25: A preliminary study of node js

Evented

11年7月29日星期五

Page 26: A preliminary study of node js

Evented

Old (blocking) school:

<?php

$content = file_get_contents("/some/huge/file");

doThings($content); // Waiting, synchron

otherThing();

?>

11年7月29日星期五

Page 27: A preliminary study of node js

Evented

Evented I/O

file.read("/some/huge/file", function(data) {

// called after data is read

doThings(data);

});otherThing(); // execute immediately;

11年7月29日星期五

Page 28: A preliminary study of node js

Benefits

• Asynchronous programming

• Event-loops instead of threads

• Non-blocking

• Single-thread

11年7月29日星期五

Page 29: A preliminary study of node js

the advantages of Single-threaded performance

Nginx(single-thread) vs Apache(multi-thread)

http://blog.webfaction.com/a-little-holiday-present

11年7月29日星期五

Page 30: A preliminary study of node js

the advantages of Non-blocking

Nginx(non-blocking) vs Apache(blocking)

11年7月29日星期五

Page 31: A preliminary study of node js

Smaller is BetterSmaller is Better

concurrency

resp

onse

tim

e (m

s)

20

40

60

80

50 100 150 200 250 300

servernginxthintornadonode

11年7月29日星期五

Page 32: A preliminary study of node js

Smaller is Betterconcurrency=300, Smaller is Better

response size (bytes)

resp

onse

tim

e (m

s)

100

200

300

400

24 26 28 210 212 214 216 218

servernginxthintornadonode_buffer

11年7月29日星期五

Page 33: A preliminary study of node js

Ajax vs Comet

11年7月29日星期五

Page 34: A preliminary study of node js

完美的单线程?

11年7月29日星期五

Page 35: A preliminary study of node js

单线程的先天不足

• 操控多CPU的短板– 单线程程序只能在一个CPU上运行

• 可靠性!?

– 一个异常影响整个线程

11年7月29日星期五

Page 36: A preliminary study of node js

NodeJS的取舍

单线程,可靠性低,性能高多线程,可靠性高,性能低

11年7月29日星期五

Page 37: A preliminary study of node js

CommonJSjavascript: not just for browsers any more!

http://www.commonjs.org/

11年7月29日星期五

Page 38: A preliminary study of node js

• Modules

• Binary

• File system

• and many more!

CommonJS

A collection/library of standards

11年7月29日星期五

Page 39: A preliminary study of node js

CommonJS Module

• There should be a function require

• There should be a var called exports

11年7月29日星期五

Page 40: A preliminary study of node js

Module Example// math.js module exports.multiply = function(a, b) {

return a * b;}

// Some other file, using math.js // var math = require('./math'); var sys = require('sys');

sys.puts(math.multiply(12, 12));

11年7月29日星期五

Page 41: A preliminary study of node js

ECMAScript 5

11年7月29日星期五

Page 42: A preliminary study of node js

ECMAScript 5• Array

indexOf(), lastIndexOf()

forEach(), map(), reduce(), filter(), every(), some()

• JSON

JSON.parse(), JSON.stringify()

• Object.keys()

• Date.parse(),Date.now()

• __defineGetter__, __defineSetter__

• More: http://davidflanagan.com/Talks/es5/slides.html

11年7月29日星期五

Page 43: A preliminary study of node js

Digg in the node

10年12月17日星期五

Digg in the NodeJS

11年7月29日星期五

Page 44: A preliminary study of node js

Getting Start

$ git clone git://github.com/joyent/node.git $ cd node $ ./configure --prefix=$HOME/node $ make install

https://github.com/joyent/node/wiki/Installation

11年7月29日星期五

Page 45: A preliminary study of node js

Node Package Manage

https://github.com/isaacs/npm

11年7月29日星期五

Page 46: A preliminary study of node js

IDE base on nodeIDE base on node

http://www.cloud9ide.com/

10年12月17日星期五

http://cloud9ide.com/

11年7月29日星期五

Page 47: A preliminary study of node js

NodeJS 优秀的基础架构 给了JavaScript 更多表现空间

11年7月29日星期五

Page 48: A preliminary study of node js

NodeJS带来了...

• SSJS没有“跨浏览器”的烦恼

• DOM、BOM的完整支持

• jQuery和YUI3完全成为“中间件”

• js程序可以无缝移植到服务器端

• ...

11年7月29日星期五

Page 49: A preliminary study of node js

Hello Worldvar http = require('http');

http.createServer(function (req, res) {

res.writeHead(200, {'Content-Type': 'text/plain'});

res.end('Hello World\n');

}).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');

% node example.js

Server running at http://127.0.0.1:1337/

11年7月29日星期五

Page 50: A preliminary study of node js

NodeJS Modules

11年7月29日星期五

Page 51: A preliminary study of node js

Module Types

https://github.com/joyent/node/wiki/modules

2983

modules

11年7月29日星期五

Page 52: A preliminary study of node js

Rendering HTML- nodejs-dom

• jsdomhttps://github.com/tmpvar/jsdom

• node-htmlparserhttps://github.com/tautologistics/node-htmlparser

11年7月29日星期五

Page 53: A preliminary study of node js

• DOM 常规操作

• 选择器

• YUI Node API

Rendering HTML- nodejs-dom

11年7月29日星期五

Page 54: A preliminary study of node js

Want to see more?

10年12月17日星期五

Want to see more?

11年7月29日星期五

Page 55: A preliminary study of node js

Demo

• YUI3

• JQuery

• KISSY

• SEAJS

• YUI+YQL

• Open WeiBo

11年7月29日星期五

Page 56: A preliminary study of node js

YUI3 for NodeJS

http://github.com/yui/nodejs-yui3http://github.com/yui/nodejs-yui3

video:http://www.yuiblog.com/blog/2010/09/29/video-glass-node/

11年7月29日星期五

Page 57: A preliminary study of node js

YUI3var YUI = require("yui3").YUI;YUI().use('*',function(Y){

Y.log('hello jayli!');});

http://express.davglass.com/

11年7月29日星期五

Page 58: A preliminary study of node js

• http://metamarketsgroup.com/blog/node-js-and-the-javascript-age/

• http://en.wikipedia.org/wiki/JavaScript_engine

• http://en.wikipedia.org/wiki/Brendan_Eich

• http://javascript.crockford.com/popular.html

• http://en.wikipedia.org/wiki/List_of_JavaScript_engines

• ttp://www.yuiblog.com/blog/2010/05/20/video-dahl/

Links

11年7月29日星期五

Page 59: A preliminary study of node js

11年7月29日星期五