From 600ca90fc0c0028a04f6c499518b14cd18c0fd56 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Nov 2020 21:19:49 -0500 Subject: [PATCH 1/5] Serve compressed static files if available --- scripts/buildHomebrew.js | 9 ++++++++- server.js | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/scripts/buildHomebrew.js b/scripts/buildHomebrew.js index d4cb5dd39..76ad07d32 100644 --- a/scripts/buildHomebrew.js +++ b/scripts/buildHomebrew.js @@ -1,4 +1,5 @@ const fs = require('fs-extra'); +const zlib = require('zlib'); const Proj = require('./project.json'); const { pack, watchFile, livereload } = require('vitreum'); @@ -14,10 +15,16 @@ const transforms = { }; const build = async ({ bundle, render, ssr })=>{ - await fs.outputFile('./build/homebrew/bundle.css', await lessTransform.generate({ paths: './shared' })); + const css = await lessTransform.generate({ paths: './shared' }); + await fs.outputFile('./build/homebrew/bundle.css', css); await fs.outputFile('./build/homebrew/bundle.js', bundle); await fs.outputFile('./build/homebrew/ssr.js', ssr); await fs.outputFile('./build/homebrew/render.js', render); + + //compress files + await fs.outputFile('./build/homebrew/bundle.css.br', zlib.brotliCompressSync(css)); + await fs.outputFile('./build/homebrew/bundle.js.br', zlib.brotliCompressSync(bundle)); + await fs.outputFile('./build/homebrew/ssr.js.br', zlib.brotliCompressSync(ssr)); }; fs.emptyDirSync('./build/homebrew'); diff --git a/server.js b/server.js index d0c77528f..31fda08fb 100644 --- a/server.js +++ b/server.js @@ -1,11 +1,30 @@ const _ = require('lodash'); const jwt = require('jwt-simple'); +const fs = require('fs-extra'); const express = require('express'); const app = express(); const homebrewApi = require('./server/homebrew.api.js'); const GoogleActions = require('./server/googleActions.js'); +// Serve brotli-compressed static files if available +app.get('*.js', function(req, res, next) { + if(fs.existsSync('build' + req.url + '.br')){ + req.url = req.url + '.br'; + res.set('Content-Encoding', 'br'); + res.set('Content-Type', 'text/javascript'); + } + next(); +}); +app.get('*.css', function(req, res, next) { + if(fs.existsSync('build' + req.url + '.br')){ + req.url = req.url + '.br'; + res.set('Content-Encoding', 'br'); + res.set('Content-Type', 'text/javascript'); + } + next(); +}); + app.use(express.static(`${__dirname}/build`)); app.use(require('body-parser').json({ limit: '25mb' })); app.use(require('cookie-parser')()); From 759d986188ece71268361384abc32014c48c1744 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Nov 2020 21:41:48 -0500 Subject: [PATCH 2/5] lint --- server.js | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/server.js b/server.js index 31fda08fb..989e586c8 100644 --- a/server.js +++ b/server.js @@ -8,21 +8,13 @@ const homebrewApi = require('./server/homebrew.api.js'); const GoogleActions = require('./server/googleActions.js'); // Serve brotli-compressed static files if available -app.get('*.js', function(req, res, next) { - if(fs.existsSync('build' + req.url + '.br')){ - req.url = req.url + '.br'; +app.get(['*.js', '*.css'], function(req, res, next) { + if(fs.existsSync(`build${req.url}.br`)){ + req.url = `${req.url}.br`; res.set('Content-Encoding', 'br'); res.set('Content-Type', 'text/javascript'); } - next(); -}); -app.get('*.css', function(req, res, next) { - if(fs.existsSync('build' + req.url + '.br')){ - req.url = req.url + '.br'; - res.set('Content-Encoding', 'br'); - res.set('Content-Type', 'text/javascript'); - } - next(); + next(); }); app.use(express.static(`${__dirname}/build`)); @@ -63,14 +55,9 @@ app.use((req, res, next)=>{ return next(); }); - app.use(homebrewApi); - app.use(require('./server/admin.api.js')); -//app.use('/user',require('./server/user.routes.js')); - - const HomebrewModel = require('./server/homebrew.model.js').model; const welcomeText = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); const changelogText = require('fs').readFileSync('./changelog.md', 'utf8'); @@ -219,11 +206,6 @@ app.get('/print/:id', (req, res, next)=>{ } }); -app.get('/source/:id', (req, res)=>{ - -}); - - //Render the page //const render = require('.build/render'); const templateFn = require('./client/template.js'); From 4182c79354a901df837ebd8663eb413ef8108046 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Nov 2020 22:01:42 -0500 Subject: [PATCH 3/5] Use a library instead. Checks that the browser is compatible first. --- package-lock.json | 8 ++++++++ package.json | 1 + server.js | 23 ++++++++++++++--------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index def592ca9..85a602932 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3413,6 +3413,14 @@ } } }, + "express-static-gzip": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/express-static-gzip/-/express-static-gzip-2.1.0.tgz", + "integrity": "sha512-XGozfjgsfVKBc8lQmPco9zd1+sK9Wy1ZPEAYtH8E34FbBr5BFp2HV+V1PpmIYHaWg8+ecLl/JnQkREbtPSJyxQ==", + "requires": { + "serve-static": "^1.14.1" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", diff --git a/package.json b/package.json index 58307d362..eecfdc3e3 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "cookie-parser": "^1.4.5", "create-react-class": "^15.6.3", "express": "^4.17.1", + "express-static-gzip": "2.1.0", "fs-extra": "9.0.1", "googleapis": "59.0.0", "jwt-simple": "^0.5.6", diff --git a/server.js b/server.js index 989e586c8..51e78a7e2 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,7 @@ const _ = require('lodash'); const jwt = require('jwt-simple'); const fs = require('fs-extra'); +const expressStaticGzip = require('express-static-gzip'); const express = require('express'); const app = express(); @@ -8,16 +9,20 @@ const homebrewApi = require('./server/homebrew.api.js'); const GoogleActions = require('./server/googleActions.js'); // Serve brotli-compressed static files if available -app.get(['*.js', '*.css'], function(req, res, next) { - if(fs.existsSync(`build${req.url}.br`)){ - req.url = `${req.url}.br`; - res.set('Content-Encoding', 'br'); - res.set('Content-Type', 'text/javascript'); - } - next(); -}); +// app.get(['*.js', '*.css'], function(req, res, next) { +// if(fs.existsSync(`build${req.url}.br`)){ +// req.url = `${req.url}.br`; +// res.set('Content-Encoding', 'br'); +// } +// next(); +// }); -app.use(express.static(`${__dirname}/build`)); +app.use('/', expressStaticGzip(`${__dirname}/build`, { + enableBrotli: true, + orderPreference: ['br'] +})); + +//app.use(express.static(`${__dirname}/build`)); app.use(require('body-parser').json({ limit: '25mb' })); app.use(require('cookie-parser')()); app.use(require('./server/forcessl.mw.js')); From 133af4ea2caf8f7c44006088667c61a9f704755f Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Nov 2020 22:02:17 -0500 Subject: [PATCH 4/5] lint --- server.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server.js b/server.js index 51e78a7e2..8f7de4315 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,5 @@ const _ = require('lodash'); const jwt = require('jwt-simple'); -const fs = require('fs-extra'); const expressStaticGzip = require('express-static-gzip'); const express = require('express'); const app = express(); @@ -18,8 +17,8 @@ const GoogleActions = require('./server/googleActions.js'); // }); app.use('/', expressStaticGzip(`${__dirname}/build`, { - enableBrotli: true, - orderPreference: ['br'] + enableBrotli : true, + orderPreference : ['br'] })); //app.use(express.static(`${__dirname}/build`)); From 74c615f156b243466de26894bc097d8b36d74cac Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Nov 2020 22:21:27 -0500 Subject: [PATCH 5/5] Cleanup --- server.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/server.js b/server.js index 8f7de4315..c54586d7b 100644 --- a/server.js +++ b/server.js @@ -8,14 +8,6 @@ const homebrewApi = require('./server/homebrew.api.js'); const GoogleActions = require('./server/googleActions.js'); // Serve brotli-compressed static files if available -// app.get(['*.js', '*.css'], function(req, res, next) { -// if(fs.existsSync(`build${req.url}.br`)){ -// req.url = `${req.url}.br`; -// res.set('Content-Encoding', 'br'); -// } -// next(); -// }); - app.use('/', expressStaticGzip(`${__dirname}/build`, { enableBrotli : true, orderPreference : ['br']