【全文】狼叔:如何正确的学习Node.js

说明

2017-12-14 我发了一篇文章《没用过Node.js,就别瞎逼逼》是因为有人在知乎上黑Node.js。那篇文章的反响还是相当不错的,甚至连著名的hax贺老都很认同,下班时读那篇文章,竟然坐车的还坐过站了。大家可以很明显的感到Node.js的普及度还不够,还存很多误解。甚至说很多小白用户也得不到很好的学习。大神都功成身退,书也跟不上,大部分都是2013年左右的,Node.js版本都是基于v0.10左右的,现在已经v9了。想想也是有点可惜,使用如此广泛的Node.js被大家默认,却没人来科普。

反思之后,我就想准备一个科普的Live,于是就有了《狼叔:如何正确学习 Node.js?》,相信能够对很多喜欢Node.js的朋友有所帮助。Live已完成目前1200多人,230人评价,平均4.8+,还算是一个比较成功的Live。现整理出来,希望对更多朋友有用。

【全文】狼叔:如何正确的学习Node.js

Live 简介

现在,越来越多的科技公司和开发者开始使用 Node.js 开发各种应用。Node.js除了能够辅助大前端开发外,还可以编写Web应用,封装Api,组装RPC服务等,甚至是开发VSCode编辑器一样的PC客户端。和其它技术相比, Node.js 简单易学,性能好、部署容易,能够轻松处理高并发场景下的大量服务器请求。Node.js 周边的生态也非常强大,NPM(Node包管理)上有超过60万个模块,日下超过载量3亿次。但编写 Node.js 代码对新人和其它语言背景的开发者来说,不是一件容易的事,在入门之前需要弄懂不少复杂的概念。

我身边也有很多人问我:如何学习 Node.js ?作为一名 Node.js 布道者,我做过很多 Node.js 普及和推广的工作,对它的基本概念和核心模块都很熟悉; 此外,我还在撰写一本名为《更了不起的 Node.js 》的书,已经写了 2 年,积累了很丰富的资料,本次 Live 也将为你提供对 Node.js 更全面的解读。

本次 Live 主要包括以下内容,目录

Part 0 :Node.js简介

a)Node.js简介 b)什么是Node.js? c)基本原理

Part 1前言:学习 Node.js 的三个境界

Part 2准备:如何学习Node.js

  • 2.1 Node 用途那么多,我该从哪里学起?
  • 2.2 Node Web 框架那么多,我该怎么选?
  • 2.3 关于 Node 的书几乎都过时了,我该买哪本?

Part 3延伸:大前端变化那么快,如何才能做到每日精进?

Part 4实践:从招聘角度来看, Node.js 开发需要具备哪些技能?

Part 5答疑:回答大家的问题

本次Live主要是科普,适用新用户和比较迷茫的Node朋友,希望大家多多理解和支持。

Part 0 :Node.js简介

a)Node.js简介 b)什么是Node.js? c)基本原理

a)Node.js简介

Node.js 诞生于 2009 年,由 Joyent 的员工 Ryan Dahl 开发而成,之后 Joyent 公司一直扮演着 Node.js 孵化者的角色。由于诸多原因,Ryan 在2012年离开社区,随后在2015年由于 Node 贡献者对 es6 新特性集成问题的分歧,导致分裂出iojs,并由 iojs 发布1.0、2.0和3.0版本。由于 iojs 的分裂最终促成了2015年Node基金会的成立,并顺利发布了4.0版本。Node.js基金会的创始成员包括 Google、Joyent、IBM、Paypal、微软、Fidelity 和 Linux基金会,创始成员将共同掌管过去由 Joyent 一家企业掌控的 Node.js 开源项目。此后,Node.js基金会发展非常好,稳定的发布5、6、7、8等版本,截止发稿最新版本已经是8.6,长期支持版本是6.11。

Node.js 不是一门语言也不是框架,它只是基于 Google V8 引擎的 JavaScript 运行时环境,同时结合 Libuv 扩展了 JavaScript 功能,使之支持 io、fs 等只有语言才有的特性,使得 JavaScript 能够同时具有 DOM 操作(浏览器)和 I/O、文件读写、操作数据库(服务器端)等能力,是目前最简单的全栈式语言。

早在2007年,Jeff Atwood 就提出了著名的 Atwood定律

