Part 2:我眼中的 Node.js 核心
- 1)小而美的哲学
- 2)从 LAMP 到 MEAN
- 3)异步流程控制
- 4)Node.js Web 开发
- 5)Node.js 模块开发
时间原因,接下来稍微介绍一下 MEAN
小而美的哲学
“Small is beautiful” 是 Unix 哲学9条里的第一条,但对 Node.js 来说,它实在是再合适不过了
http://blog.izs.me/post/48281998870/unix-philosophy-and-nodejs
- Write modules that do one thing well. Write a new module rather than complicate an old one.
- Write modules that encourage composition rather than extension.
- Write modules that handle data Streams, because that is the universal interface.
- Write modules that are agnostic about the source of their input or the destination of their output.
- Write modules that solve a problem you know, so you can learn about the ones you don’t.
- Write modules that are small. Iterate quickly. Refactor ruthlessly. Rewrite bravely.
- Write modules quickly, to meet your needs, with just a few tests for compliance. Avoid extensive specifications. Add a test for each bug you fix.
- Write modules for publication, even if you only use them privately. You will appreciate documentation in the future.
从LAMP到MEAN
MEAN 是目前最潮的全栈 javascript 架构
MEAN 是一个 Javascript 平台的现代 Web 开发框架总称,它是 MongoDB + Express + AngularJS + NodeJS 四个框架的第一个字母组合。它与传统 LAMP 一样是一种全套开发工具的简称。
从我的角度看
- mysql 用 mongodb 替换,nosql 里最像 rdbms 的,从开发和性能都是有优势的(老毕已经讲过了)
- angular 的出现是一个时代,ioc,双向绑定,指令等都曾让无数热血沸腾
- nodejs 提供了完全的生态和工具链,你要的它基本都有,感谢 npm,早些年 nodejs 的性能甩 php 几条街的
- express 作为 nodejs 示范项目,它非常精简,是比较合适的 web 框架
我为什么选择MEAN架构?
- 成熟、稳定,简单,有问题我们能 cover 住,所以我们选了 nodejs
- 把握趋势,以后 nodejs 的前景非常看好,尤其先后端统一,全栈方向
- 在架构上可以屏蔽可能风险,不孤注一掷,也不会一叶障目,合理的使用其他语言,只要每个功能都以服务出现,至于它是什么语言写的,并不重要
- 招人成本的性价比相对较高,技术栈新,容易吸引人才
最重要的一件事儿,是当有问题的时候,有人能 cover 住,在创业初期这是最最重要的事儿。
我的一篇爆款文章《Node.js 最新 Web 技术栈(2015年5月)》https://cnodejs.org/topic/55651bf07d4c64752effb4b1
讲的就是我们用的技术栈
异步流程控制
js 流程控制的演进过程,分以下5部分
- 1) 回调函数 Callbacks
- 2) 异步 JavaScript
- 3) Promise/A+ 规范
- 4) 生成器 Generators/ yield(es6)
- 5) Async/ await(es7)
- 目前所有版本都支持 Promise/A+ 规范
- 目前 Node.js 4.0 + 支持 Generators/ yield
- 目前不支持 ES7 里的 Async/await,但可以通过 babel 实现
整体来说,对异步流程控制解决的还是比较好的。
Node.js Web 开发
- Node.js Web 开发
- express、koa
- restify、hapi
- 其他框架 sails、meteor
各种类型 web 开发都支持的,一般我们采用非 restful 的使用 express、koa 更简单
如果是纯 restful,可以采用 restify、hapi
另外还有快速模拟 api 的 json-server,对 rest 支持超方便
Node.js 模块开发
- Node.js 模块开发
- 普通模块
- cli
- 脚手架 scaffold
- c/c++ addons
普通模块和 cli 模块只是差 package.json 里的
"preferGlobal": "true",
"bin": {
"kp": "kp.js"
},
脚手架 scaffold = cli + 模板生成,在 Node.js 里这2点都非常容易
在 Node.js 里写 c/c++扩展,有 nan 抽象层,其他就看大家的 c/c++ 水平了
其他
如何看到 koa && koa2
数据库
见 mongoose.md
如何做 benchmark
https://github.com/17koa/koa-benchmark
开源项目里怎么样写测试、CI 和代码测试覆盖率
https://cnodejs.org/topic/558df089ebf9c92d17e73358