Page Cache
This commit is contained in:
65
system/PageCache.js
Normal file
65
system/PageCache.js
Normal file
@@ -0,0 +1,65 @@
|
||||
"use strict";
|
||||
|
||||
const Dragonfly = global.Dragonfly;
|
||||
const cl = global.botanLoader;
|
||||
|
||||
class PageCache
|
||||
{
|
||||
constructor()
|
||||
{
|
||||
this.cache = { };
|
||||
setInterval( () => {
|
||||
var d = new Date().getTime();
|
||||
for( var i in this.cache )
|
||||
{
|
||||
var c = this.cache[ i ];
|
||||
if( c.ttl < d ) delete this.cache[ i ];
|
||||
}
|
||||
}, 30000 );
|
||||
}
|
||||
|
||||
store( req, res, data, ttl )
|
||||
{
|
||||
if( !global.pagecache ) return;
|
||||
var key = req.url;
|
||||
|
||||
var expires = new Date().getTime() + 1000 * ttl;
|
||||
|
||||
this.cache[ key ] = {
|
||||
data: data
|
||||
, headers: {
|
||||
"Content-Length": res.headers[ "Content-Length" ]
|
||||
, "Content-Type": res.headers[ "Content-Type" ]
|
||||
, "X-Cache-Expires": new Date( expires )
|
||||
}
|
||||
, ttl: expires
|
||||
};
|
||||
|
||||
Dragonfly.Debug( "StoreCache: \"" + key + "\", expire " + new Date( expires ) );
|
||||
}
|
||||
|
||||
process( req, res )
|
||||
{
|
||||
var url = req.url;
|
||||
if( url in this.cache )
|
||||
{
|
||||
Dragonfly.Info(
|
||||
"[C] "
|
||||
+ ( req.headers[ "x-forwarded-for" ] || req.connection.remoteAddress ) + " "
|
||||
+ req.method + ": " + encodeURI( url )
|
||||
+ " - " + req.headers["user-agent"]
|
||||
, Dragonfly.Visibility.VISIBLE
|
||||
);
|
||||
|
||||
var c = this.cache[ url ];
|
||||
res.headers = c.headers;
|
||||
res.write( c.data );
|
||||
res.end();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = PageCache;
|
Reference in New Issue
Block a user