node API buffer

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.