任何能够用 JavaScript 实现的应用系统,最终都必将用 JavaScript 实现

目前 Node.js 在大部分领域都占有一席之地,尤其是 I/O 密集型的,比如 Web 开发,微服务,前端构建等。不少大型网站都是使用 Node.js 作为后台开发语言的,用的最多的就是使用Node.js做前端渲染和架构优化,比如 淘宝双十一、去哪儿网 的 PC 端核心业务等。另外,有不少知名的前端库也是使用 Node.js 开发的,比如,Webpack是一个强大的打包器,React/Vue 是成熟的前端组件化框架。

Node.js通常被用来开发低延迟的网络应用,也就是那些需要在服务器端环境和前端实时收集和交换数据的应用(API、即时聊天、微服务)。阿里巴巴、腾讯、Qunar、百度、PayPal、道琼斯、沃尔玛和 LinkedIn 都采用了 Node.js 框架搭建应用。

另外, Node.js 编写的包管理器 npm 已成为开源包管理了领域最好的生态,直接到2017年10月份,有模块超过47万,每周下载量超过32亿次,每个月有超过700万开发者使用npm。

当然了,Node.js 也有一些缺点。Node.js 经常被人们吐槽的一点就是:回调太多难于控制(俗称回调地狱)和 CPU 密集任务处理的不是很好。但是,目前异步流程技术已经取得了非常不错的进步,从Callback、Promise 到 Async函数,可以轻松的满足所有开发需求。至于 CPU 密集任务处理并非不可解,方案有很多,比如通过系统底层语言 Rust 来扩展 Node.js,但这样会比较麻烦。笔者坚信在合适的场景使用合适的东西,尤其是在微服务架构下,一切都是服务,可以做到语言无关。如果大家想使 JavaScript 做 CPU 密集任务,推荐 Node.js 的兄弟项目 fibjs,基于纤程(fiber,可以简单理解为更轻量级的线程),效率非常高,兼容npm,同时没有异步回调烦恼。

b)什么是Node.js?

按照 Node.js官方网站主页 的说法:

 

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

 

 

从这段介绍来看,解读要点如下

  • Node.js 不是 JavaScript 应用,不是语言(JavaScript 是语言),不是像 Rails(Ruby)、 Laravel(PHP) 或 Django(Python) 一样的框架,也不是像 Nginx 一样的 Web 服务器。Node.js 是 JavaScript 运行时环境
  • 构建在 Chrome's V8 这个著名的 JavaScript 引擎之上,Chrome V8 引擎以 C/C++ 为主,相当于使用JavaScript 写法,转成 C/C++ 调用,大大的降低了学习成本
  • 事件驱动(event-driven),非阻塞 I/O 模型(non-blocking I/O model),简单点讲就是每个函数都是异步的,最后由 Libuv 这个 C/C++ 编写的事件循环处理库来处理这些 I/O 操作,隐藏了非阻塞 I/O 的具体细节,简化并发编程模型,让你可以轻松的编写高性能的Web应用,所以它是轻量(lightweight)且高效(efficient)的
  • 使用 npm 作为包管理器,目前 npm 是开源库里包管理最大的生态,功能强大,截止到2017年12月,模块数量超过 60 万+

大多数人都认为 Node.js 只能写网站后台或者前端工具,这其实是不全面的,Node.js的目标是让并发编程更简单,主要应用在以网络编程为主的 I/O 密集型应用。它是开源的,跨平台,并且高效(尤其是I/O处理),包括IBM、Microsoft、Yahoo、SAP、PayPal、沃尔玛及GoDaddy都是 Node.js 的用户。

c)基本原理

下面是一张 Node.js 早期的架构图,来自 Node.js 之父 Ryan Dahl 的演讲稿,在今天依然不过时,它简要的介绍了 Node.js 是基于 Chrome V8引擎构建的,由事件循环(Event Loop)分发 I/O 任务,最终工作线程(Work Thread)将任务丢到线程池(Thread Pool)里去执行,而事件循环只要等待执行结果就可以了。

14912763353044.png

核心概念

  • Chrome V8 是 Google 发布的开源 JavaScript 引擎,采用 C/C++ 编写,在 Google 的 Chrome 浏览器中被使用。Chrome V8 引擎可以独立运行,也可以用来嵌入到 C/C++ 应用程序中执行。
  • Event Loop 事件循环(由 libuv 提供)
  • Thread Pool 线程池(由 libuv 提供)

