From e5814e19e9e5895984e1922b8c969e35d1f07f32 Mon Sep 17 00:00:00 2001 From: Dallon Feldner Date: Wed, 5 Dec 2012 09:13:57 -0700 Subject: [PATCH] Added cache to config loader --- lib/config-loader.js | 23 +++++++++++++++----- lib/internal-resources/internal-resources.js | 4 ++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/lib/config-loader.js b/lib/config-loader.js index 6a448f2..f706b62 100644 --- a/lib/config-loader.js +++ b/lib/config-loader.js @@ -16,13 +16,23 @@ var fs = require('fs') , loadModules = require('./module-loader') , qcall = require('./util/qcall'); +var CACHE_EXPIRE_TIME_DEV = 2000 + , CACHE_EXPIRE_TIME_PROD = 1000*60*60; // hour + +var __configCache = null + , __cacheExpiration = 0; + +module.exports.invalidateCache = function() { + __configCache = null; + __cacheExpiration = 0; +}; module.exports.loadConfig = function(basepath, server, fn) { - if (server.__configCache) { - return fn(null, server.__configCache); + if (__configCache && Date.now() < __cacheExpiration) { + return fn(null, __configCache); } - var allModulesQ = q.ncall(loadModules, this, basepath); + var allModulesQ = q.nfcall(loadModules, basepath); var appFileQ = q.fcall(function() { return q.ninvoke(fs, 'readFile', path.join(basepath, 'app.dpd'), 'utf-8').then(function(appFile) { @@ -88,8 +98,11 @@ module.exports.loadConfig = function(basepath, server, fn) { resourceTypes: resourceTypes }; }).then(function(result) { - if (server.options && server.options.env !== 'development') { - server.__configCache = result; + __configCache = result; + if (server.options && server.options.env === 'development') { + __cacheExpiration = Date.now() + CACHE_EXPIRE_TIME_DEV; + } else { + __cacheExpiration = Date.now + CACHE_EXPIRE_TIME_PROD; } fn(null, result); }, function(err) { diff --git a/lib/internal-resources/internal-resources.js b/lib/internal-resources/internal-resources.js index 4f0309f..be19bd0 100644 --- a/lib/internal-resources/internal-resources.js +++ b/lib/internal-resources/internal-resources.js @@ -3,6 +3,7 @@ var fs = require('fs') , util = require('util') , wrench = require('wrench') , Resource = require('../resource') + , invalidateCache = require('../config-loader') , debug = require('debug')('internal-resources') , path = require('path') , uuid = require('../util/uuid') @@ -76,8 +77,7 @@ InternalResources.prototype.handle = function(ctx, next) { } if(ctx.req.method != 'GET' && ctx.server) { - // clear cache - delete ctx.server.__configCache; + invalidateCache(); } switch (ctx.req.method) {