当前位置: 首页 > 面试题库 >

node.js中fs.createReadStream与fs.readFile的优缺点是什么?

卫琛
2023-03-14
问题内容

我正在弄乱node.js,发现了两种读取文件并通过有线方式发送文件的方法,一旦我确定它存在并使用writeHead发送正确的MIME类型:

// read the entire file into memory and then spit it out

fs.readFile(filename, function(err, data){
  if (err) throw err;
  response.write(data, 'utf8');
  response.end();
});

// read and pass the file as a stream of chunks

fs.createReadStream(filename, {
  'flags': 'r',
  'encoding': 'binary',
  'mode': 0666,
  'bufferSize': 4 * 1024
}).addListener( "data", function(chunk) {
  response.write(chunk, 'binary');
}).addListener( "close",function() {
  response.end();
});

如果所讨论的文件很大,例如视频,fs.createReadStream可能会提供更好的用户体验,我是否正确?感觉好像不那么块状。这是真的?我还需要了解其他优点,缺点,警告或陷阱吗?


问题答案:

如果您只是将“数据”连接到“ write()”,将“关闭”连接到“ end()”,则是一种更好的方法:

// 0.3.x style
fs.createReadStream(filename, {
  'bufferSize': 4 * 1024
}).pipe(response)

// 0.2.x style
sys.pump(fs.createReadStream(filename, {
  'bufferSize': 4 * 1024
}), response)

read.pipe(write)或” sys.pump(read, write)方法的好处还在于增加了流量控制。因此,如果写入流不能尽快接受数据,它将通知读取流回退,以最大程度地减少缓冲在内存中的数据量。

flags:"r"mode:0666由事实,这是一个暗示FileReadStream。该binary编码已过时-
如果没有指定编码,它会刚刚与原始数据缓冲区的工作。

此外,您还可以添加其他一些功能,使您的文件更加流畅:

  1. 嗅探req.headers.range并查看它是否匹配字符串/bytes=([0-9]+)-([0-9]+)/。如果是这样,您只想从该起点到终点流。(缺少数字表示0或“结尾”。)
  2. 将stat()调用中的inode和创建时间散列到ETag头中。如果您收到的请求标头具有“ if-none-match”匹配的标头,请发送回304 Not Modified
  3. 根据stat对象上的日期检查if-modified-since标题mtime。304(如果自提供日期以来未进行过修改)。

另外,通常,如果可以的话,发送Content-Length标题。(您正在stat-ing文件,因此您应该拥有此文件。)



 类似资料:
  • 问题内容: 只是想知道TreeSet的优缺点是什么,是否有人可以告诉我?谢谢! 问题答案: 收藏类之一。它使您可以按键或按键顺序访问集合中的元素。它比ArrayList或HashMap具有更多的开销。当您不需要顺序访问时,只需按键查找即可使用HashSet。使用ArrayList并使用Arrays。如果只想按顺序排列元素,则排序。TreeSet始终保持元素顺序。使用ArrayList,您可以在需要

  • 问题内容: 我正在寻找提高某些SQL性能的方法,当前CTE正在脚本中多次使用和引用。我会使用表变量来获得改进吗?(因为代码在函数内,所以不能使用临时表)。 问题答案: 您实际上必须进行性能测试-没有“是/否”答案。根据安迪·利文(Andy Living)上面链接到的文章,CTE只是查询或子查询的简写。 如果您在同一函数中两次或多次调用它,则填充表变量然后加入该表变量或从中选择表变量可能会获得更好的

  • 问题内容: 我目前正在尝试创建一个数据库,其中很大一部分数据是临时的。在通读了许多技术后(大多数涉及6nf归一化),我遇到了Anchor Modeling 。 我正在开发的模式非常类似于Anchor Modeling模型,特别是因为用例(时间数据+未知未知数)是如此相似,以至于我很想完全拥抱它。 我遇到的两个最大问题是,我无法找到详细说明这种方法的负面影响,也找不到对我需要了解的将其用于生产战争故

  • 问题内容: 我考虑过摆脱所有客户端Ajax调用(jQuery),而是使用永久套接字连接(Socket.IO)。 因此,我将在客户端和服务器端使用事件侦听器/发射器。 例如 用户在浏览器中触发click事件,客户端发射器通过套接字连接将事件推送到服务器。服务器端侦听器对传入事件做出反应,并将“完成”事件推回客户端。客户端的侦听器通过淡入DIV元素来响应传入的事件。 这完全有意义吗?优点缺点? 问题答

  • 本文向大家介绍你觉得你的优点是什么,缺点又是什么呢相关面试题,主要包含被问及你觉得你的优点是什么,缺点又是什么呢时的应答技巧和注意事项,需要的朋友参考一下 优点:对任何事物能够保持好奇心、很强的执行力、追求上进。 缺点:有些事情考虑太多,总想找出最好的办法,所以有的时候会耽误进度。所以要学会抓住主要矛盾,学会取舍。

  • 本文向大家介绍什么是闭包?优缺点分别是什么?相关面试题,主要包含被问及什么是闭包?优缺点分别是什么?时的应答技巧和注意事项,需要的朋友参考一下 上面就是闭包,有独立的作用域,且作用域的变量不会在程序中释放