Skip to content

Commit b34fd1e

Browse files
committed
Compress resources w/ gzip
1 parent 948acc5 commit b34fd1e

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

server/app.js

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var exec = require( 'child_process' ).exec
99
var spawn = require( 'child_process' ).spawn
1010
var mime = require( 'mime-types' )
1111

12+
var zlib = require( 'zlib')
1213
var ETag = require( 'ETag' )
1314
var stmd = require( 'stmd' )
1415
var parser = new stmd.DocParser()
@@ -81,9 +82,19 @@ http.createServer( function ( req, res ) {
8182
var slashless = uri.replace( /^\/(.*)\/?$/ig, '$1' )
8283
var manualId = false
8384
var mdfilename = false
85+
var acceptGzip = /\bgzip\b/i.test( req.headers[ 'accept-encoding' ]) ? true : false
8486
var filename
8587
var etag
8688

89+
function resWrite( data, binary ) {
90+
if ( binary ) {
91+
res.write( data, 'binary' )
92+
res.end()
93+
return
94+
}
95+
res.end( data )
96+
}
97+
8798
function httpRespond( code, data, headers, binary ) {
8899
var headers = headers || {}
89100
var data = data || ''
@@ -101,14 +112,20 @@ http.createServer( function ( req, res ) {
101112
return
102113
}
103114

104-
res.writeHead( code, headers )
105-
106-
if ( binary ) {
107-
res.write( data, 'binary' )
108-
res.end()
115+
if ( acceptGzip ) {
116+
headers[ 'Content-Encoding' ] = 'gzip'
117+
zlib.gzip( new Buffer( data, binary ? 'binary' : 'utf-8' ), function( err, data ) {
118+
if ( err ) {
119+
responseWithError( 500 )
120+
return
121+
}
122+
res.writeHead( code, headers )
123+
resWrite( data, binary )
124+
})
109125
return
110126
}
111-
res.end( data )
127+
res.writeHead( code, headers )
128+
resWrite( data, binary )
112129
}
113130

114131
function responseWithError( code ) {
@@ -171,10 +188,7 @@ http.createServer( function ( req, res ) {
171188
})
172189

173190
// check for file existence
174-
} else if (
175-
( !exists || /manifest.appcache/.test( filename )) &&
176-
( !exists && !/^\/manual(\/.*)?$/.test( uri ))
177-
) {
191+
} else if ( !exists && !/^\/manual(\/.*)?$/.test( uri )) {
178192
responseWithError( 404 )
179193
return
180194

@@ -237,8 +251,8 @@ http.createServer( function ( req, res ) {
237251
html = html
238252
.replace( /\{\{manual\-page\-id\}\}/gi, manualId )
239253
.replace( /\{\{manual\-page\-title\}\}/gi, ret[0] )
240-
.replace( /\{\{han\-version\}\}/gi, LANG['han-version'] )
241254
.replace( '{{parsed-article-html}}', ret[1] )
255+
.replace( /\{\{han\-version\}\}/gi, LANG['han-version'] )
242256

243257
httpRespond( 200, html, {
244258
'Content-Type': HTML_CNTT,
@@ -257,17 +271,14 @@ http.createServer( function ( req, res ) {
257271
} else {
258272
fs.readFile( filename, 'binary', function( err, file ) {
259273
var ext
260-
261274
if ( err ) {
262275
responseWithError( 500 )
263276
return
264277
}
265-
266278
ext = path.extname( filename ).slice( 1 )
267-
268279
httpRespond( 200, file, {
269280
'Access-Control-Allow-Origin': '*',
270-
'Content-Type': mime.contentType( ext ),
281+
'Content-Type': mime.contentType( ext ),
271282
'ETag': etag
272283
}, true )
273284
})

0 commit comments

Comments
 (0)