SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。勇浩 赖
 
页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式勇浩 赖
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
jQuery源码学习
jQuery源码学习jQuery源码学习
jQuery源码学习fangdeng
 
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程Bobby Zhou
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
JavaScript 闭包分享(一):传递参数
JavaScript 闭包分享(一):传递参数JavaScript 闭包分享(一):传递参数
JavaScript 闭包分享(一):传递参数Janlay Wu
 
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法yiditushe
 
从问题开始,谈前端架构
从问题开始,谈前端架构从问题开始,谈前端架构
从问题开始,谈前端架构裕波 周
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型keelii
 
常見設計模式介紹
常見設計模式介紹常見設計模式介紹
常見設計模式介紹Jace Ju
 
由Hash Set谈重用
由Hash Set谈重用由Hash Set谈重用
由Hash Set谈重用yiditushe
 
JAVA内存泄漏及诊断
JAVA内存泄漏及诊断JAVA内存泄漏及诊断
JAVA内存泄漏及诊断ivannotes
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradleChing Yi Chan
 
Jscex:案例、经验、阻碍、展望
Jscex:案例、经验、阻碍、展望Jscex:案例、经验、阻碍、展望
Jscex:案例、经验、阻碍、展望jeffz
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanupted-xu
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术hoopchina
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 

Was ist angesagt? (20)

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

Ähnlich wie Node way

一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)Kejun Zhang
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现hua qiu
 
Discuz技术交流
Discuz技术交流Discuz技术交流
Discuz技术交流pigso
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训lotusprince
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Servicesjavatwo2011
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践Li JianYe
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门Xiujun Ma
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backboneJerry Xie
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈Robbin Fan
 
Mongodb
MongodbMongodb
Mongodbbj
 
Android resource-management
Android resource-managementAndroid resource-management
Android resource-managementLucas Xu
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introductionmysqlops
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianJackson Tian
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程景隆 張
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 

Ähnlich wie Node way (20)

一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 
Discuz技术交流
Discuz技术交流Discuz技术交流
Discuz技术交流
 
nodejs开发web站点
nodejs开发web站点nodejs开发web站点
nodejs开发web站点
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈
 
Mongodb
MongodbMongodb
Mongodb
 
Android resource-management
Android resource-managementAndroid resource-management
Android resource-management
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introduction
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 

Node way