我有一个带有 node.js 和 express 的网络服务器。当我提供一个很大的文本文件时,加载到浏览器中需要很长时间。想象一个 34 MB 的文本文件被提供给客户端,他只需要下载 34 MB 来检查日志文件中的内容。
有什么我可以做的吗?也许分部分上桌?喜欢:第 1/10 部分 - 第 10/10 部分
我有一个带有 node.js 和 express 的网络服务器。当我提供一个很大的文本文件时,加载到浏览器中需要很长时间。想象一个 34 MB 的文本文件被提供给客户端,他只需要下载 34 MB 来检查日志文件中的内容。
有什么我可以做的吗?也许分部分上桌?喜欢:第 1/10 部分 - 第 10/10 部分
要提供部分文件,您可以获取一个字节范围,并使用文件系统函数读取该范围fs.createReadStream()
。例如,如果你想要一个文件的十分之一,你可以测量它的大小,并计算字节范围。
app.get('/log', function(req, res) {
fs.stat('log.txt', function(err, stats) {
var end = Math.ceil(stats.size / 10);
var stream = fs.createReadStream('log.txt', {start: 0, end: end});
var log = new String();
readable.on('data', function(chunk) {
log += chunk;
});
readable.on('end', function() {
res.send(log);
});
});
});
您可以随时修改代码以从 10-20% 发送,或发送文件的最后 10%,等等。
您是否研究过节点流?您可以使用它们以小块的形式发送数据,并提供反馈以显示已下载的数据量。