diff --git a/lib/server/cache.js b/lib/server/cache.js new file mode 100644 index 00000000..7bf5ffe2 --- /dev/null +++ b/lib/server/cache.js @@ -0,0 +1,61 @@ +(function(){ + "use strict"; + + var DIR = process.cwd() + '/', + main = require(DIR + 'lib/server/main.js'), + SRVDIR = main.SRVDIR; + + /* + * Обьект для работы с кэшем + * аналог клиентского обьекта + * с тем отличием, что в нём + * будут храниться серверные + * данные, такие как файлы + * отдаваемые клиенту + * (файлы проэкта по большому + * счёту, для ускорения + * первичной загрузки) + */ + exports.Cache = { + /* приватный переключатель возможности работы с кэшем */ + _allowed :true, + /* данные в которых храняться файлы + * в формате <поле> : <значение> + * _data[name]=pData; + * одному имени соответствуют + * одни данные + */ + _data :{}, + + /* функция говорит можно ли работать с кэшем */ + isAllowed :(function(){ + return this._allowed; + }), + /* функция устанавливает возможность работать с кэшем */ + setAllowed :(function(pAllowed){ + this._allowed=pAllowed; + }), + /* Если доступен кэш + * сохраняем в него данные + */ + set :(function(pName, pData){ + if(this._allowed && pName && pData){ + this._data[pName]=pData; + } + }), + /* Если доступен Cache принимаем из него данные*/ + get :(function(pName){ + if(this._allowed && pName){ + return this._data[pName]; + } + else return null; + }), + + /* Функция очищает кэш*/ + clear :(function(){ + if(this._allowed){ + this._data={}; + } + }) + }; +})(); diff --git a/lib/server/minify.js b/lib/server/minify.js new file mode 100644 index 00000000..d1da79a6 --- /dev/null +++ b/lib/server/minify.js @@ -0,0 +1,129 @@ +/* Обьект для сжатия скриптов и стилей по умолчанию - сжимаються */ + + (function(){ + "use strict"; + + var DIR = process.cwd() + '/', + main = require(DIR + 'lib/server/main.js'), + SRVDIR = main.SRVDIR; + + exports.Minify = { + /* pathes to directories */ + INDEX :'index.html', + /* приватный переключатель минимизации */ + _allowed :{ + css : true, + js : true, + html : true, + img : true + }, + + /* minimize even if file not changed */ + forse : false, + + /* функция разрешает или + * запрещает минимизировать + * css/js/html + * @pAllowed: - структура, в которой + * передаються параметры + * минификации, вида + * {js:true,css:true,html:false; img:true} + * img отвечает за перевод картинок в base64 + * и сохранение их в css-файл + */ + setAllowed :(function(pAllowed){ + if(pAllowed){ + this._allowed = pAllowed; + } + }), + + /* + * Функция минимизирует css/js/html + * если установлены параметры минимизации + */ + doit :(function(){ + if(this._allowed.css || + this._allowed.js || + this._allowed.html){ + var lMinify; + try{ + lMinify = require('minify'); + }catch(pError){ + this._allowed = {js:false,css:false,html:false}; + + console.log('You coud install minify ' + + 'for better download spead:\n' + + 'npm i minify'); + + return this._allowed; + } + + /* + * temporary changed dir path, + * becouse directory lib is write + * protected by others by default + * so if node process is started + * from other user (root for example + * in nodester) we can not write + * minified versions + */ + this.MinFolder = '/' + lMinify.MinFolder; + + var lOptimizeParams = []; + if (this._allowed.js) { + lOptimizeParams.push('client.js'); + } + + if (this._allowed.html) + lOptimizeParams.push(this.INDEX); + + if (this._allowed.css) { + lOptimizeParams.push({ + './css/style.css' : this._allowed.img + }); + + lOptimizeParams.push({ + './css/reset.css': this._allowed.img + }); + } + + if (lOptimizeParams) + lMinify.optimize(lOptimizeParams); + + this.Cache = lMinify.Cache; + + return this._allowed; + } + }), + + optimize: function(pName, pParams){ + var lResult = true; + + pParams.force = this.force; + + if(this._allowed.css || + this._allowed.js || + this._allowed.html){ + var lMinify = main.require('minify'); + + if(lMinify) + lMinify.optimize(pName, pParams); + else{ + lResult = false; + + this._allowed = {js:false,css:false,html:false}; + console.log('Could not minify ' + + 'without minify module\n' + + 'npm i minify'); + } + } + else lResult = false; + + return lResult; + }, + + /* minification folder name */ + MinFolder : '', + Cache : {} + }; +})();