From 528ee335d50c88a9a163c60f0b2be884ca6f42e0 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 6 Aug 2014 21:30:06 -0400 Subject: [PATCH] optimize getTopicsByTids and getTeasers --- src/categories.js | 7 ++ src/controllers/categories.js | 25 +---- src/database/level/sets.js | 4 + src/database/mongo/sets.js | 18 +++ src/database/redis/sets.js | 8 ++ src/privileges/categories.js | 22 ++++ src/topics.js | 206 +++++++++++++++++++++------------- src/topics/tags.js | 19 ++++ 8 files changed, 210 insertions(+), 99 deletions(-) diff --git a/src/categories.js b/src/categories.js index 59c0829473..4011f459e0 100644 --- a/src/categories.js +++ b/src/categories.js @@ -296,6 +296,13 @@ var db = require('./database'), db.getObjectField('category:' + cid, field, callback); }; + Categories.getMultipleCategoryFields = function(cids, fields, callback) { + var keys = cids.map(function(cid) { + return 'category:' + cid; + }); + db.getObjectsFields(keys, fields, callback); + }; + Categories.getCategoryFields = function(cid, fields, callback) { db.getObjectFields('category:' + cid, fields, callback); }; diff --git a/src/controllers/categories.js b/src/controllers/categories.js index dffe49bcbc..506747f741 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -74,22 +74,16 @@ categoriesController.get = function(req, res, next) { }, function(disabled, next) { if (parseInt(disabled, 10) === 1) { - return next(new Error('category-disabled')); + return next(new Error('[[error:category-disabled]]')); } - privileges.categories.get(cid, uid, function(err, categoryPrivileges) { - if (err) { - return next(err); - } - - if (!categoryPrivileges.read) { - return next(new Error('[[error:no-privileges]]')); - } - - next(null, categoryPrivileges); - }); + privileges.categories.get(cid, uid, next); }, function (privileges, next) { + if (!privileges.read) { + return next(new Error('[[error:no-privileges]]')); + } + user.getSettings(uid, function(err, settings) { if (err) { return next(err); @@ -111,12 +105,6 @@ categoriesController.get = function(req, res, next) { return next(err); } - if (categoryData) { - if (parseInt(categoryData.disabled, 10) === 1) { - return next(new Error('[[error:category-disabled]]')); - } - } - categoryData.privileges = privileges; next(err, categoryData); }); @@ -189,7 +177,6 @@ categoriesController.get = function(req, res, next) { active: x === parseInt(page, 10) }); } - res.render('category', data); }); }; diff --git a/src/database/level/sets.js b/src/database/level/sets.js index bc5aacf1b5..5d6ffabf6c 100644 --- a/src/database/level/sets.js +++ b/src/database/level/sets.js @@ -51,6 +51,10 @@ module.exports = function(db, module) { }); }; + module.getSetsMembers = function(keys, callback) { + throw new Error('not-implemented'); + }; + module.setCount = function(key, callback) { module.getListRange(key, 0, -1, function(err, set) { callback(err, set.length); diff --git a/src/database/mongo/sets.js b/src/database/mongo/sets.js index fb5f16343a..6b00ec5142 100644 --- a/src/database/mongo/sets.js +++ b/src/database/mongo/sets.js @@ -91,6 +91,24 @@ module.exports = function(db, module) { }); }; + module.getSetsMembers = function(keys, callback) { + db.collection('objects').find({_key: {$in: keys}}, {_key: 1, members: 1}).toArray(function(err, data) { + if (err) { + return callback(err); + } + var sets = {}; + data.forEach(function(set) { + sets[set._key] = set.members || []; + }); + + var returnData = new Array(keys.length); + for(var i=0; i