梳理一下

  • Chrome V8 是 JavaScript 引擎
  • Node.js 内置 Chrome V8 引擎,所以它使用的 JavaScript 语法
  • JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事
  • 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。
  • 如果排队是因为计算量大,CPU 忙不过来,倒也算了,但是很多时候 CPU 是闲着的,因为 I/O 很慢,不得不等着结果出来,再往下执行
  • CPU 完全可以不管 I/O 设备,挂起处于等待中的任务,先运行排在后面的任务
  • 将等待中的 I/O 任务放到 Event Loop 里
  • 由 Event Loop 将 I/O 任务放到线程池里
  • 只要有资源,就尽力执行

我们再换一个维度看一下

14992384974942.png

核心

  • Chrome V8 解释并执行 JavaScript 代码(这就是为什么浏览器能执行 JavaScript 原因)
  • libuv 由事件循环和线程池组成,负责所有 I/O 任务的分发与执行

在解决并发问题上,异步是最好的解决方案,可以拿排队和叫号机来理解

  • 排队:在排队的时候,你除了等之外什么都干不了
  • 叫号机:你要做的是先取号码,等轮到你的时候,系统会通知你,这中间,你可以做任何你想做的事儿

Node.js 其实就是帮我们构建类似的机制。我们在写代码的时候,实际上就是取号的过程,由 Event Loop 来接受处理,而真正执行操作的是具体的线程池里的 I/O 任务。之所以说 Node.js 是单线程,就是因为在接受任务的时候是单线程的,它无需进程/线程切换上下文的成本,非常高效,但它在执行具体任务的时候是多线程的。

Node.js 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”,毫无疑问,它确实做到了。这种做法将并发编程模型简化了,Event Loop和具体线程池等细节被 Node.js 封装了,继而将异步调用 Api 写法暴露给开发者。真是福祸相依,一方面简化了并发编程,另一方面在写法上埋下了祸根,这种做法的好处是能让更多人轻而易举的写出高性能的程序!

在Node.js Bindings层做的事儿就是将 Chrome V8 等暴露的 C/C++ 接口转成JavaScript Api,并且结合这些 Api 编写了 Node.js 标准库,所有这些 Api 统称为 Node.js SDK,后面模块章节会有更详细的讨论。

微软在2016年宣布在MIT许可协议下开放 Chakra 引擎,并以 ChakraCore 为名在 Github 上开放了源代码,ChakraCore 是一个完整的 JavaScript 虚拟机,它拥有着和 Chakra 几乎相同的功能与特性。微软向 Node.js 主分支提交代码合并请求,让 Node.js 用上 ChakraCore引擎,即 nodejs/node-chakracore 项目。实际上微软是通过创建名为 V8 shim 的库的赋予了 ChakraCore 处理谷歌 Chrome V8 引擎指令的能力,其原理示意图如下

15018598977763.jpg

目前,Node.js 同时支持这2种 JavaScript 引擎,二者性能和特性上各有千秋,ChakraCore 在特性上感觉更潮一些,曾经是第一个支持 Async函数 的引擎,但目前 Node.js 还是以 Chrome V8 引擎为主, ChakraCore 版本需要单独安装,大家了解一下就好。

Part 1前言:学习 Node.js 的三个境界

我总结的编程3种境界

  • 打日志:console.log
  • 断点调试:断点调试:node debugger 或node inspector 或vscode
  • 测试驱动开发(tdd | bdd)

大家可以自测一下,自己在哪个水平?如果是第三个阶段,那么本场Live可能不太适合你。哈哈哈

Part 2准备:如何学习Node.js

Node不是语言,不是框架,只是基于V8运行时环境。结合libuv能够通过js语法获得更好的等价于c/c++的性能。

它很简单,异步是解决并发的最佳实践。本节主要讲如何学习Node.js,是本次Live非常核心的内容,大家要注意听。

基础学习

1)js语法必须会

  1. js基本语法,都是c语系的,有其他语言背景学习起来相对更简单
  2. 常见用法,比如正则,比如数据结构,尤其是数组的几种用法。比如bind/call/apply等等
  3. 面向对象写法。js是基于对象的,所以它的oo写起来非常诡异。参见红皮书JavaScript高级编程,很多框架都是自己实现oo基础框架,比如ext-core等。

