2、我眼中的Node.js核心
- 1)小而美的哲学
- 2)从LAMP到MEAN
- 3)异步流程控制
- 4)Node.js Web开发
- 5)Node.js 模块开发
时间原因,接下来稍微介绍一下MEAN
3.1. 小而美的哲学
"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.
3.2. 从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 讲的就是我们用的技术栈
3.3. 异步流程控制
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实现
整体来说,对异步流程控制解决的还是比较好的。
3.4. Node.js Web开发
- Node.js Web开发
- express、koa
- restify、hapi
- 其他框架sails、meteor
各种类型web开发都支持的,一般我们采用非restful的使用express、koa更简单
如果是纯restful,可以采用restify、hapi
另外还有快速模拟api的json-server,对rest支持超方便
3.5. 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++水平了
3.6. 其他
3.6.1. 如何看到koa && koa2
3.6.2. 数据库
3.6.3. 如何做benchmark
koa-benchmark 用于比较 koa 和 koa2 和 express 性能
3.6.4. 开源项目里怎么样写测试、CI和代码测试覆盖率
https://cnodejs.org/topic/558df089ebf9c92d17e73358