我正在考虑使用 nodejs 制作一个非实时应用程序。例如,博客、论坛或图片板之类的网站。
我读过 nodejs 在用于异步作业时很好。所以我想知道当用于提供大量静态文件(如大图像、css 和 js 文件等)时会产生什么结果。
发送文件时(假设是2-3MB),是不是整个服务器都会被阻塞,直到传输完成?我还读到有可能使用操作系统的sendfile()
系统调用来完成这项工作。在这种情况下,Express 是否支持这一点?
我正在考虑使用 nodejs 制作一个非实时应用程序。例如,博客、论坛或图片板之类的网站。
我读过 nodejs 在用于异步作业时很好。所以我想知道当用于提供大量静态文件(如大图像、css 和 js 文件等)时会产生什么结果。
发送文件时(假设是2-3MB),是不是整个服务器都会被阻塞,直到传输完成?我还读到有可能使用操作系统的sendfile()
系统调用来完成这项工作。在这种情况下,Express 是否支持这一点?
不,这不是真的。您可以轻松发送大文件(远大于 2-3 MB)而不会阻塞。抱怨这样阻塞 Node 事件循环的人只是不知道他们在做什么。
您不一定需要使用 Express 来获得这种行为。
话虽如此,如果您想要的是文件服务器,那么没有理由使用 NodeJS。只需将 Apache 指向一个目录,然后让它运行。为什么要重新发明轮子只是为了使用新的性感技术,而老忠实者做得很好?
如果你想使用 node 作为一个简单的 http 服务器,我可以推荐非常简单的命令行模块。
https://npmjs.org/package/http-server
我没有看过模块的代码,但它可能没有针对大文件进行优化。在这种情况下,让我们将 large 定义为不易缓存在内存中的文件(无论这对您的设置意味着什么)。如果您的用例需要更多优化(例如管道“大”文件),您可能仍然需要编写自己的模块,但这将使您快速入门,并且是在需要时用于一般开发的出色实用程序快速提供目录。