我正在读这篇文章=> http://mgutz.com/2010/10/01/check_gmail_with_node_js.html
以下评论Shomrom说:
body + = chunk将重新分配 每次一个完整的响应字符串 块到了。我相信会的 将每个块附加到一个块上要好得多 数组并在你有的时候做一个.join() 所有你需要的。
是否
body + = chunk每次块到达时真的会重新分配整个响应字符串吗?如果是这样,改进这个片段的最佳方法是什么,我们可以尽可能便宜地打印body
?
它包含以下代码段:
var http = require('http');
var user = 'user@gmail.com';
var password = 'password';
var auth = new Buffer(user + ':' + password).toString('base64');
var google = http.createClient(443, 'mail.google.com', true);
var request = google.request('GET', '/mail/feed/atom/', {
'Host': 'mail.google.com',
'Authorization': 'Basic ' + auth
});
request.addListener('response', function(res) {
var body = '';
res.addListener('data', function(chunk) {
body += chunk;
});
res.addListener('end', function() {
console.log(body);
});
});
request.end();
答案 0 :(得分:2)
不一定每次,但一般来说它可能经常这样做(比如说一半的时间,取决于字符串的长度和JavaScript的实现)。使用数组和连接是一个很好的建议:
var bodyBuilder = [];
res.addListener('data', function(chunk) {
bodyBuilder.push(chunk);
});
完成后,加入
var body = bodyBuilder.join('');
原因是字符串通常存储为连续的字符数组。当附加额外字符时,如果在字符串末尾没有足够的可用空间来存储额外的东西,则可能必须在内存中移动该数组。一个实现可能会保留一些额外的空间,但多少是你无法控制的。