node API buffer
https://cnodejs.org/topic/5189ff4f63e9f8a54207f60c
1、拼接字符串时,String比buffer要快,buffer需要toString()。当保存非utf-8字符串,2进制等等其他格式的时候,需要使用buffer。
var string3, buffer3;
console.time('write 1024*1024*10 string');
for(var j=0; j<1024*1024*10; j++){
var x = j+'';
string3 += x;
}
console.timeEnd('write 1024*1024*10 string');
console.time('write 1024*1024*10 buffer');
buffer3 = new Buffer(1024*1024*10);
for(var j=0; j<1024*1024*10; j++){
var x = j+'';
buffer3.write(x, j);
}
console.timeEnd('write 1024*1024*10 buffer');
//注意console的写法;buffer的创建,拼接。
2、buffer 8KB 会导致内存泄露
当我们实例化一个新的Buffer类,会根据实例化时的大小去申请内存空间,如果需要的空间小于8KB,则会多一次判定,判定当前的8KB载体剩余容量是否够新的buffer实例,如果够用,则将新的buffer实例保存在当前的8KB载体中,并且更新剩余的空间。如果不够用,则新申请一个8KB,并作为当前载体。
3、buffer拼接方法性能比较
var buf = new Buffer('sasdasd');
console.time('string += buf');
var s = '';
for(var j=0; j<100000; j++){
s += buf;
}
console.log('s.length:'+s.length);
console.timeEnd('string += buf');
console.time('buf concat');
var list = [];
var len = 0;
for(var j=0; j<100000; j++){
list.push(buf);
len += buf.length;
}
var s2 = Buffer.concat(list, len).toString();
console.log('s2.length:'+s2.length);
console.timeEnd('buf concat');
//后者要快
到这一步,我脑子就抽风了,想比较一个1的第二种方法 和 3的第二种方法,哪种更快:
var buf = new Buffer('sasdasd');
console.time('write 1024*1024*10 buffer');
var buffer3 = new Buffer(700000);
for(var j=0; j<100000; j++){
var x = 'sasdasd';
buffer3.write(x, j);
}
console.log('buffer3.length:'+buffer3.length);
console.timeEnd('write 1024*1024*10 buffer');
console.time('buf concat');
var list = [];
var len = 0;
for(var j=0; j<100000; j++){
list.push(buf);
len += buf.length;
}
var s2 = Buffer.concat(list, len).toString();
console.log('s2.length:'+s2.length);
console.timeEnd('buf concat');
写法有些变化,不过还是后一种更快。
接下来说说+=更容易出现的错误:根据《深入浅出node.js》
1、data += chunk; 等价于 data.toString() = data.toString() + chunk.toString();
2、toString()默认utf-8编码,这种情况下中文占3个字节,中文是宽字节编码,chunk有可能截断中文字符串,导致有些字节显示为乱码。
node API buffer的更多相关文章
- node 之 Buffer 笔记
1. Buffer 相关 js 最初是被设计来处理 html的,因此它不善于处理二进制数据,只有数值和字符串类型.而 node 是基于 js 的,因为 node 需要实现一些譬如数据库通信.操作图像及 ...
- Node.js——Buffer
介绍 JavaScript没有读取和操作二进制数据流的机制,但是 node.js 引入了Buffer 类型,可以操作TCP流或者文件流 使用Buffer可以用来对临时数据(二进制数据)进行存储,当我们 ...
- node的buffer模块
Buffer这块很早前就想留一篇笔记.前端JS处理buffer的场景其实并不多,虽然后来基于webGL与显卡通信的需求增加了二进制数组,但毕竟相对小众. Buffer的含义是,在数据传输时用内存中的一 ...
- Node.js Buffer(缓冲区)
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门 ...
- 配置web pack loader 报错:Module build failed: Error: The node API for `babel` has been moved to `babel-core`.
报错如下 Module build failed: Error: The node API for `babel` has been moved to `babel-core`. 在我配置loader ...
- 部署node api的二三事
当接到node开发node api的时候,我就想用docker来部署,众所周知,node的版本更新迭代很快.很多以前需要babel后才能采用的方法正在不断被node 原生的支持.如果随便更换生产服务器 ...
- Headless Chrome Node API
puppeteer Headless Chrome Node API https://github.com/GoogleChrome/puppeteer https://pptr.dev/ PWA h ...
- node api 之:Buffer
在 ECMAScript 2015 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制. Buffer 类被引入作为 Node.js API 的一部分,使其可 ...
- node api 之:stream - 流
stream 模块可以通过以下方式使用: const stream = require('stream'); 流可以是可读的.可写的.或者可读可写的. 所有的流都是 EventEmitter 的实例. ...
随机推荐
- java heap space解决方法和JVM参数设置
在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError: Java ...
- Eclipse中spring项目的XML文件的问题
XML文件提示Start state definition is missing. Add a 'start-state' element 原因:Eclipse 认为 XML 是“Spring Web ...
- Python 遍历文件夹 listdir walk 的区别
一.一级目录import os path = 'd:\file'; for filename in os.listdir(path): print(os.path.join(path,filename ...
- The Hard Thing About Hard Things
1.大多数的管理书籍都是告诉你如何做正确的事,不把事情搞砸.而好书是告诉你,当事情已经搞砸时,你该怎么办. 2.这是个个真实的世界,他们偷走了你的梦想,可你却不知道是谁偷的.
- ALL ANY SOME 这样解释好理解很多
--All:对所有数据都满足条件,整个条件才成立,例如:5大于所有返回的id select * from #A where 5>All(select id from #A) go --Any:只 ...
- java线程状态及转换
java线程有6种状态: 新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated 1.限时等待timed w ...
- luoguP3366 [模板] 最小生成树
题目链接:https://www.luogu.org/problemnew/show/P3366 思路: 求最小生成树的模板题,求MST有两种算法——Prim.Kruskal. 两者区别:Prim在稠 ...
- Python3 pow() 函数
Python3 pow() 函数 Python3 数字 描述 pow() 方法返回 xy(x的y次方) 的值. 语法 以下是 math 模块 pow() 方法的语法: import math mat ...
- DataTable学习笔记---排序细则、列隐藏
耽误了好几天,因为要做一个嵌入式的实验-android内核编译与裁剪,很久之前装的wubi不知道为什么运行出错了,然后看着当前的win7系统觉得有点讨厌了,也是因为快1年半没装机了,所以就重新装机了, ...
- html转义字符对照表
常用的html转义字符 字符 描述 实体名称 实体编号 " quotation mark(双引号“半角”) " " ' apostrophe (单引号‘半角’) & ...