极高的加载时间-请求未运行异步。猫鼬

时间:2019-04-24 00:24:11

标签: mongodb express asynchronous mongoose

概述

我已经使用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请求,但是它们应该花的时间不多

“网络”标签的屏幕截图:

enter image description here

(忽略失败的请求和一些重复的命名请求)

StackOverflow的经验请帮忙。这是一个非常大的应用程序,我不知道到底是什么问题,因此,如果我错过了任何细节-抱歉,我将澄清所有需要澄清的内容。

1 个答案:

答案 0 :(得分:0)

每个聊天消息以及其他地方都存储了来自以前废弃的,实现不佳的图像上载功能的大量base64编码数据,从而导致大量数据被加载,最终导致巨大的加载时间。 / p>

谢谢Neil Lunn