Обзор
Я создал приложение с Vue, Express и MongoDB (mongoose 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 основных компонентов.Каждый компонент делает запрос на получение.Один из них - это столбец чата, код которого выглядит следующим образом:
ChatCol.vue
beforeMount () {
this.$store.dispatch('retrieve_chat')
}
Store.js (я использую Vuex store)
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 запросов, выполняемых параллельно, хотя и довольно больших запросов, но они не должны занимать столько времени, сколько они
Снимок экрана вкладки сети:
(игнорируйте неудавшийся запрос и некоторые дублированные именованные запросы)
Sempais StackOverflow, пожалуйста, помогите.Это очень большое приложение, и я не знаю, в чем конкретно проблема, поэтому, если я пропустил какие-либо детали - извинения, я разъясню все, что требует ясности.