Caching favicon node client connection for speed.

This commit is contained in:
Samuel Clay 2012-04-07 14:59:12 -07:00
parent b5edf68df9
commit 04afabc411
2 changed files with 42 additions and 34 deletions

View file

@ -2,27 +2,30 @@ express = require 'express'
mongo = require 'mongodb'
MONGODB_SERVER = if process.env.NODE_ENV == 'dev' then 'localhost' else 'db04'
db = new mongo.Db('newsblur', new mongo.Server(MONGODB_SERVER, 27017))
server = new mongo.Server(MONGODB_SERVER, 27017,
auto_reconnect: true
poolSize: 12)
db = new mongo.Db('newsblur', server)
app = express.createServer()
app.use express.bodyParser()
db.open (err, @client) =>
db.open (err, client) =>
client.collection "feed_icons", (err, @collection) =>
app.get /^\/rss_feeds\/icon\/(\d+)\/?/, (req, res) =>
# console.log "Req: #{req.params}"
feed_id = parseInt(req.params, 10)
@client.collection "feed_icons", (err, collection) ->
collection.findOne _id: feed_id, (err, docs) ->
if not err and docs and docs.data
etag = req.header('If-None-Match')
if etag and docs.color == etag
res.send 304
else
res.header 'etag', docs.color
res.send new Buffer(docs.data, 'base64'),
"Content-Type": "image/png"
@collection.findOne _id: feed_id, (err, docs) ->
if not err and docs and docs.data
etag = req.header('If-None-Match')
if etag and docs.color == etag
res.send 304
else
res.redirect '/media/img/icons/silk/world.png'
res.header 'etag', docs.color
res.send new Buffer(docs.data, 'base64'),
"Content-Type": "image/png"
else
res.redirect '/media/img/icons/silk/world.png'
app.listen 3030

View file

@ -1,5 +1,5 @@
(function() {
var MONGODB_SERVER, app, db, express, mongo,
var MONGODB_SERVER, app, db, express, mongo, server,
_this = this;
express = require('express');
@ -8,38 +8,43 @@
MONGODB_SERVER = process.env.NODE_ENV === 'dev' ? 'localhost' : 'db04';
db = new mongo.Db('newsblur', new mongo.Server(MONGODB_SERVER, 27017));
server = new mongo.Server(MONGODB_SERVER, 27017, {
auto_reconnect: true,
poolSize: 12
});
db = new mongo.Db('newsblur', server);
app = express.createServer();
app.use(express.bodyParser());
db.open(function(err, client) {
_this.client = client;
return client.collection("feed_icons", function(err, collection) {
_this.collection = collection;
});
});
app.get(/^\/rss_feeds\/icon\/(\d+)\/?/, function(req, res) {
var feed_id;
feed_id = parseInt(req.params, 10);
return _this.client.collection("feed_icons", function(err, collection) {
return collection.findOne({
_id: feed_id
}, function(err, docs) {
var etag;
if (!err && docs && docs.data) {
etag = req.header('If-None-Match');
if (etag && docs.color === etag) {
return res.send(304);
} else {
res.header('etag', docs.color);
return res.send(new Buffer(docs.data, 'base64'), {
"Content-Type": "image/png"
});
}
return _this.collection.findOne({
_id: feed_id
}, function(err, docs) {
var etag;
if (!err && docs && docs.data) {
etag = req.header('If-None-Match');
if (etag && docs.color === etag) {
return res.send(304);
} else {
return res.redirect('/media/img/icons/silk/world.png');
res.header('etag', docs.color);
return res.send(new Buffer(docs.data, 'base64'), {
"Content-Type": "image/png"
});
}
});
} else {
return res.redirect('/media/img/icons/silk/world.png');
}
});
});