Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I am currently struggling with a request I am making to my server that is taking more than 4 seconds!

I am using socket.io, express and mongoDB in the back end.

I cut out a lot of the cruft to hopefully make it easier to read. Excuse my horrible variable names.

I looked for a while online and it seems that .toArray() is slow for MongoDB. However I would defer to someone with more knowledge.

socket.on('userInput', function (exampleMarket) {

    //example of a collection name
    //var exampleMarket = 'FTSE100';
    var red = {};

    APP.db2.collection(exampleMarket + '-market', function(err, res) {

        if (res === null) {
            logger.log('no match in database 1')
            return
        }

        res.find().toArray(function (err,doc) {

            red=doc;

        });

    });

    var green= {

        collection  : [],
        type        : 'market',
        open        : [],
        high        : [],
        low         : [],
        volume      : [],
        close       : [],
        date        : [],
        code        : [],
        description : [],
        frequency   : [],
        fromDate    : [],
        lastUpdate  : [],
        toDate      : [],
        name        : [],
        color       : [],
        movement    : [],
        difference  : [],
        point       : [],
        tail        : [],
        chartdata   : {
            xaxis   : [],
            yaxis   : []
        }

    };

    APP.db.collection(exampleMarket, function(err, res) {

        if (res === null) {
            logger.log('no match in database 1')
            return
        }

        //logs fast
        logger.log('test1')
        socket.emit('Share', 'test1')

        res.find().toArray(function (err,doc) {
            //No errors
            logger.log(err)

            for (var i = 0; i < doc.length; i++) {

                if (doc[i].code === undefined) {
                    green.marketOverview = doc[i].market;
                    continue;

                }

                green.collection.push(exampleMarket);
                green.chartdata.xaxis.push(doc[i].date);
                green.chartdata.yaxis.push(doc[i].open);
                green.name.push(doc[i].name);

                green.toDate.push(doc[i].toDate);
                green.color.push(doc[i].color);
                green.movement.push(doc[i].movement);
                green.difference.push(doc[i].difference);
                green.point.push(doc[i].point);
                green.tail.push(doc[i].tail);

                green.open.push(doc[i].open[0]);
                green.date.push(doc[i].date[0]);
                green.high.push(doc[i].high[0]);
                green.low.push(doc[i].low[0]);
                green.volume.push(doc[i].volume[0]);
                green.close.push(doc[i].close[0]);
                green.code.push(doc[i].code);

            }

            green.marketName = exampleMarket;

            socket.emit('Share', green, red);

            //this takes about 3 seconds to log out
            logger.log('test2')
            socket.emit('Share', 'test2')

        });
        //logs fast
        socket.emit('Share', 'test3')
    });


});
share|improve this question

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.