犀牛书,《JavaScript权威指南》,没事就多翻翻,看少多少遍都不为过。

2)个人学习和技术选型都要循序渐进

  1. 先能写,采用面向过程写法,简单理解就是定义一堆function,然后调用,非常简单
  2. 然后再追求更好的写法,可以面向对象。对于规模化的编程来说,oo是有它的优势的,一般java、c#,ruby这些语言里都有面向对象,所以后端更习惯,但对于语言经验不那么强的前端来说算高级技巧。
  3. 等oo玩腻了,可以有更好的追求:函数式编程,无论编程思维,还是用法上都对已有的编程思维是个挑战。我很喜欢函数式,但不太会在团队里使用,毕竟oo阶段还没完全掌握,风险会比较大。但如果团队水平都非常高了,团队稳定是可以用的。

可以看出我的思路,先能写,然后再追求更好的写法,比如面向对象。等团队水平到一定程度了,并且稳定的时候,可以考虑更加极致的函数式写法。

团队是这样选型的,个人学习也这样,最好是循序渐进,步子迈大了不好。

3)各种高级的JavaScript友好语言

JavaScript友好语言指的是能够使用其他语法实现,但最终编译成js的语言。自从Node.js出现后,这种黑科技层出不穷。比如比较有名的coffee、typescript、babel(es)等。

CoffeeScript虽然也是JavaScript友好语言,但其语法借鉴ruby,崇尚极简,对于类型和OO机制上还是偏弱,而且这么多年也没发展起来,仍然是比较小众的活着。未来比例会越来越少的。

显然TypeScript会越来越好,TypeScript 的强大之处是要用过才知道的。

  • 1)规模化编程,像Java那种,静态类型,面向对象,前端只有TypeScript能做到
  • 2)亲爹是微软安德斯·海尔斯伯格,不知道此人的请看borland传奇去
  • 3)开源,未来很好
  • 4)组合拳:TypeScript + VSCode = 神器

当下前端发展速度极快,以指数级的曲线增长。以前可能1年都不一定有一项新技术,现在可能每个月都有。大前端,Node全栈,架构演进等等都在快速变化。可以说,前端越复杂,有越多的不确定性,TypeScript的机会就越大。

4)再论面向对象

面向对象想用好也不容易的,而且js里有各种实现,真是让人眼花缭乱。

  • 基于原型的写法,纵观JavaScript高级编程,就是翻来覆去的讲这个,这个很基础,但不好是很好用。可以不用,但不可以不会。
  • 自己写面向对象机制是最好的,但不是每个人都有这个能力的。好在es6规范出了更好一点的面向对象,通过class、extends、super关键字来定义类,已经明显好很多了,虽然还很弱,但起码勉强能用起来了。从面向过程走过来的同学,推荐这种写法,简单易用。但要注意面向对象要有面向对象的写法,要理解抽象,继承,封装,多态4个基本特征。如果想用好,你甚至还需要看一些设计模式相关的书。好在有《JavaScript设计模式》一书。Koa2里已经在用这种写法了。
  • js是脚本语言,解释即可执行。所以它的最大缺点是没有类型系统,这在规模化编程里是非常危险的,一个函数,传参就能玩死人。于是现在流行使用flow和typescript来做类型校验。flow只是工具,比较轻量级。而typescript是es6超级,给es6补充了类型系统和更完善的面向对象机制,所以大部分人都会对ts有好感,很有可能是未来的趋势。

对于es6高级特性,我是比较保守的,一般node长期支持版本lts支持的我都让用,一些更新的特性我一般不让使用。根本lts版本保持一致就好。

我的团队现在是采用es6的面向对象写法开发,后面会一点一点转到typescript上的。熟练oo转到ts是非常容易的。

安装Node.js环境

3m安装法

  • nvm(node version manager)【需要使用npm安装,替代品是yrm(支持yarn),nvs对window支持很好】
  • nrm(node registry manager)【需要使用npm安装,替代品是yrm(支持yarn)】
  • npm(node packages manager)【内置,替代品是n或nvs(对win也支持)】

nvm

node版本发布非常快,而且多版本共存可能性较大,推荐使用nvm来安装node

 

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash

$ echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
$ echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.zshrc
$ source ~/.zshrc

