第二页加载或刷新后,Express服务器挂起

时间:2018-04-07 01:42:53

标签: javascript node.js express

每当刷新页面时,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.jsrouting/api.jsrouting/modules.jsrouting/front-end.js文件中。

1 个答案:

答案 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);
    }