node

文章目录

Node

基本概念

Node是什么?

Node.js是一个基于 Chrome V8 引擎的JavaScript运行环境(runtime),Node不是一门语言是让js运行在后端的运行时,并且不包括javascript全集,因为在服务端中不包含DOM和BOM,Node也提供了一些新的模块例如http,fs模块等。Node.js 使用了事件驱动、非阻塞式 I/O 的模型,使其轻量又高效并且Node.js 的包管理器 npm,是全球最大的开源库生态系统。事件驱动与非阻塞IO后面我们会一一介绍。到此我们已经对node有了简单的概念。

Node解决了哪些问题?

Node在处理高并发,I/O密集场景有明显的性能优势

  • 高并发,是指在同一时间并发访问服务器
  • I/O密集指的是文件操作、网络操作、数据库,相对的有CPU密集,CPU密集指的是逻辑处理运算、压缩、解压、加密、解密

Web主要场景就是接收客户端的请求读取静态资源和渲染界面,所以Node非常适合Web应用的开发。

JS单线程

javascript在最初设计时设计成了单线程,为什么不是多线程呢?如果多个线程同时操作DOM那岂不会很混乱?这里所谓的单线程指的是主线程是单线程的,所以在Node中主线程依旧是单线程的。

  • 单线程特点是节约了内存,并且不需要在切换执行上下文
  • 而且单线程不需要管锁的问题

同步异步和阻塞非阻塞

  • 同步就是在执行某段代码时,代码没有得到返回之前,其他代码无法执行,当得到了返回值后可以继续执行其他代码。
  • 异步就是在执行某段代码时,代码不会立即得到返回结果,可以继续执行其他代码,返回值通过回调来获取

Node中的模块

commonjs 规范

_dirname

_filename

exports

module

require()

Buffer

编码

一个字节由 8 个位组成,gbk 中一个汉字由 2 个字节表示,utf8 中一个汉字由 3 个字节组成

  • ASCII 编码
  • GB2312
  • GBK
  • GB18030
  • Unicode
  • UTF-8

内容会被转为十六进制,比如数字 1 在 ascii 表中为 49(十进制),转成十六进制就是 31。

1
2
3
var buffer = Buffer.from('1')
console.log(buffer) // <Buffer 31>
console.log(buffer.toString()) // 1

Node 中不支持 GBK 编码,需要将 GBK 转为 UTF8 编码。

1
2
3
4
5
var iconv = require('iconv-lite')
function readGBKText(pathname) {
var bin = fs.readFileSync(pathname)
return iconv.decode(bin, 'gbk')
}

1

分享到:

评论完整模式加载中...如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理