[英]Next.js/Mongodb Assignment Status for Individual Student in a LMS
[英]Why cache MongoDB connection in Next.js? And does it work?
我正在創建一個 Next.js 應用程序,我注意到許多開發人員緩存了 MongoDB 連接。 例如
let cachedClient = null;
let cachedDb = null;
export async function connectToDatabase() {
if (cachedClient && cachedDb) {
return {
client: cachedClient,
db: cachedDb,
};
}
const opts = {
useNewUrlParser: true,
useUnifiedTopology: true,
};
let client = new MongoClient(MONGODB_URI, opts);
await client.connect();
let db = client.db(MONGODB_DB);
cachedClient = client;
cachedDb = db;
return {
client: cachedClient,
db: cachedDb,
};
}
或者
let cached = global.mongoose
if (!cached) {
cached = global.mongoose = { conn: null, promise: null }
}
async function dbConnect () {
if (cached.conn) {
return cached.conn
}
if (!cached.promise) {
const opts = {
useNewUrlParser: true,
useUnifiedTopology: true,
bufferCommands: false,
bufferMaxEntries: 0,
useFindAndModify: true,
useCreateIndex: true
}
cached.promise = mongoose.connect(MONGODB_URI, opts).then(mongoose => {
return mongoose
})
}
cached.conn = await cached.promise
return cached.conn
}
我從未在 Express 應用程序中看到過這種情況,所以我有兩個問題:
在 Next.Js 中,您可以緩存一些變量,mongo 連接就是其中之一。 它將顯着提高應用程序的響應時間,因為對頁面的第一次調用將使所有調用 mongo 以建立連接,並且這樣做可能需要超過 2 秒,在您穩定此連接后,您可以重用未來對同一頁面的調用(在本地緩存的情況下),它將分配花費在創建連接上的那 2 秒(從而更快地響應您的用戶)。
例如:
1° Request to your page:
2300ms spent to get a response //Had to establish a new connection with mongo
2° Request to your page:
230ms spent to get a response //Used cached connection
3° Request to your page:
180ms spent to get a response //Used cached connection
4° Request to your page:
210ms spent to get a response //Used cached connection
...
全局緩存和“讓”緩存之間的區別在於哪些函數將使用相同的連接。 根據您的應用程序的用途,您可以使用全局緩存,它將防止您的應用程序中的每個 function 創建您自己的與 mongo 的連接,並花費我提到的 2 秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.