Your SlideShare is downloading. ×

Node develop expirements

987
views

Published on

node.js expirements

node.js expirements

Published in: Technology, Business

1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total Views
987
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
1
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 我这样写Node 朋春 pengchun@taobao.com
  • 2. 目录约定• bin• build• app• lib• test
  • 3. .gitignore / svn:ignore• conf(etc, config, ...)• log(s)• temp(tmp)• node_modules• ...
  • 4. package.json• “=” 还是 “>=”?• node_modules何时安装?
  • 5. Makefile• test• coverage• func• benchmark
  • 6. build• build.js• properties• build/tpl/*
  • 7. 配置文件• 忘掉json,慎用js,推荐ini• 配置项的边界测试• 切勿滥用配置项 /**• 认真写注释 * 用以... * 取值范围 * XXX: 注意 * 联系人 */
  • 8. unittest• mocha + should• case命名• test/unit/a.js
  • 9. bin• appctl {start|stop|reload|restart|status}• logrotate
  • 10. 我是偏执狂• 不用相对路径(用__dirname)• 外部变量只在⼀一个地方读• 目录有等级,规避“越级”require• 只写函数,不执行
  • 11. 快速迭代• 自顶向下的开发,demo先跑起来• 建立benchmark基准,不断修正• status
  • 12. 可测性• 接口简单,规避复杂参数(对象)• 代码分层,通信协议与业务协议分离• 单⼀一职责!
  • 13. 可读性• 机器可读 • 日志格式 • 接口标准化(code和message分离,code可穷举)• 人可读 • 无脑常量 • “白富美”有风险 • 不可见字符
  • 14. 变量命名• 变量名体现“作用域” • 服务级(进程级)变量 • 请求级变量 master.register(port, path, cnum);• 变量与属性名 master.register(port, path, { /** ‘cnum‘ : 1,*/ ‘child_num’ : 1, });
  • 15. 关于进程• master• worker• daemon ...
  • 16. 异常处理• error or exception?• 强依赖越早暴露越好
  • 17. 稳定性• nginx upstream• 监控日志,尤其是error和exception• latency监控(阈值取多少)• 监控gc(--trace_gc, ...)• 允许core dump,并监控core文件
  • 18. 几个原则• private static变量,暴露exports.clean• 始终考虑“深拷贝”和“浅拷贝”
  • 19. 让代码更漂亮• 适当的空行• 等号(冒号)对齐• 代码折叠• vim: set expandtab && ret• vim: set ff=unix
  • 20. node-shark• https://github.com/aleafs/node-shark