Node
研发
开发环境搭建
下载/安装:nodejs.org
windows:执行exe文件
linux:源码安装或者使用wget、yum之类的下载工具
编辑器:webstorm、sublime、vim
webstorm:功能强大,吃内存,要钱
sublime:简洁,免费,插件多,插件装多了也卡
vim:初学曲线较陡,插件丰富,linux自带
命令行工具:cmd、xshell
包管理器
npm
yarn(会缓存下载的包,避免重复下载,目的是提升npm包的下载速度,facebook出品)
私有源:cnpm、tnpm等
框架选型
express:中间件、生态完善,tj大神出品
koa:脱胎于express,提升异步编程体验,执行性能上比express并无太大优势
koa1:中间件+es6,利用ES6的generator提升异步编程体验
koa2:中间件+es7,利用ES7的aysnc/await提升异步编程体验
hapi:遵循配置大于编码原则,沃尔玛前端团队出品
sails:模仿ruby on rails框架
框架对比:http://www.jianshu.com/p/8b7eb2b447f5
tsw:qq空间出品,集成了很多腾讯内部组件
协议
网络传输协议
http/https:推荐使用request.js
tcp:net模块
udp:dgram模块
数据序列化协议
json(文本协议,常用于http通信)
protocol buffer(二进制协议,常用于socket通信),js原生不支持,可以使用protobuf.js来解析,参考文章:http://ivweb.io/topic/570130a306f2400432c1396c
接口协议
restful apis(语义化,几乎所有web框架都支持)
Graphql(解决restful接口过于原子化的缺陷,facebook出品,需要在前端和后台接口之前搭建一层graphql server做数据处理)
RPC(后台服务间通信,语言无关)
网络序/本地序:Buffer模块api原生支持两种序列的转换,参考文章:http://ivweb.io/topic/57fe263b2a25000c315a3d8a
存储
关系型数据库
mysql(常用)
Oracle
MSSQL
PostreSQL
MariaSQL
缓存
redis(五种数据结构)
memcache(key/value形式,无法遍历)
nosql
mongodb(js友好,基本存储数据结构为json)
Redis(五种数据结构)
orm
sequelize(mysql)
bookshelf(mysql)
mongoose
zookeeper(公共配置中心,常用于分布式系统,解决异构系统公共配置数据问题),参考文章:http://ivweb.io/topic/579db07093d9938132cc8d85
node c++扩展
gcc
node-gyp
ffi,参考文章:http://ivweb.io/topic/57732fbef0a5487b05f325bf
消息队列
RabbitMQ
Kafka
zmq
server render
webso
同构,参考文章:http://ivweb.io/topic/5636466d09e01a534b461ec3
设计模式
中间件模式,典型模块:connect
发布/订阅模式:参考eventemit模块
观察者模式
测试
mocha,测试框架
chai
jasmine
should.js(断言)
istanbul(测试覆盖率)
Assert(断言),nodejs原生
部署
web服务器
apache(多进程模型,超过10000并发有风险)
nginx(事件驱动,优化后可支持几万+并发)
caddy(天然支持http2+https)
发布部署/持续集成
织云
Jenkins
Travis
docker
运维
压测
仅框架无逻辑(1700+QPS)
上线前压测规范
性能分析
监控&告警
monitor
模调
硬件监控
内存
CPU负载
磁盘使用率
异常处理
负载均衡/失效转移
内存泄漏
devTool
heapdump + chrome devTool
memwatch
进程管理
pm2
forever
代码异常
error first callback:错误优先的回调函数
domain,可以捕获异步方法中的错误,新版本node中将废弃该模块
try catch
process.on(‘uncaughtException’,cb):捕获进程中未处理的异常,但捕获不了异步方法中的异常
安全/认证
oauth2
json web token
csrf
sql注入
终端工具
bash scripts
基础命令
top:检测机器性能
ifconfig:网卡相关
ps:进程相关
netstat:端口相关
tail/cat/vim等查看文件的命令
应用场景
爬虫
phantomjs,参考文章:http://ivweb.io/topic/560b402ac2317a8c3e08621c
cherrio:操作dom
request.js:发起网络请求
iconv-lite:字符编码转换
构建工具
fis
gulp:相对于grunt,引入了流的概念
grunt
webpack
学习资源
awesome-nodejs:https://github.com/sindresorhus/awesome-nodejs
node地下铁
nodejs weekly
脑图链接:http://naotu.baidu.com/file/713825603df750aa9cfafb9c42d9dd00?token=d008a5078079aa29