Si je dois utiliser nodejs pour demander plusieurs interfaces Java et enfin obtenir toutes les données pour afficher la page, comment puis-je améliorer la vitesse
J'étais comme ça avant
//请求接口
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); //渲染页面
})
})
})
})
C'est très lent. Ensuite, j'ai cité async
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); //渲染页面
});
Cela rend la vitesse un peu plus rapide, mais elle reste très lente. Existe-t-il une bonne solution à cela
?
La première méthode est lente car le temps qu'elle prend est la somme de tous les temps de requête ; la deuxième méthode ne prend que le temps de la requête la plus longue, ce qui sera naturellement plus rapide
Si vous souhaitez l'optimiser, vous devez le faire en le processus de rendu ou Le processus de traitement des requêtes côté serveur a été optimisé
Vous ne pouvez utiliser que quelque chose comme promise.all. S'il existe une bonne méthode, dites-le-moi.
Ce problème est en fait un problème de stratégie de rendu. En fait, il n'est pas nécessaire de terminer toutes les demandes de données dans Node avant de les envoyer au client.
Vous pouvez complètement confier cette étape de demande de données au client, puis le client utilise ajax pour obtenir les données. Cela élimine le besoin d’attendre que toutes les données soient obtenues.
Vous pouvez utiliser la nouvelle promesse dans la syntaxe es6 pour résoudre spécifiquement votre situation de trou noir de rappel.
J'ai l'impression que je dois considérer deux points. Premièrement, comptez-vous sur le précédent pour tout ? Est-il possible d'envoyer certaines requêtes en parallèle ? Deuxièmement, est-il possible de distinguer les priorités et de laisser le client envoyer des requêtes ? Après tout, la fenêtre du client n'est pas grande et la relation entre les priorités sera claire lorsque le client envoie. les demandes, les plus importantes sont envoyées en premier. Les utilisateurs le verront lors du chargement du premier écran, puis publieront les suivantes
;