2、我眼中的Node.js核心

优质
小牛编辑
122浏览
2023-12-01
  • 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实现

整体来说,对异步流程控制解决的还是比较好的。

详见Node.js最新技术栈之Promise篇

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. 数据库

见 mongoose 入门教程

3.6.3. 如何做benchmark

koa-benchmark 用于比较 koa 和 koa2 和 express 性能

3.6.4. 开源项目里怎么样写测试、CI和代码测试覆盖率

https://cnodejs.org/topic/558df089ebf9c92d17e73358

3.6.5. 真实环境部署nodejs程序

NodeJS 项目部署实战讲解