Чрезвычайно высокое время загрузки - запросы не работают асинхронно.Мангуста - PullRequest
2 голосов
/ 24 апреля 2019

Обзор

Я создал приложение с 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 запросов, выполняемых параллельно, хотя и довольно больших запросов, но они не должны занимать столько времени, сколько они

Снимок экрана вкладки сети:

enter image description here

(игнорируйте неудавшийся запрос и некоторые дублированные именованные запросы)

Sempais StackOverflow, пожалуйста, помогите.Это очень большое приложение, и я не знаю, в чем конкретно проблема, поэтому, если я пропустил какие-либо детали - извинения, я разъясню все, что требует ясности.

1 Ответ

0 голосов
/ 25 апреля 2019

Большой объем данных в кодировке base64 от ранее заброшенной и плохо реализованной функции загрузки изображений хранился в каждом сообщении чата, а также в других местах, вызывая загрузку больших объемов данных и в конечном итоге приводя к огромным временам загрузки.

Спасибо Нил Ланн .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...