狠狠撸

狠狠撸Share a Scribd company logo
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 ServerNginx
n
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 = In?nity;
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

More Related Content

Node way