每当刷新页面时,My Express服务器都会因某种原因挂起。检查调试日志显示以下行导致严重滞后:
express:router dispatching GET / +16s
express:router dispatching GET /o/jquery.js +35s
简单GET
事件如何在第二次加载时减慢页面速度,但第一次加载时却没有?我下载了jQuery以内化我的依赖项。
不依赖于数据库的简化代码托管在my GitHub.
上您可以下载我的repo,然后从我的package.json
安装依赖项,然后运行我的server.js
文件。该网页将在localhost:4000运行。只需刷新页面就会使其挂起,显示问题所在。问题应该在我的server.js
,routing/api.js
,routing/modules.js
或routing/front-end.js
文件中。
答案 0 :(得分:0)
一个问题是while
中的gen_modules()
循环在第二次调用时变成无限循环。这是代码的有效部分:
var rand_url = Math.random().toString(36).replace(/[^\w]+/g, '').substring(16);
while (exports.rand_urls[rand_url]) {
// Regenerate random strings until there are no matches. Should be reletively fast.
rand_url = Math.random().toString(36).replace(/[^\w]+/g, '').substring(16);
}
问题是.substring(16)
从第16个字符开始,并从那里给你剩下的字符串,这将导致一个空字符串(也许你打算使用.substring(0,16)
。所以,在你之后填充第一个exports.rand_urls[rand_url]
值,您不断尝试找到另一个唯一的值,但是您反复进行相同的空字符串,这样您就永远找不到唯一的字符串,因此while
循环永不退出。
根本没有理由截断字符串。您可以将其保留为:
var rand_url = Math.random().toString(36).replace(/[^\w]+/g, '');
while (exports.rand_urls[rand_url]) {
// Regenerate random strings until there are no matches. Should be reletively fast.
rand_url = Math.random().toString(36).replace(/[^\w]+/g, '');
}
或者,如果要截断它,可以在第0个索引处启动它:
var rand_url = Math.random().toString(36).replace(/[^\w]+/g, '').substring(0, 16);
while (exports.rand_urls[rand_url]) {
// Regenerate random strings until there are no matches. Should be reletively fast.
rand_url = Math.random().toString(36).replace(/[^\w]+/g, '').substring(0, 16);
}