我试图在提供内容之前动态连接文件。以下非常简化的代码显示了一种方法:
var http = require('http');
var fs = require('fs');
var start = '<!doctype html><html lang="en"><head><script>';
var funcsA = fs.readFileSync('functionsA.js', 'utf8');
var funcsB = fs.readFileSync('functionsB.js', 'utf8');
var funcsC = fs.readFileSync('functionsC.js', 'utf8');
var finish = '</script></head><body>some stuff here</body></html>';
var output = start + funcsA + funcsB + funcsC + finish;
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(output);
}).listen(9000);
实际上,我如何连接可能取决于来自 userAgent 的线索。我的标记和脚本加起来可能有几百千字节。
我喜欢这种方法,因为在 createServer 中没有发生文件系统 I/O。我似乎在某处读到,这种response.write(...);
方法不如使用一种fs.createReadStream
方法的流式数据高效/低开销。我似乎记得这与客户端无法像 Node 发送数据一样快地接收数据时发生的情况有关。(?)我们似乎能够从文件系统对象创建可读流,但不能从内存创建。是否可以使用流式处理方法完成我上面编写的代码?最初在 CreateServer 函数之外发生文件 I/O吗?
或者,另一方面,我的担忧不是那么重要吗,上面的方法提供的效率可能不低于流式方法。
谢谢。