使用 Stream
当我们读取一个文件内容时,可能会这么写:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res) {
fs.readFile(__dirname + '/data.txt', function (err, data) {
res.end(data);
});
});
server.listen(8000);
当这个文件 data.txt 非常大时,不仅会占满内存,而且对于网络不好的用户而言体验将非常差。
好在 req 和 res 都是 Stream 对象,我们可以使用 Stream 的方式来写代码:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res) {
var stream = fs.createReadStream(__dirname + '/data.txt');
stream.pipe(res);
});
server.listen(8000);
我们使用 fs.createReadStream 创建了一个 Stream 对象,.pipe() 方法会监听对应的 data
和 end
事件。
使用 Stream 的好处在于,我们将 data.txt 分段(chunk)传输到客户端,减轻了网络带宽的压力。