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