概述
我已经使用Vue,Express和MongoDB(猫鼬ORM)构建了一个应用程序。 在加载登录页面时,会针对各种数据位进行一系列GET请求。加载时间非常长,我记录了特定路线的时间高达22秒。尽管我在逻辑中指定一切都应该异步运行,但我仍然相信我的请求是按顺序运行的
我尝试减小从请求返回的对象的大小以及使用.lean()
方法。这些尝试缩短了几秒钟,但总的问题并未得到远程解决。时代仍然很愚蠢。举个例子:
从此:
// Method to find all users
var users = await User.find({});
收件人:
// Method to find all users
var users = await User.find({}, "username, uid").lean();
在相关页面上,大约有5个主要组件。每个组件都在发出一个get请求。其中之一是“聊天列”,其代码如下:
ChatCol.vue
beforeMount () {
this.$store.dispatch('retrieve_chat')
}
Store.js(上午使用Vuex商店)
retrieve_chat (context) {
return new Promise((resolve, reject) => {
axios({
url: api.dev + 'api/v1/chat',
method: 'GET',
})
.then(res => {
context.commit('set_chat', res.data)
resolve(res);
}).catch(err => {
// alert(err)
reject(err);
})
})
},
正在所有组件上发出这种格式的请求。该页面中大约有5个。
后端/服务器代码
为正在发出的请求提供一些背景信息。 客户将选择“ http://localhost:3000/api/v1/chat”路线
以及在服务器上发出请求的代码如下:
var Chat = require("../models/ChatMessage");
module.exports = {
// LIMIT CHAT TO 100 MESSAGES
async get_chat(req, res) {
Chat.find({}, function(err, messages) {
if (err) {
return res.status(500).send({
message: "Interval Server Error",
type: "MONGO_CHAT_DOCUMENT_QUERY",
err: err,
})
}
if (!messages) {
return res.status(400).send({
message: "Resource not found",
type: "MONGO_CHAT_DOCUMENT_QUERY",
details: "!messages - no messages found",
})
}
messages.reverse();
return res.status(200).json({
messages,
});
}).sort({"_id": -1}).limit(30);
},
}
如果我在chrome开发工具上查看“网络”标签,这就是请求的显示方式。很抱歉,帖子冗长,我真的不知道是什么原因造成的
重要提示:
我曾说过,mongodb具有此功能,可以在对数据进行变异时将其锁定,我认为可能是这种情况,但是没有发生变异。尽管有很大的请求,但是并行发生的只有3/4个get请求,但是它们应该花的时间不多
“网络”标签的屏幕截图:
(忽略失败的请求和一些重复的命名请求)
StackOverflow的经验请帮忙。这是一个非常大的应用程序,我不知道到底是什么问题,因此,如果我错过了任何细节-抱歉,我将澄清所有需要澄清的内容。
答案 0 :(得分:0)
每个聊天消息以及其他地方都存储了来自以前废弃的,实现不佳的图像上载功能的大量base64编码数据,从而导致大量数据被加载,最终导致巨大的加载时间。 / p>
谢谢Neil Lunn。