Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Node way

4,195 views

Published on

Published in: Technology
  • Be the first to comment

Node way

  1. 1. Node 技术栈实践 张宇⾠辰 (pw) @ 猿题库
  2. 2. 后端 前端 ? Java/Python/PHP … HTML/CSS/JavaScript…
  3. 3. 猿题库前端进化之路
  4. 4. Node 实践中的那些坑
  5. 5. 后端 前端 ? Java/Python/PHP … HTML/CSS/JavaScript…
  6. 6. 服务器 数据库浏览器 模板 静态资源
  7. 7. 服务器 数据库浏览器 模板 静态资源 后端 前端
  8. 8. 服务器 数据库浏览器 模板 静态资源 后端 前端
  9. 9. 服务器 数据库浏览器 模板 静态资源 后端 前端灰⾊色地带
  10. 10. 服务器 数据库 模板 后端 前端 ⽤用接⼝口来解决问题
  11. 11. 服务器 数据库 模板 后端 前端 前端包圆
  12. 12. 猿题库前端进化之路
  13. 13. CSS / JS / IMG Java HTML Template 猿题库
  14. 14. CSS / JS / IMG Java HTML Tmpl 主站 CSS / JS / IMG Java HTML Tmpl 公务员 CSS / JS / IMG Java HTML Tmpl 司法考试 CSS / JS / IMG Java HTML Tmpl ⾼高考
  15. 15. Java 主站 CSS / JS / IMG Java HTML Tmpl 公务员 Java 司法考试 Java ⾼高考 前端代码
  16. 16. Java 主站 CSS / JS / IMG Java HTML Tmpl 公务员 Java 司法考试 Java ⾼高考 前端服务器 Node
  17. 17. Java 主站 CSS / JS / IMG Java HTML Tmpl 公务员 Java 司法考试 Java ⾼高考 前端服务器 Node 后端 前端 HTTP
  18. 18. 服务器 数据库 模板 后端 前端 前端包圆 (By Node)
  19. 19. 那些坑 • HTTP • 异常处理 • 内存泄露 • 多核优化, 部署 • ⼀一些⼯工具: 开发, 调试, 性能调优
  20. 20. n 2n 2n n client api request Node API ServerNginx
  21. 21. Node API ServerNginx n 2n 2n n Nginx client api request
  22. 22. NginxNode API Server API Server API Server Nginx 10.0.1.3 yuantiku.com /api /
  23. 23. http.globalAgent.maxSockets = Infinity;
  24. 24. var agent = new http.Agent({ maxSockets: 2 }); ! req.request = request.defaults({ pool: agent });
  25. 25. 那些坑 • HTTP • 异常处理 • 内存泄露 • 多核优化, 部署 • ⼀一些⼯工具: 开发, 调试, 性能调优
  26. 26. app.get('/foo', function (req, res) { throw new Error('foo'); }); ! app.use(function (err, req, res, next) { res.send(500, err.message); });
  27. 27. app.get('/bar', function (req, res) { process.nextTick(function () { throw new Error(‘bar'); // 异步函数中的异常 }); });
  28. 28. process.on('uncaughtException', function () { return; });
  29. 29. Express Domain http://lostjs.com/2014/01/25/handle-exception-in-node/
  30. 30. 那些坑 • HTTP • 异常处理 • 内存泄露 • 多核优化, 部署 • ⼀一些⼯工具: 开发, 调试, 性能调优
  31. 31. var val = 'hello world'; function outer() { var val = 'bar'; return function inner() { return val; }; } global.inner = outer();
  32. 32. 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); }); }; }());
  33. 33. 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); }); }; }());
  34. 34. 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 }); }); });
 });
  35. 35. 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 }); }); });
 });
  36. 36. 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 }); }); });
 });
  37. 37. 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’;
  38. 38. 那些坑 • HTTP • 异常处理 • 内存泄露 • 多核优化, 部署 • ⼀一些⼯工具: 开发, 调试, 性能调优
  39. 39. • node • pm2 • NODE_ENV
  40. 40. 那些坑 • HTTP • 异常处理 • 内存泄露 • 多核优化, 部署 • ⼀一些⼯工具: 开发, 调试, 性能调优
  41. 41. • npm • node inspector • webkit-devtools-agent • console.trace
  42. 42. perfectworks@gmail.com @__pw__ lostjs.com

×