node way

42
Node 技术栈实践 张宇 (pw) @ 猿题库

Upload: ethan-zhang

Post on 27-Jun-2015

2.255 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Node way

Node 技术栈实践张宇⾠辰 (pw) @ 猿题库

Page 2: Node way

后端

前端 ?Java/Python/PHP …

HTML/CSS/JavaScript…

Page 3: Node way

猿题库前端进化之路

Page 4: Node way

Node 实践中的那些坑

Page 5: Node way

后端

前端 ?Java/Python/PHP …

HTML/CSS/JavaScript…

Page 6: Node way

服务器 数据库浏览器 模板 静态资源

Page 7: Node way

服务器 数据库浏览器 模板 静态资源

后端 前端

Page 8: Node way

服务器 数据库浏览器 模板 静态资源

后端 前端

Page 9: Node way

服务器 数据库浏览器 模板 静态资源

后端 前端灰⾊色地带

Page 10: Node way

服务器 数据库 模板

后端 前端

⽤用接⼝口来解决问题

Page 11: Node way

服务器 数据库 模板

后端 前端

前端包圆

Page 12: Node way

猿题库前端进化之路

Page 13: Node way

CSS / JS / IMG

Java

HTML Template

猿题库

Page 14: Node way

CSS / JS / IMG

Java

HTML Tmpl

主站

CSS / JS / IMG

Java

HTML Tmpl

公务员

CSS / JS / IMG

Java

HTML Tmpl

司法考试

CSS / JS / IMG

Java

HTML Tmpl

⾼高考

Page 15: Node way

Java

主站

CSS / JS / IMG

Java

HTML Tmpl

公务员

Java

司法考试

Java

⾼高考

前端代码

Page 16: Node way

Java

主站

CSS / JS / IMG

Java

HTML Tmpl

公务员

Java

司法考试

Java

⾼高考

前端服务器

Node

Page 17: Node way

Java

主站

CSS / JS / IMG

Java

HTML Tmpl

公务员

Java

司法考试

Java

⾼高考

前端服务器

Node

后端前端 HTTP

Page 18: Node way

服务器 数据库 模板

后端 前端

前端包圆 (By Node)

Page 19: Node way

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

• ⼀一些⼯工具: 开发, 调试, 性能调优

Page 20: Node way

n

2n

2n

n

client api request

Node API ServerNginx

Page 21: Node way

Node API ServerNginxn

2n

2n

n

Nginx

client api request

Page 22: Node way

NginxNode

API Server API Server API Server

Nginx

10.0.1.3 yuantiku.com

/api

/

Page 23: Node way

http.globalAgent.maxSockets = Infinity;

Page 24: Node way

var agent = new http.Agent({ maxSockets: 2 }); !

req.request = request.defaults({ pool: agent });

Page 25: Node way

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

• ⼀一些⼯工具: 开发, 调试, 性能调优

Page 26: Node way

app.get('/foo', function (req, res) { throw new Error('foo'); }); !app.use(function (err, req, res, next) { res.send(500, err.message); });

Page 27: Node way

app.get('/bar', function (req, res) { process.nextTick(function () { throw new Error(‘bar'); // 异步函数中的异常 }); });

Page 28: Node way

process.on('uncaughtException', function () { return; });

Page 29: Node way

Express

Domain

http://lostjs.com/2014/01/25/handle-exception-in-node/

Page 30: Node way

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

• ⼀一些⼯工具: 开发, 调试, 性能调优

Page 31: Node way

var val = 'hello world'; function outer() { var val = 'bar'; return function inner() { return val; }; } global.inner = outer();

Page 32: Node way

var getUserData = (function () { var cache = {}; return function (userId, callback) { if (cache[id]) { process.nextTick(function () { callback(cache[id]); }); return; } getUser(id, function (data) { cache[id] = data; callback(data); }); }; }());

Page 33: Node way

var getUserData = (function () { var cache = new LRU({max: 100}); return function (userId, callback) { if (cache.has(id)) { var user = cache.get(‘id’); process.nextTick(function () { callback(user); }); return; } getUser(id, function (data) { cache.set(id, data); callback(data); }); }; }());

Page 34: Node way

app.get(‘/users/:id’, function (req, res) { getUser(function (req.param(‘id’), data) { user = data; getOrderByUser(user.id, function (order) { res.render({ user: user, order: order }); }); });});

Page 35: Node way

app.get(‘/users/:id’, function (req, res) { getUser(function (req.param(‘id’), data) { user = data; getOrderByUser(user.id, function (order) { res.render({ user: user, order: order }); }); });});

Page 36: Node way

app.get(‘/users/:id’, function (req, res) { getUser(function (req.param(‘id’), data) { var user = data; getOrderByUser(user.id, function (order) { res.render({ user: user, order: order }); }); });});

Page 37: Node way

app.get(‘/users/:id’, function (req, res) { getUser(function (req.param(‘id’), data) { var user = data; getOrderByUser(user.id, function (order) { res.render({ user: user, order: order }); }); });});

‘use strict’;

Page 38: Node way

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

• ⼀一些⼯工具: 开发, 调试, 性能调优

Page 39: Node way

• node

• pm2

• NODE_ENV

Page 40: Node way

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

• ⼀一些⼯工具: 开发, 调试, 性能调优

Page 41: Node way

• npm

• node inspector

• webkit-devtools-agent

• console.trace

Page 42: Node way

[email protected]@__pw__lostjs.com