$ nvm install 0.10
$ nvm install 4
$ nvm install 6
$ nvm install 8

 

 

nrm

https://registry.npmjs.com 是node官方的源(registry),服务器在国外,下载速度较慢,推荐安装nrm来切换源,国内的cnpm和taobao的源都非常快,当然,如果你想自建源也是支持的。

 

$ npm install --global nrm --registry=https://registry.npm.taobao.org
$ nrm use cnpm

 

 

npm

nrm切换完源之后,你安装npm模块的速度会更快。

 

$ npm install --global yarn

 

 

npm基本命令

名称描述简写
npm install xxx安装xxx模块,但不记录到package.json里npm i xxx
npm install --save xxx安装xxx模块,并且记录到package.json里,字段对应的dependency,是产品环境必须依赖的模块npm i -s xxx
npm install --save-de xxx安装xxx模块,并且记录到package.json里,字段对应的dev-dependency,是开发环境必须依赖的模块,比如测试类的(mocha、chai、sinon、zombie、supertest等)都在npm i -D xxx
npm install --global xxx全局安装xxx模块,但不记录到package.json里,如果模块里package.json有bin配置,会自动链接,作为cli命令npm i -g xxx

常用软件

  • 1)oh my zsh是我最习惯的shell,终端下非常好用

配合iterm2分屏 + spectacle全屏,几乎无敌

  • 2)brew是mac装软件非常好的方式,和apt-get、rpm等都非常类似

安装4个必备软件

  • brew install git 最流行的SCM源码版本控制软件

  • brew install wget 下载、扒站神器

  • brew install ack 搜索代码神器

  • brew install autojump 终端下多目录跳转神器

  • 3)vim

我虽然不算vim党,但也深爱着。janus是一个非常好用的vim集成开发环境。比如ctrl-p、nerdtree等插件都集成了,对我这种懒人足够了。

IDE和编辑器

关于Node.js的IDE和编辑器有很多选择,对比如下

名称是否收费断点调试功能
Webstorm收费支持是IDE,在代码提示、重构等方面功能非常强大,支持的各种语言、框架、模板也非常多,支持断点调试,好处是特别智能,缺点也是特别智能
Sublime/TextMate收费不支持编辑器里非常好用的,textmate主要针对mac用户,sublime是跨平台的,相信很多前端开发都熟悉
Vim/Emace免费不支持命令行下的编辑器,非常强大,难度也稍大,但更为酷炫,而且对于服务器部署开发来说是值得一学的
VSCode/Atom免费支持Atom比较早,功能强大,缺点稍卡顿,VSCode是微软出的,速度快,对于Node.js 调试,重构,代码提示等方面支持都非常好

Visual Studio Code是一个运行于 Mac、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。它功能强大,便于调试,加上它本身也是基于 Node.js 模块 electron 构建的,尤其要推荐大家使用。

Visual Studio Code(以下简称vsc)

  • vsc是一个比较潮比较新的编辑器(跨平台Mac OS X、Windows和 Linux )
  • vsc功能和textmate、sublime、notepad++,ultraedit等比较,毫不逊色
  • vsc尤其是在nodejs(调试)和typescript、go上支持尤其好
  • vsc提供了自定义 Debugger Adapter 和 VSCode Debug Protocol 从而实现自己的调试器

值得一学,我推荐VSCode编辑器!

更多调试方法,参见https://github.com/i5ting/node-debug-tutorial

Node.js应用场景

《Node.js in action》一书里说,Node.js 所针对的应用程序有一个专门的简称:DIRT。它表示数据密集型实时(data-intensive real-time)程序。因为 Node.js 自身在 I/O 上非常轻量,它善于将数据从一个管道混排或代理到另一个管道上,这能在处理大量请求时持有很多开放的连接,并且只占用一小部分内存。它的设计目标是保证响应能力,跟浏览器一样。

这话不假,但在今天来看,DIRT 还是范围小了。其实 DIRT 本质上说的 I/O 处理的都算,但随着大前端的发展,Node.js 已经不再只是 I/O 处理相关,而是更加的“Node”!

Node.js 使用场景主要分为4大类

