Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Ubuntu上使用Node服务的慢速静态文件_Node.js_Express_Testem - Fatal编程技术网

Node.js 在Ubuntu上使用Node服务的慢速静态文件

Node.js 在Ubuntu上使用Node服务的慢速静态文件,node.js,express,testem,Node.js,Express,Testem,我们使用Testem来提供一系列HTML文件(模板)。在幕后,Testem使用Express的“res.sendfile”方法将静态文件发送回客户端。在Mac电脑上,这是非常快的-根据Chrome网络跟踪,每个文件1-2毫秒。然而,在Ubuntu机器上,它需要39毫秒 这是最新的稳定节点-0.10.29。Testem正在使用Express 3.1 关于可能导致这种情况的原因或如何进一步诊断的任何建议?我通常直接使用以下方式提供静态文件: app.use( express.static(__dir

我们使用Testem来提供一系列HTML文件(模板)。在幕后,Testem使用Express的“res.sendfile”方法将静态文件发送回客户端。在Mac电脑上,这是非常快的-根据Chrome网络跟踪,每个文件1-2毫秒。然而,在Ubuntu机器上,它需要39毫秒

这是最新的稳定节点-0.10.29。Testem正在使用Express 3.1


关于可能导致这种情况的原因或如何进一步诊断的任何建议?

我通常直接使用以下方式提供静态文件:

app.use( express.static(__dirname+'/public') );
中间件。您的静态文件将存储在

/<app-path>/public
如果将
file.html
放在
//public/html/
中,则会解决以下问题:

http://yoursite.com/html/file.html

http://yoursite.com/public/html/file.html
如果想要得到的结果是没有扩展的干净URL,那么我的建议就不行了。但是,如果您不介意URL中的文件扩展名,静态中间件应该可以减少请求时间,甚至可以显著减少请求时间。另外,像
dust
jade
这样的模板引擎可能会有所帮助?它将允许您使用
res.render
fn

问题是,我看到使用以下命令时请求次数增加:

res.sendfile(somepath +'/some.html');
因为express将在提供文件之前通过其regex路径解析中间件传递该文件。如果您有大量的路由,这也可能会减慢请求时间


希望有帮助

注意事项:我对Testem一无所知;但是作为一个完全的局外人,我发现你的问题中遗漏了一点:Mac和Ubuntu机器运行的是同一版本的node.js吗?Mac版本是否通过自制软件安装?如果您发送1个文件;每个文件的结果是否与发送多个文件的结果相同?如果从每台机器执行跟踪路由,结果是什么——它们采用相同的网络路径(其他所有路径都相同)?Ubuntu机器是虚拟机还是盒子?我们还需要做些什么来重现这一点?是的,奇怪的是,它在OSX中的解析速度似乎要快得多,Ubuntu env是远程服务器还是本地机器?@GeorgeStocker-节点的同一版本(通过Nave管理,而不是自制)。Ubuntu是裸机,没有虚拟机。我必须看看是否可以简化场景以进行简单的复制。为什么Linux和OS X上的regex路径解析会慢一些?我不认为regex从一个操作系统到另一个操作系统会慢一些,但我知道sendfile()与提供静态文件相比会慢一些。这似乎是一个很难解决的问题,也很难找出在OSX和Ubuntu中运行express应用程序的区别。也许您可以尝试使用express调试器运行应用程序
DEBUG=express:*节点app.js
res.sendfile(somepath +'/some.html');