关于 node.js 中 passport.js 模块 "deserializeUser" 的效率
Regarding efficiency of passport.js module "deserializeUser" in node.js
所以我正在查看有关 passport.js 模块 serialize 用户的文档,以保持登录用户在会话中。 (略高于用户名和密码部分)。我正在使用 mongodb,猫鼬
passport.deserializeUser(function(id, done) {
console.log("this code is used again! ");
User.findById(id, function(err, user) {
done(err, user);
});
});
我在他们给出的示例中测试了这些代码。所以看起来每次登录用户刷新页面时都会执行这段代码。
假设有 100,000 个用户,整个应用程序中有 10 个页面,这意味着将有 100 万次查找,只是为了保持每个人的会话状态。这听起来是不是太低效了?大多数应用程序都做这种数据库搜索吗?
还是我理解错了?
没有什么能阻止您使用缓存或类似方法。其中之一可能是 https://www.npmjs.com/package/cache-manager,但请购买更多!
或者,如果您真的不需要一直了解所有用户信息,您可以 serialize/deserialize 仅用户 ID 并按需加载用户记录。在您的实例中,只需传递函数:
passport.deserializeUser(function(id, done) {
console.log("this code is used again! ");
done(null, id);
});
如果这还不够,您可以反序列化为这样的对象:
passport.deserializeUser(function(id, done) {
console.log("this code is used again! ");
done(null, {id: id, user: function(done){
User.findById(id, function(err, user) {
done(err, user);
});
}});
});
所以我正在查看有关 passport.js 模块 serialize 用户的文档,以保持登录用户在会话中。 (略高于用户名和密码部分)。我正在使用 mongodb,猫鼬
passport.deserializeUser(function(id, done) {
console.log("this code is used again! ");
User.findById(id, function(err, user) {
done(err, user);
});
});
我在他们给出的示例中测试了这些代码。所以看起来每次登录用户刷新页面时都会执行这段代码。
假设有 100,000 个用户,整个应用程序中有 10 个页面,这意味着将有 100 万次查找,只是为了保持每个人的会话状态。这听起来是不是太低效了?大多数应用程序都做这种数据库搜索吗?
还是我理解错了?
没有什么能阻止您使用缓存或类似方法。其中之一可能是 https://www.npmjs.com/package/cache-manager,但请购买更多!
或者,如果您真的不需要一直了解所有用户信息,您可以 serialize/deserialize 仅用户 ID 并按需加载用户记录。在您的实例中,只需传递函数:
passport.deserializeUser(function(id, done) {
console.log("this code is used again! ");
done(null, id);
});
如果这还不够,您可以反序列化为这样的对象:
passport.deserializeUser(function(id, done) {
console.log("this code is used again! ");
done(null, {id: id, user: function(done){
User.findById(id, function(err, user) {
done(err, user);
});
}});
});