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的更多相关文章

  1. node 之 Buffer 笔记

    1. Buffer 相关 js 最初是被设计来处理 html的,因此它不善于处理二进制数据,只有数值和字符串类型.而 node 是基于 js 的,因为 node 需要实现一些譬如数据库通信.操作图像及 ...

  2. Node.js——Buffer

    介绍 JavaScript没有读取和操作二进制数据流的机制,但是 node.js 引入了Buffer 类型,可以操作TCP流或者文件流 使用Buffer可以用来对临时数据(二进制数据)进行存储,当我们 ...

  3. node的buffer模块

    Buffer这块很早前就想留一篇笔记.前端JS处理buffer的场景其实并不多,虽然后来基于webGL与显卡通信的需求增加了二进制数组,但毕竟相对小众. Buffer的含义是,在数据传输时用内存中的一 ...

  4. Node.js Buffer(缓冲区)

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门 ...

  5. 配置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 ...

  6. 部署node api的二三事

    当接到node开发node api的时候,我就想用docker来部署,众所周知,node的版本更新迭代很快.很多以前需要babel后才能采用的方法正在不断被node 原生的支持.如果随便更换生产服务器 ...

  7. Headless Chrome Node API

    puppeteer Headless Chrome Node API https://github.com/GoogleChrome/puppeteer https://pptr.dev/ PWA h ...

  8. node api 之:Buffer

    在 ECMAScript 2015 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制. Buffer 类被引入作为 Node.js API 的一部分,使其可 ...

  9. node api 之:stream - 流

    stream 模块可以通过以下方式使用: const stream = require('stream'); 流可以是可读的.可写的.或者可读可写的. 所有的流都是 EventEmitter 的实例. ...

随机推荐

  1. java heap space解决方法和JVM参数设置

    在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError: Java ...

  2. Eclipse中spring项目的XML文件的问题

    XML文件提示Start state definition is missing. Add a 'start-state' element 原因:Eclipse 认为 XML 是“Spring Web ...

  3. Python 遍历文件夹 listdir walk 的区别

    一.一级目录import os path = 'd:\file'; for filename in os.listdir(path): print(os.path.join(path,filename ...

  4. The Hard Thing About Hard Things

    1.大多数的管理书籍都是告诉你如何做正确的事,不把事情搞砸.而好书是告诉你,当事情已经搞砸时,你该怎么办. 2.这是个个真实的世界,他们偷走了你的梦想,可你却不知道是谁偷的.

  5. ALL ANY SOME 这样解释好理解很多

    --All:对所有数据都满足条件,整个条件才成立,例如:5大于所有返回的id select * from #A where 5>All(select id from #A) go --Any:只 ...

  6. java线程状态及转换

    java线程有6种状态: 新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated 1.限时等待timed w ...

  7. luoguP3366 [模板] 最小生成树

    题目链接:https://www.luogu.org/problemnew/show/P3366 思路: 求最小生成树的模板题,求MST有两种算法——Prim.Kruskal. 两者区别:Prim在稠 ...

  8. Python3 pow() 函数

    Python3 pow() 函数  Python3 数字 描述 pow() 方法返回 xy(x的y次方) 的值. 语法 以下是 math 模块 pow() 方法的语法: import math mat ...

  9. DataTable学习笔记---排序细则、列隐藏

    耽误了好几天,因为要做一个嵌入式的实验-android内核编译与裁剪,很久之前装的wubi不知道为什么运行出错了,然后看着当前的win7系统觉得有点讨厌了,也是因为快1年半没装机了,所以就重新装机了, ...

  10. html转义字符对照表

    常用的html转义字符 字符 描述 实体名称 实体编号 " quotation mark(双引号“半角”) " " ' apostrophe (单引号‘半角’) & ...