走进 node.js

751 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

Node.js 就是运行在服务端的 JavaScript

Node.js 在很多领域都有涉及,现在前后端分离开发后,更是让node升起。我们学习node从下面这几个方面学起

  • Node.js 是什么
  • Node.js 的运行原理
  • Node.js 的运行机制

Node.js 是什么

以下引自 Node.js 官网Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

  • 不是编程语言
  • 也不是框架和库
  • 是一个 JavaScript 运行时(环境)
    • 能解析和执行 JavaScript 代码(严格来说应该是 ECMAScript 代码)
  • 构建于 Chrome V8 JavaScript 引擎之上
  • 为 JavaScript 提供了服务端编程的能力
    • 文件 IO
    • 网络 IO
  • 从技术角度它的能力和 Java、PHP、Python、Perl、Ruby 等服务端技术类似

Node 的特点

  • 事件驱动
  • 非阻塞 IO(异步) 模型
  • 单线程
  • 跨平台

Node 的运行机制

多线程处理机制:

image.png

传统的 Web 服务器(Apache、Tomcat、IIS):

  • 请求进来
  • Web 服务器开启一个线程来处理用户请求
  • 同一时间有 n 请求,服务器就需要开启 n 个线程
    • 一个线程最少得消耗 8MB 内存
    • 对于一个 8GB 内存的服务器来说,它能应对的并发数是 1024 * 8 / 8 = 1024 个并发

事件驱动处理模型:

  • Node 中低层封装了一堆的异步操作 API
    • 文件操作
    • 网络操作
  • JavaScript 语言本身是单线程的

image.png

Event Loop(事件循环)

这里就不多说事件循环了,推荐大家去看下面这几篇文章,写的特别详细

为什么要学习 Node

  • 增加职业竞争力
  • 企业需求
  • 进一步理解 Web
  • 大前端必备技能
  • 为了更好的学习前端框架

Node 能做什么

Node 打破了过去 JavaScript 只能在浏览器中运行的局面

  • Web 服务器
  • 命令行工具
  • 网络爬虫
  • 桌面应用程序开发(Electron)

JavaScript 长久以来一直被限制在浏览器的沙箱中运行, 它的能力取决于浏览器中间层提供的支持多少。 Node 将高性能的 V8 带到了服务器端,使 JavaScript 也可以开发出实时高性能的服务器。 在 Node 中,不再与 CSS 样式表,DOM 树打交道, 可以随意的访问本地文件,搭建 WebSocket 服务器,连接数据库等系统级底层操作。 Node 不处理 UI,只关心数据,无论是本地数据还是网络数据。 前后端编程统一,大大降低了前后端编程切换的代码。对于前端工程师而言,自己熟悉的 JavaScript 如今竟然可以在另一个地方大放异彩, 不谈其他原因,仅仅因为好奇,也值得去关注和探究它。