Node way

Preview:

Citation preview

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

后端

前端 ?Java/Python/PHP …

HTML/CSS/JavaScript…

猿题库前端进化之路

Node 实践中的那些坑

后端

前端 ?Java/Python/PHP …

HTML/CSS/JavaScript…

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

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

后端 前端

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

后端 前端

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

后端 前端灰⾊色地带

服务器 数据库 模板

后端 前端

⽤用接⼝口来解决问题

服务器 数据库 模板

后端 前端

前端包圆

猿题库前端进化之路

CSS / JS / IMG

Java

HTML Template

猿题库

CSS / JS / IMG

Java

HTML Tmpl

主站

CSS / JS / IMG

Java

HTML Tmpl

公务员

CSS / JS / IMG

Java

HTML Tmpl

司法考试

CSS / JS / IMG

Java

HTML Tmpl

⾼高考

Java

主站

CSS / JS / IMG

Java

HTML Tmpl

公务员

Java

司法考试

Java

⾼高考

前端代码

Java

主站

CSS / JS / IMG

Java

HTML Tmpl

公务员

Java

司法考试

Java

⾼高考

前端服务器

Node

Java

主站

CSS / JS / IMG

Java

HTML Tmpl

公务员

Java

司法考试

Java

⾼高考

前端服务器

Node

后端前端 HTTP

服务器 数据库 模板

后端 前端

前端包圆 (By Node)

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

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

n

2n

2n

n

client api request

Node API ServerNginx

Node API ServerNginxn

2n

2n

n

Nginx

client api request

NginxNode

API Server API Server API Server

Nginx

10.0.1.3 yuantiku.com

/api

/

http.globalAgent.maxSockets = Infinity;

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

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

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

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

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

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

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

Express

Domain

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

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

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

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

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); }); }; }());

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); }); }; }());

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 }); }); });});

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 }); }); });});

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 }); }); });});

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’;

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

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

• node

• pm2

• NODE_ENV

那些坑

• HTTP

• 异常处理

• 内存泄露

• 多核优化, 部署

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

• npm

• node inspector

• webkit-devtools-agent

• console.trace

perfectworks@gmail.com@__pw__lostjs.com

Recommended