2012-03-15 1 views
3

Expressで簡単にページをキャッシュできますか?できればMemcachedですか?私はJadeをテンプレートシステムとして使用しています。私は訪問者のために特定のページを約30秒間キャッシュしたいと思っています。好ましくはexpress.renderを使用していますが、私は提案することができます。ありがとう!Node.jsページキャッシュ

答えて

8

レンダリングの結果を処理する必要があります。

var cache = {}; 

var getPageFromCache(url, callback) { 
    if (cache[url]) { 
     // Get page from cache 
     callback(undefined, cache[url]); 
    } else { 
     // Get nothing 
     callback(); 
    } 
}; 

var setPageToCache(url, content) { 
    // Save to cache 
    cache[url] = content; 
}; 

app.get('/', function(req, res){ 
    getPageFromCache(req.url, function(err, content) { 
     if (err) return req.next(err); 
     if (content) { 
      res.send(content); 
     } else { 
      res.render('index.jade', { title: 'My Site' }, function(err, content) { 
       // Render handler 
       if (err) return req.next(err); 
       setPageToCache(req.url, page); 
       res.send(content); 
      }); 
     } 
    }); 
}); 

あなたが必要な場合はmemcachedので動作するようにgetPageFromCacheとsetPageToCacheを実装します。

+0

res.renderコールバックがあったことを認識していなかったが(!もちろんあります)ありがとう! –

4

私は単純なパッケージを使用しています:cacher、それはmemcachedに裏打ちされた高速のミドルウェア処理ページキャッシュです。

使用例:

var Cacher = require("cacher") 
var cacher = new Cacher("myhost:11211") 

// as a global middleware 
app.use(cacher.cacheHourly()) 
// or per route 
app.get("/long-cache", cacher.cacheDaily(), ...) 
app.get("/short-cache", cacher.cacheOneMinute(), ...) 
app.get("/no-cache", ...) 

// listen for events 
cacher.on("hit", function(url) { 
    console.log("woohoo!", url) 
}) 

cacher.on("miss", function(url) { 
    console.log("doh!", url) 
}) 

cacher.on("error", function(err) { 
    console.log(err) 
}) 

も参照してくださいproject on GitHub

関連する問題