SlideShare 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 = 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

More Related Content

PDF
深入淺出 Web 容器 - Tomcat 原始碼分析
PPTX
180518 ntut js and node
PDF
Wind.js无障碍调试与排错
PDF
JavaScript现代化排错实践
PDF
OpenEJB - 另一個選擇
PDF
The Evolution of Async Programming (GZ TechParty C#)
PDF
Node.js开发体验
PDF
论 Python 与设计模式。
深入淺出 Web 容器 - Tomcat 原始碼分析
180518 ntut js and node
Wind.js无障碍调试与排错
JavaScript现代化排错实践
OpenEJB - 另一個選擇
The Evolution of Async Programming (GZ TechParty C#)
Node.js开发体验
论 Python 与设计模式。

What's hot (20)

PPT
页游开发中的 Python 组件与模式
PDF
Python 于 webgame 的应用
PPTX
jQuery源码学习
PDF
JavaScript 教程
PDF
Javascript autoload
PPTX
JavaScript 闭包分享(一):传递参数
PDF
Jni攻略之八――操作对象的构造方法
PPTX
从问题开始,谈前端架构
DOC
Java华为面试题
PPTX
异步编程与浏览器执行模型
PDF
常見設計模式介紹
PDF
由Hash Set谈重用
PPT
JAVA内存泄漏及诊断
PDF
JCConf2015: groovy to gradle
PPTX
Glider
PDF
Jscex:案例、经验、阻碍、展望
PPTX
5, initialization & cleanup
PPTX
PHPUnit + Xdebug 单元测试技术
PDF
合久必分,分久必合
PDF
advanced introduction to codeigniter
页游开发中的 Python 组件与模式
Python 于 webgame 的应用
jQuery源码学习
JavaScript 教程
Javascript autoload
JavaScript 闭包分享(一):传递参数
Jni攻略之八――操作对象的构造方法
从问题开始,谈前端架构
Java华为面试题
异步编程与浏览器执行模型
常見設計模式介紹
由Hash Set谈重用
JAVA内存泄漏及诊断
JCConf2015: groovy to gradle
Glider
Jscex:案例、经验、阻碍、展望
5, initialization & cleanup
PHPUnit + Xdebug 单元测试技术
合久必分,分久必合
advanced introduction to codeigniter
Ad

Similar to Node way (9)

PDF
D2_node在淘宝的应用实践_pdf版
KEY
D2_Node在淘宝的应用实践
PPT
Node.js在淘宝的应用实践
PDF
Browser vs. Node.js Jackson Tian Shanghai
PDF
Node getting-started
PPTX
前端本地应用程序网络
PPT
Node Web开发实战
PPT
Node Web开发实战
PDF
Nodejs & NAE
D2_node在淘宝的应用实践_pdf版
D2_Node在淘宝的应用实践
Node.js在淘宝的应用实践
Browser vs. Node.js Jackson Tian Shanghai
Node getting-started
前端本地应用程序网络
Node Web开发实战
Node Web开发实战
Nodejs & NAE
Ad

Node way