SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
我这样写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

Weitere ähnliche Inhalte

Was ist angesagt?

Node js实践
Node js实践Node js实践
Node js实践jay li
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starteryiming he
 
课题二:Node.js那些事儿
课题二:Node.js那些事儿课题二:Node.js那些事儿
课题二:Node.js那些事儿Liu Allen
 
Learn python in 30 min - 3
Learn python in 30 min - 3Learn python in 30 min - 3
Learn python in 30 min - 3Chia-Hao Tsai
 
Java_07:Thread
Java_07:ThreadJava_07:Thread
Java_07:ThreadBrad Chao
 
深入浅出NodeJS
深入浅出NodeJS深入浅出NodeJS
深入浅出NodeJSsunzhenghua
 
COSCUP 2010 - node.JS 於互動式網站之應用
COSCUP 2010 - node.JS 於互動式網站之應用COSCUP 2010 - node.JS 於互動式網站之應用
COSCUP 2010 - node.JS 於互動式網站之應用ericpi Bi
 
twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁twMVC
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践Welefen Lee
 
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasuscnfi
 
Kindeditor设计思路v2
Kindeditor设计思路v2Kindeditor设计思路v2
Kindeditor设计思路v2luolonghao
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践taobao.com
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 

Was ist angesagt? (18)

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

Ähnlich wie Node develop expirements

模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdfczzz1
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网yang alex
 
C++11综述/新特性描述/Overview of C++11 New Features
C++11综述/新特性描述/Overview of C++11 New FeaturesC++11综述/新特性描述/Overview of C++11 New Features
C++11综述/新特性描述/Overview of C++11 New FeaturesPeien Luo
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
Web development with zend framework
Web development with zend frameworkWeb development with zend framework
Web development with zend frameworkthinkinlamp
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discusseverestsun
 
InnoDB Transaction Lock and MVCC
InnoDB Transaction Lock and MVCCInnoDB Transaction Lock and MVCC
InnoDB Transaction Lock and MVCCfrogd
 
高性能存储引擎TokuDB剖析
高性能存储引擎TokuDB剖析高性能存储引擎TokuDB剖析
高性能存储引擎TokuDB剖析Bohu TANG
 
调试技术的应用
调试技术的应用调试技术的应用
调试技术的应用延胜 黄
 
Elastic stack day-2
Elastic stack day-2Elastic stack day-2
Elastic stack day-2YI-CHING WU
 

Ähnlich wie Node develop expirements (20)

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

Mehr von aleafs

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

Mehr von aleafs (7)

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

Node develop expirements