suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Javascript – NodeJS-Optimierungsproblem

Wenn ich NodeJS verwenden muss, um mehrere Java-Schnittstellen anzufordern und schließlich alle Daten zum Rendern der Seite abzurufen, wie kann ich dann die Geschwindigkeit verbessern? Ich war schon einmal so

 //请求接口
  http.tp(options,function(error,response,tags){
        http.tp(options1,function(error,response,topic){
            http.tp(follow,function(error,response,follow){
                http.tp(options2,function(error,response,topicRCMD){
                    data={
                        follow:follow,
                        topicRCMD:topicRCMD,
                        tags:tags,
                        topicHot:topic,
                    }
                    opt.render(data);  //渲染页面
                })
            })
        })
    })

Das ist sehr langsam. Dann habe ich async zitiert

return async.parallel({
        //我关注的人
        follow:function(callback){
            http.tp(follow,function(error, response, follow){
                callback(null, follow);
            })
        },
        // 获取标签
        tags:function(callback){
            http.tp(options,function(error, response, tags){
                callback(null, tags);
            })
        },
        // 获取热门话题
        topicHot:function(callback){
            http.tp(options1,function(error, response, topicHot){
                callback(null, topicHot);
            })
        },
        // 获取推荐话题列表
        topicRCMD:function(callback){
            http.tp(options2,function(error, response, topicRCMD){
                callback(null, topicRCMD);
            })
        }
    },
    function(err, results){
        console.log('ssss:',results);
        opt.render(results); //渲染页面
    });

Dadurch wird die Geschwindigkeit etwas erhöht, aber es ist immer noch sehr langsam. Gibt es eine gute Lösung dafür?

过去多啦不再A梦过去多啦不再A梦2749 Tage vor451

Antworte allen(5)Ich werde antworten

  • ringa_lee

    ringa_lee2017-05-16 13:46:59

    第一个方法慢是因为需要花费的时间是所有请求时间的总和;第二种方法只需要花费最长的那个请求需要的时间,自然会快一些
    再想优化了就需要在渲染过程或者服务器端请求处理过程上优化了

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-16 13:46:59

    只能用promise.all类似的了吧,如果有什么好的方法可以告诉我。

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:46:59

    这个问题其实是渲染的策略问题,其实不需要在Node把所有数据请求完全后再发送到客户端。

    完全可以把这个请求数据的步骤放到客户端,然后客户端ajax获取数据。这就不需要等所有数据获取完。

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:46:59

    可以用es6语法中新增的promise,专门解决你这种回调黑洞的情况。

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:46:59

    感觉需要考虑两点,第一,你所有的都是依赖前一个吗?有没有可能并行发一些请求;第二,有没有可能分清主次,让客户端去发请求,毕竟客户端视窗就那么大,主次关系会很明确,客户端发请求,先发重要的,用户首屏加载会看到的,再发后面的;

    Antwort
    0
  • StornierenAntwort