use lodash, load 3 posts per iteration

v1.18.x
Barış Soner Uşaklı 7 years ago
parent 95ace13599
commit 4b970a1072

@ -248,35 +248,33 @@ module.exports = function (Topics) {
if (!params.blockedUids.length) { if (!params.blockedUids.length) {
return setImmediate(callback, null, params.tids); return setImmediate(callback, null, params.tids);
} }
params.topicScores = {}; const topicScores = _.mapValues(_.keyBy(params.recentTids, 'value'), 'score');
params.recentTids.forEach(function (topic) {
params.topicScores[topic.value] = topic.score;
});
db.sortedSetScores('uid:' + params.uid + ':tids_read', params.tids, function (err, userScores) { db.sortedSetScores('uid:' + params.uid + ':tids_read', params.tids, function (err, results) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
params.userScores = {}; const userScores = _.zipObject(params.tids, results);
userScores.forEach(function (score, index) {
params.userScores[params.tids[index]] = score;
});
async.filter(params.tids, function (tid, next) { async.filter(params.tids, function (tid, next) {
doesTidHaveUnblockedUnreadPosts(tid, params, next); doesTidHaveUnblockedUnreadPosts(tid, {
blockedUids: params.blockedUids,
topicTimestamp: topicScores[tid],
userLastReadTimestamp: userScores[tid],
}, next);
}, callback); }, callback);
}); });
} }
function doesTidHaveUnblockedUnreadPosts(tid, params, callback) { function doesTidHaveUnblockedUnreadPosts(tid, params, callback) {
var topicTimestamp = params.topicScores[tid]; var userLastReadTimestamp = params.userLastReadTimestamp;
var userLastReadTimestamp = params.userScores[tid];
if (!userLastReadTimestamp) { if (!userLastReadTimestamp) {
return setImmediate(callback, null, true); return setImmediate(callback, null, true);
} }
var start = 0; var start = 0;
var count = 5; var count = 3;
var done = false; var done = false;
var hasUnblockedUnread = topicTimestamp > userLastReadTimestamp; var hasUnblockedUnread = params.topicTimestamp > userLastReadTimestamp;
async.whilst(function () { async.whilst(function () {
return !done; return !done;
@ -469,14 +467,7 @@ module.exports = function (Topics) {
var read = !results.tids_unread[index] && var read = !results.tids_unread[index] &&
(results.topicScores[index] < cutoff || (results.topicScores[index] < cutoff ||
!!(results.userScores[index] && results.userScores[index] >= results.topicScores[index])); !!(results.userScores[index] && results.userScores[index] >= results.topicScores[index]));
return { tid: tid, read: read }; return { tid: tid, read: read, index: index };
});
var topicScores = {};
var userScores = {};
tids.forEach(function (tid, index) {
topicScores[tid] = results.topicScores[index];
userScores[tid] = results.userScores[index];
}); });
async.map(result, function (data, next) { async.map(result, function (data, next) {
@ -484,8 +475,8 @@ module.exports = function (Topics) {
return next(null, true); return next(null, true);
} }
doesTidHaveUnblockedUnreadPosts(data.tid, { doesTidHaveUnblockedUnreadPosts(data.tid, {
topicScores: topicScores, topicTimestamp: results.topicScores[data.index],
userScores: userScores, userLastReadTimestamp: results.userScores[data.index],
blockedUids: results.blockedUids, blockedUids: results.blockedUids,
}, function (err, hasUnblockedUnread) { }, function (err, hasUnblockedUnread) {
if (err) { if (err) {

Loading…
Cancel
Save