Skip to content

Commit fc1b720

Browse files
committed
cleanup, test and performance updates
1 parent 903a08c commit fc1b720

19 files changed

+650
-170
lines changed

index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
1515
<meta name="theme-color" content="#287ab1">
1616
<link rel="apple-touch-icon" sizes="180x180" href="{{ CDN }}/app-icon.png">
17-
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
17+
<meta name="viewport" content="initial-scale=1, maximum-scale=1, minimal-ui">
1818
<link rel="manifest" href="/assets/manifest.json" />
1919
{{ STYLES }}
2020
{{ STATE }}
@@ -38,4 +38,4 @@
3838
}
3939
</script>
4040
</body>
41-
</html>
41+
</html>

package-lock.json

Lines changed: 87 additions & 53 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
"dev": "rimraf ./dist && cross-env NODE_ENV=development node server",
3333
"build": "node build/build.js",
3434
"build:server": "cross-env NODE_ENV=production webpack --config ./build/webpack.server.config.js --progress --hide-modules",
35-
"unit": "karma start ./test/unit/karma.conf.js --single-run",
36-
"unit:watch": "karma start ./test/unit/karma.conf.js"
35+
"test": "karma start ./test/unit/karma.conf.js --single-run",
36+
"test:watch": "karma start ./test/unit/karma.conf.js"
3737
},
3838
"optionalDependencies": {
3939
"fsevents": "*"
@@ -44,10 +44,12 @@
4444
"compression": "^1.7.1",
4545
"cross-env": "^5.0.5",
4646
"express": "^4.16.2",
47+
"intersection-observer-polyfill": "^0.1.0",
4748
"localforage": "^1.5.2",
4849
"lru-cache": "^4.0.2",
4950
"serialize-javascript": "^1.3.0",
5051
"vue": "^2.5.2",
52+
"vue-clazy-load": "^0.2.0",
5153
"vue-resource": "^1.2.1",
5254
"vue-router": "^3.0.0",
5355
"vue-server-renderer": "^2.5.2",
@@ -86,13 +88,14 @@
8688
"mocha": "4.0.1",
8789
"node-sass": "4.5.3",
8890
"phantomjs-prebuilt": "2.1.15",
91+
"purify-css": "^1.2.5",
8992
"purifycss": "1.2.6",
9093
"purifycss-webpack": "0.7.0",
9194
"recursive-readdir": "2.2.1",
9295
"rimraf": "2.6.2",
9396
"sass-loader": "6.0.6",
9497
"serve-favicon": "2.4.5",
95-
"sinon": "4.0.1",
98+
"sinon": "^2.1.0",
9699
"sinon-chai": "2.14.0",
97100
"url-loader": "0.6.2",
98101
"vue-loader": "13.3.0",

server.js

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ const favicon = require('serve-favicon')
1212
const serialize = require('serialize-javascript')
1313
const createBundleRenderer = require('vue-server-renderer').createBundleRenderer
1414

15-
var allowCrossDomain = function(req, res, next) {
16-
res.header('Access-Control-Allow-Origin', 'fullstackweekly-client.azureedge.net');
17-
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
18-
res.header('Access-Control-Allow-Headers', 'Content-Type');
15+
var allowCrossDomain = function (req, res, next) {
16+
res.header('Access-Control-Allow-Origin', 'fullstackweekly-client.azureedge.net')
17+
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
18+
res.header('Access-Control-Allow-Headers', 'Content-Type')
1919

20-
next();
20+
next()
2121
}
2222

2323
function shouldCompress (req, res) {
@@ -28,16 +28,16 @@ function shouldCompress (req, res) {
2828
return true
2929
}
3030

31-
var cacheControl = function(req, res, next) {
31+
var cacheControl = function (req, res, next) {
3232
if (isProd) {
3333
res.header('Cache-Control', 'public, max-age=86400, no-cache') // one day
3434
} else {
3535
res.header('Cache-Control', 'no-cache, no-store, must-revalidate') // never
36-
}
36+
}
3737
next()
3838
}
3939

40-
var strictTransportSecurity = function(req, res, next) {
40+
var strictTransportSecurity = function (req, res, next) {
4141
res.header('Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload')
4242
next()
4343
}
@@ -49,11 +49,11 @@ const indexHTML = (() => {
4949
template = fs.readFileSync(resolve('./dist/index.html'), 'utf-8')
5050
template = template.replace(/{{ SCRIPTS }}/gmi, '')
5151
template = template.replace('{{ STYLES }}', '')
52-
template = template.replace('<link href="/assets/styles', '<link href="{{ CDN }}/styles')
52+
template = template.replace('<link href="/assets/styles', '<link rel="stylesheet" href="{{ CDN }}/styles media="all" ')
5353
template = template.replace(/<script type="text\/javascript" src="\/assets/gmi, '<script type="text/javascript" src="{{ CDN }}/')
5454
} else {
5555
template = fs.readFileSync(resolve('./index.html'), 'utf-8')
56-
template = template.replace('{{ STYLES }}', '<link rel="stylesheet" href="{{ CDN }}/styles.css">')
56+
template = template.replace('{{ STYLES }}', '<link rel="stylesheet" href="{{ CDN }}/styles.css" media="all">')
5757
template = template.replace(/{{ SCRIPTS }}/gmi, '<script defer src="{{ CDN }}/js/vendor.js"></script><script defer src="{{ CDN }}/js/app.js"></script>')
5858
}
5959
template = template.replace(/{{ CDN }}/gmi, cdnClient)
@@ -75,7 +75,7 @@ if (isProd) {
7575
app.use('/', express.static(resolve('./dist')))
7676
app.use(favicon(path.resolve(__dirname, './dist/favicon.ico')))
7777
} else {
78-
app.use('/dist', express.static(resolve('./dist')))
78+
app.use('/dist', express.static(resolve('./dist')))
7979
app.use(favicon(path.resolve(__dirname, 'src/assets/favicon.ico')))
8080
}
8181

@@ -95,20 +95,19 @@ app.get('*', (req, res) => {
9595
return res.end('waiting for compilation... refresh in a moment.')
9696
}
9797

98-
var s = Date.now()
9998
const context = { url: req.url }
10099
renderer.renderToString(context, (err, html) => {
101100
if (err) {
102-
console.log('Error rendering to string: ');
103-
console.log(err);
104-
console.log(err.message);
105-
return res.status(200).send('Server Error');
101+
console.log('Error rendering to string: ')
102+
console.log(err)
103+
console.log(err.message)
104+
return res.status(200).send('Server Error')
106105
}
107-
html = indexHTML.replace('{{ APP }}', html);
108-
html = html.replace('{{ STATE }}', `<script>window.__INITIAL_STATE__=${serialize(context.initialState, { isJSON: true })}</script>`);
109-
res.setHeader('Content-Length', Buffer.byteLength(html));
110-
res.write(html);
111-
res.end();
106+
html = indexHTML.replace('{{ APP }}', html)
107+
html = html.replace('{{ STATE }}', `<script>window.__INITIAL_STATE__=${serialize(context.initialState, { isJSON: true })}</script>`)
108+
res.setHeader('Content-Length', Buffer.byteLength(html))
109+
res.write(html)
110+
res.end()
112111
})
113112
})
114113

src/app.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,16 @@ import store from './vuex/store'
44
import router from './router/index'
55
import { sync } from 'vuex-router-sync'
66

7+
if (typeof window !== 'undefined') {
8+
window.IntersectionObserver = require('intersection-observer-polyfill/dist/IntersectionObserver.global')
9+
}
10+
11+
const VueClazyLoad = require('vue-clazy-load')
12+
713
sync(store, router)
814

15+
Vue.use(VueClazyLoad)
16+
917
const app = new Vue({
1018
router,
1119
store,

0 commit comments

Comments
 (0)