what
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是JavaScript运行环境
- 事件驱动,非阻塞IO模型
- 使用npm管理包
基本原理
- Chrome V8 是 Google 发布的开源 JavaScript 引擎,采用 C/C++ 编写,在 Google 的 Chrome 浏览器中被使用。Chrome V8 引擎可以独立运行,也可以用来嵌入到 C/C++ 应用程序中执行。
- Event Loop 事件循环(由 libuv 提供)
- Thread Pool 线程池(由 libuv 提供)
带来的好处
- 用户体验
- 资源分配
异步编程
Buffer
The
Buffer
class was introduced as part of the Node.js API to enable interaction with octet streams in TCP streams, file system operations, and other contexts.
原因:应用需要
- 处理网络协议
- 操作数据库
- 处理图片
- 接受上传文件等
处理大量二进制数据,JavaScript自由的字符串不能满足这些要求
结构
与C++结合:node_buffer–>Buffer/SlowBuffer
也就是JavaScript的Buffer或者SlowBuffer依赖于C++的内建模块,buffer内存不归v8管理,是堆外内存
声明
1 | const str="helloworld" |
内存分配
Node的C++层面实现内存申请,在JavaScript中分配内存的策略,Node采用slab的动态内存管理机制,slab的3种状态
- full:完全分配
- partial:部分分配
- empty:没有分配
Buffer.poolSize=8*1024,即以8kb为大小Buffer的分界,小于8Kb拼单,大于8kb分配大的slab被大buffer独占
转换
可以转换的类型
- asc2
- utf-8
- utf-16LE/UCS-2
- Base64
- Binary
- Hex
采用new Buffer(str,[encoding]),默认utf-8
buf.write(string,[offset],[length],[encoding])默认utf-8
buf.toString([encoding],[start],[end])默认utf-8
拼接
性能
性能大概是字符串的一倍