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