Upload
ethan-zhang
View
2.255
Download
2
Tags:
Embed Size (px)
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
[email protected]@__pw__lostjs.com