我这样写Node
         朋春
 pengchun@taobao.com
目录约定

• bin
• build
• app
• lib
• test
.gitignore / svn:ignore

• conf(etc, config, ...)
• log(s)
• temp(tmp)
• node_modules
• ...
package.json


• “=” 还是 “>=”?
• node_modules何时安装?
Makefile

• test
• coverage
• func
• benchmark
build

• build.js
• properties
• build/tpl/*
配置文件

• 忘掉json,慎用js,推荐ini
• 配置项的边界测试
• 切勿滥用配置项        /**

• 认真写注释
                  * 用以...
                  * 取值范围
                  * XXX: 注意
                  * 联系人
                  */
unittest

• mocha + should
• case命名
• test/unit/a.js
bin


• appctl {start|stop|reload|restart|status}
• logrotate
我是偏执狂

• 不用相对路径(用__dirname)
• 外部变量只在⼀一个地方读
• 目录有等级,规避“越级”require
• 只写函数,不执行
快速迭代

• 自顶向下的开发,demo先跑起来
• 建立benchmark基准,不断修正
• status
可测性

• 接口简单,规避复杂参数(对象)
• 代码分层,通信协议与业务协议分离
• 单⼀一职责!
可读性
• 机器可读
 •   日志格式

 •   接口标准化(code和message分离,code可穷举)


• 人可读
 •   无脑常量

 •   “白富美”有风险

 •   不可见字符
变量命名

• 变量名体现“作用域”
 •   服务级(进程级)变量

 •   请求级变量
                  master.register(port, path, cnum);

• 变量与属性名          master.register(port, path, {
                    /** ‘cnum‘ : 1,*/
                    ‘child_num’ : 1,
                  });
关于进程

• master
• worker
• daemon ...
异常处理


• error or exception?
• 强依赖越早暴露越好
稳定性

• nginx upstream
• 监控日志,尤其是error和exception
• latency监控(阈值取多少)
• 监控gc(--trace_gc, ...)
• 允许core dump,并监控core文件
几个原则


• private static变量,暴露exports.clean
• 始终考虑“深拷贝”和“浅拷贝”
让代码更漂亮

• 适当的空行
• 等号(冒号)对齐
• 代码折叠
• vim: set expandtab && ret
• vim: set ff=unix
node-shark


• https://github.com/aleafs/node-shark

More Related Content

PPT
编辑器设计U editor
PDF
编辑器设计Kissy editor
PPT
Node分享 展烨
PDF
Kind editor设计思路
PDF
Sidekiq 源码分析
PPTX
PPTX
QCon - 一次 Clojure Web 编程实战
PDF
學好 node.js 不可不知的事
编辑器设计U editor
编辑器设计Kissy editor
Node分享 展烨
Kind editor设计思路
Sidekiq 源码分析
QCon - 一次 Clojure Web 编程实战
學好 node.js 不可不知的事

What's hot (18)

PDF
Node js实践
PDF
Berserk js
PPT
Node.js在淘宝的应用实践
PPTX
使用 Visual Studio Code 建構 JavaScript 應用程式
PDF
KISSY for starter
PPT
课题二:Node.js那些事儿
PDF
AJAX Basic
PDF
Learn python in 30 min - 3
PPTX
Java_07:Thread
PDF
深入浅出NodeJS
PDF
COSCUP 2010 - node.JS 於互動式網站之應用
PDF
twMVC#36C#的美麗與哀愁
PDF
百度前端性能监控与优化实践
DOC
volatile的作用
PPTX
Node js feat pegasus
PDF
Kindeditor设计思路v2
PPTX
第三方内容开发最佳实践
PPTX
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Node js实践
Berserk js
Node.js在淘宝的应用实践
使用 Visual Studio Code 建構 JavaScript 應用程式
KISSY for starter
课题二:Node.js那些事儿
AJAX Basic
Learn python in 30 min - 3
Java_07:Thread
深入浅出NodeJS
COSCUP 2010 - node.JS 於互動式網站之應用
twMVC#36C#的美麗與哀愁
百度前端性能监控与优化实践
volatile的作用
Node js feat pegasus
Kindeditor设计思路v2
第三方内容开发最佳实践
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Ad

Similar to Node develop expirements (20)

PDF
模块一-Go语言特性.pdf
PPT
构建可维护的Javascript 小米网
PPTX
Fl介绍
PPTX
C++11综述/新特性描述/Overview of C++11 New Features
PDF
Linux binary Exploitation - Basic knowledge
PPTX
Win dbg入门
PPTX
Windbg入门
PDF
千呼萬喚始出來的 Java SE 7
PDF
合久必分,分久必合
PDF
Web development with zend framework
PDF
Google LevelDB Study Discuss
PPTX
InnoDB Transaction Lock and MVCC
PPT
高性能存储引擎TokuDB剖析
PPTX
前端测试
PPTX
前端测试
PDF
Tcfsh bootcamp day2
PPTX
调试技术的应用
PDF
Linux system security
PPTX
OPM
PPTX
Elastic stack day-2
模块一-Go语言特性.pdf
构建可维护的Javascript 小米网
Fl介绍
C++11综述/新特性描述/Overview of C++11 New Features
Linux binary Exploitation - Basic knowledge
Win dbg入门
Windbg入门
千呼萬喚始出來的 Java SE 7
合久必分,分久必合
Web development with zend framework
Google LevelDB Study Discuss
InnoDB Transaction Lock and MVCC
高性能存储引擎TokuDB剖析
前端测试
前端测试
Tcfsh bootcamp day2
调试技术的应用
Linux system security
OPM
Elastic stack day-2
Ad

More from aleafs (7)

PDF
Node cluster
PDF
分布式系统缓存设计
PPTX
My fox 扩容与数据迁移
PPTX
海量统计数据的分布式MySQL集群——MyFOX
PPTX
淘宝海量数据产品技术架构
PDF
Myfox on NodeJS
PPTX
助推宝工具介绍
Node cluster
分布式系统缓存设计
My fox 扩容与数据迁移
海量统计数据的分布式MySQL集群——MyFOX
淘宝海量数据产品技术架构
Myfox on NodeJS
助推宝工具介绍

Node develop expirements