极高的加载时间 - 请求未异步运行。猫鼬
Posted
技术标签:
【中文标题】极高的加载时间 - 请求未异步运行。猫鼬【英文标题】:Extremely high loading times - Requests not running async. Mongoose 【发布时间】:2019-09-13 05:17:24 【问题描述】:概述
我已经使用 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 个主要组件。每个组件都在发出一个 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 请求并行发生,尽管请求非常大,但它们不应该花这么长时间
网络标签的屏幕截图:
(忽略失败的请求,以及一些重复的命名请求)
*** sempais 请帮忙。这是一个非常大的应用程序,我不知道到底是什么问题,所以如果我错过了任何细节 - 抱歉,我会澄清任何需要澄清的地方。
【问题讨论】:
/chat
的响应为 17MB。为什么您可能要加载 17MB 的数据以显示在网页中? 那是你真正的问题,与查看 MongoDB 内部或其他类似的东西无关。所以不清楚你在这 30 个结果中实际存储了什么,但是 17MB 对于网页来说太大了,所以你需要“修剪”你存储在那里的脂肪,因为没有必要这样做。
谢谢,我现在找到了导致如此大量数据加载的原因。感谢您指出这一点。
【参考方案1】:
来自先前废弃且实施不佳的图像上传功能的大量 base64 编码数据存储在每个聊天消息以及其他地方,导致加载大量数据并最终导致加载时间过长。
谢谢Neil Lunn。
【讨论】:
以上是关于极高的加载时间 - 请求未异步运行。猫鼬的主要内容,如果未能解决你的问题,请参考以下文章