屏幕快照 2017-05-17 07.25.05.png

  • 1)跨平台:覆盖你能想到的面向用户的所有平台,传统的PC Web端,以及PC客户端 nw.js/electron 、移动端 cordova、HTML5、react-nativeweex,硬件 ruff.io 等
  • 2)Web应用开发:网站、Api、RPC服务等
  • 3)前端:三大框架 React \ Vue \ Angular 辅助开发,以及工程化演进过程(使用Gulp /Webpack 构建 Web 开发工具)
  • 4)工具:npm上各种工具模块,包括各种前端预编译、构建工具 Grunt / Gulp、脚手架,命令行工具,各种奇技淫巧等

下面列出具体的 Node.js 的使用场景,以模块维度划分

分类描述相关模块
网站类似于 cnodejs.org 这样传统的网站Express / Koa
Api同时提供给移动端,PC,H5 等前端使用的 HTTP Api 接口Restify / HApi
Api代理为前端提供的,主要对后端Api接口进行再处理,以便更多的适应前端开发Express / Koa
IM即时聊天实时应用,很多是基于 WebSocket协议的Socket.io / sockjs
反向代理提供类似于 nginx 反向代理功能,但对前端更友好anyproxy / node-http-proxy / hiproxy
前端构建工具辅助前端开发,尤其是各种预编译,构建相关的工具,能够极大的提高前端开发效率Grunt / Gulp / Bower / Webpack / Fis3 / YKit
命令行工具使用命令行是非常酷的方式,前端开发自定义了很多相关工具,无论是shell命令,node脚本,还是各种脚手架等,几乎每个公司\小组都会自己的命令行工具集Cordova / Shell.js
操作系统有实现,但估计不太会有人用NodeOS
跨平台打包工具使用 Web 开发技术开发PC客户端是目前最流行的方式,会有更多前端开发工具是采用这种方式的PC端的electron、nw.js,比如钉钉PC客户端、微信小程序IDE、微信客户端,移动的Cordova,即老的Phonegap,还有更加有名的一站式开发框架Ionicframework
P2P区块链开发、BT客户端webtorrent / ipfs
编辑器Atom 和 VSCode 都是基于 electron 模块的electron
物联网与硬件ruff.io和很多硬件都支持node sdkruff

Node.js 应用场景非常丰富,比如 Node.js 可以开发操作系统,但一般我都不讲的,就算说了也没多大意义,难道大家真的会用吗?一般,我习惯将 Node.js 应用场景氛围7个部分。

1)初衷,server端,不想成了前端开发的基础设施 2)命令行辅助工具,甚至可以是运维 3)移动端:cordova,pc端:nw.js和electron 4)组件化,构建,代理 5)架构,前后端分离、api proxy 6)性能优化、反爬虫与爬虫 7) 全栈最便捷之路

编号场景说明
1反向代理Node.js可以作为nginx这样的反向代理,虽然线上我们很少这样做,但它确确实实可以这样做。比如node-http-proxy和anyproxy等,其实使用Node.js做这种请求转发是非常简单的,在后面的http章节里,有单独的讲解。
2爬虫有大量的爬虫模块,比如node-crawler等,写起来比python要简单一些,尤其搭配jsdom(node版本的jQuery)类库的,对前端来说尤其友好
3命令行工具所有辅助开发,运维,提高效率等等可以用cli做的,使用node来开发都非常合适,是编写命令行工具最简单的方式,java8以后也参考了node的命令行实现
4微服务与RPCnode里有各种rpc支持,比如node编写的dnode,seneca,也有跨语言支持的grpc,足够应用了
5微信公众号开发相关sdk,框架非常多,是快速开发的利器
6前端流行SSR && PWASSR是服务器端渲染,PWA是渐进式Web应用,都是今年最火的技术。如果大家用过,一定对Node.js不陌生。比如React、Vuejs都是Node.js实现的ssr。至于pwa的service-worker也是Node.js实现的。那么为啥不用其他语言实现呢?不是其他语言不能实现,而是使用Node.js简单、方便、学习成本低,轻松获得高性能,如果用其他语言,我至少还得装环境

可以说目前大家能够看到的、用到的软件都有 Node.js 身影,当下最流行的软件写法也大都是基于 Node.js 的,比如 PC 客户端 luin/medis 采用 electron 打包,写法采用 React + Redux。我自己一直的实践的【Node全栈】,也正是基于这种趋势而形成的。在未来,Node.js 的应用场景会更加的广泛,更多参见 sindresorhus/awesome-nodejs

原文链接

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值