Node.js + Express.js静态文件服务非常慢

14
有时候在开发我的Node项目时,页面无法加载,一直处于挂起状态。我会在Chrome的网络选项卡中检查,并发现它一直卡在静态文件上。导致问题的静态文件会有所不同,有时是CSS文件,有时是图像文件。
我尝试优化所有文件以解决此问题,但没有任何效果。如果在长时间加载期间刷新页面,则第二次请求将正确加载页面。这并不是每次加载页面都会发生,但在页面之间切换时很常见。
如果在Chrome网络检查器下禁用缓存,则几乎总是会发生此问题。
这是我的第一个重要的Node项目,所以可能会出现错误。
整个项目托管在Github上:http://github.com/polonel/trudesk 示例加载时间:(打开新标签页中的图像以查看全尺寸)

你能发布一下你用来提供静态文件的代码吗? - slebetman
3
你尝试将静态文件中间件放在所有其他中间件之前了吗?这样,会话中间件不会影响mongodb等,从而在获取机会提供文件之前降低速度。 - mscdex
1
将我的中间件移动到顶部确实有助于加载时间,但我仍然看到约5-10秒的加载时间。 - Chris
我也遇到了同样的问题,虽然加载时间没有你的那么长。我也在努力解决它。 - mvbl fst
2个回答

27
我遇到了完全相同的问题。我刚刚搬到一个网络连接非常差的地方,我的node.js应用程序中静态文件的加载时间增加到每个文件超过40秒。
我只是移动了静态中间件。
app.use(express.static(__dirname + '/public'));

在所有其他 app.* 调用之前,将代码添加到 app.configure 函数的顶部。

现在它的运行速度显著提高了。


3
谢谢您先生。天哪,这个问题困扰我好几周了。您真是个圣人。 - Augie Gardner
这解决了一个突然出现的非常奇怪的错误!有什么想法为什么会这样,为什么它会突然发生呢? - Trufa
我在静态文件夹前面进行了图像压缩,这样我们就不会失去太多的重量:sweat_smile:,但是需要花费很多时间。 - Et7f3XIV

0
昨晚我花了大约3个小时来解决这个问题。我发现有一个while语句严重拖慢了页面的速度:
while ((incomingUsername !== "") && (incomingPassword !== "")){
   newAccount(incomingUsername, incomingPassword);
}
function newAccount(name, password){
    console.log("ACCOUNT REGISTRATION INITIATED");
}

当我注释掉 while 语句时,页面在几秒钟内加载完成。

1
在我看来,这个 while 循环似乎永远不会退出。_条件_中的变量从未改变(就我们所见)。这会减慢页面加载速度。 - Grant Lindsay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接