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 的实例. ...
随机推荐
- ArcGIS案例学习笔记1_1
ArcGIS案例学习笔记1_1 联系方式:谢老师,135_4855_4328, xiexiaokui#qq.com 时间:第一天上午 准备 0.U盘复制ArcGIS培训*** 1.练习数据不要放到桌面 ...
- smartos介绍
https://wiki.smartos.org A Little History 2005年,Sun Microsystems开源了其著名的Unix操作系统Solaris,最终被发布为一个名为Ope ...
- zabbix出现中文不能选的情况
像这里一样,有些选项是选不了的,这个时候我们要做的第一步就是,找到这个配置文件. 如果不知道在哪里的话可以用find命令查找. sudo find / -name locales.inc.php 找到 ...
- linux安装本地blast
1)wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.8.0alpha/ncbi-blast-2.8.0-alpha+-x64-li ...
- $(this).form("validate") 始终返回false
onsubmit 提交前触发,返回 false 来阻止提交动作. validate 进行表单字段验证,当全部字段都有效时返回 true .该方法和 validatebox 插件一起使用. 解决:注释掉 ...
- 中文路径读取乱码,json乱码
strPath = 'E:\新建文件夹' #含有中文的路径,使用unicode函数转换. strPath = unicode(strPath , "utf8") 参考:http:/ ...
- Windows下Python IDLE设置
Windows下安装Python 2.7.5,发现IDLE是个不错的IDE,可以编辑.运行, 希望与.py文件关联起来,作为编辑器使用,经过尝试,找到了一个方法. 打开注册表,找到\KEY_CLA ...
- ecplice中代码使用快捷键无法格式化,使用其他方法将代码格式化的步骤
选中需要进行格式化的代码--->右键--->source--->format,就可以将代码格式化了.
- VC小笔记
1.strcpy不需要指定的长度,遇到被复制字符的串结束符’\0’才结束,容易溢出 2.memcpy(k, s, strlen(s)*sizeof(char)+1); // strlen(s) 后 + ...
- SQL 将一个字段内用逗号分隔的内容分成多条记录
转自:http://www.cnblogs.com/zfanlong1314/archive/2013/01/14/2859848.html --> 测试数据 if not object_id( ...