mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-07-09 04:03:16 +02:00
js propagation for cluster module, so only 1 thread minifies the js
This commit is contained in:
8
app.js
8
app.js
@@ -28,6 +28,7 @@ var fs = require('fs'),
|
||||
semver = require('semver'),
|
||||
winston = require('winston'),
|
||||
path = require('path'),
|
||||
cluster = require('cluster'),
|
||||
pkg = require('./package.json'),
|
||||
utils = require('./public/src/utils.js');
|
||||
|
||||
@@ -158,10 +159,15 @@ function start() {
|
||||
process.on('SIGINT', shutdown);
|
||||
process.on('SIGHUP', restart);
|
||||
process.on('message', function(message) {
|
||||
switch(message) {
|
||||
switch(message.action) {
|
||||
case 'reload':
|
||||
meta.reload();
|
||||
break;
|
||||
case 'js-propagate':
|
||||
meta.js.cache = message.cache;
|
||||
meta.js.map = message.map;
|
||||
winston.info('[cluster] Client-side javascript and mapping propagated to worker ' + cluster.worker.id);
|
||||
break;
|
||||
}
|
||||
})
|
||||
process.on('uncaughtException', function(err) {
|
||||
|
||||
16
loader.js
16
loader.js
@@ -131,6 +131,18 @@ Loader.init = function() {
|
||||
console.log('[cluster] Reloading...');
|
||||
Loader.reload();
|
||||
break;
|
||||
case 'js-propagate':
|
||||
var otherWorkers = Object.keys(cluster.workers).filter(function(worker_id) {
|
||||
return parseInt(worker_id, 10) !== parseInt(worker.id, 10);
|
||||
});
|
||||
otherWorkers.forEach(function(worker_id) {
|
||||
cluster.workers[worker_id].send({
|
||||
action: 'js-propagate',
|
||||
cache: message.cache,
|
||||
map: message.map
|
||||
});
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -180,7 +192,9 @@ Loader.restart = function(callback) {
|
||||
|
||||
Loader.reload = function() {
|
||||
Object.keys(cluster.workers).forEach(function(worker_id) {
|
||||
cluster.workers[worker_id].send('reload');
|
||||
cluster.workers[worker_id].send({
|
||||
action: 'reload'
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
134
src/meta/js.js
134
src/meta/js.js
@@ -7,6 +7,7 @@ var winston = require('winston'),
|
||||
_ = require('underscore'),
|
||||
os = require('os'),
|
||||
nconf = require('nconf'),
|
||||
cluster = require('cluster'),
|
||||
|
||||
plugins = require('../plugins'),
|
||||
emitter = require('../emitter'),
|
||||
@@ -120,70 +121,85 @@ module.exports = function(Meta) {
|
||||
};
|
||||
|
||||
Meta.js.minify = function(minify, callback) {
|
||||
var minifier = Meta.js.minifierProc = fork('minifier.js', {
|
||||
silent: true
|
||||
}),
|
||||
minifiedStream = minifier.stdio[1],
|
||||
minifiedString = '',
|
||||
mapStream = minifier.stdio[2],
|
||||
mapString = '',
|
||||
step = 0,
|
||||
onComplete = function() {
|
||||
if (step === 0) {
|
||||
return step++;
|
||||
}
|
||||
if (!cluster.isWorker || process.env.cluster_setup === 'true') {
|
||||
var minifier = Meta.js.minifierProc = fork('minifier.js', {
|
||||
silent: true
|
||||
}),
|
||||
minifiedStream = minifier.stdio[1],
|
||||
minifiedString = '',
|
||||
mapStream = minifier.stdio[2],
|
||||
mapString = '',
|
||||
step = 0,
|
||||
onComplete = function() {
|
||||
if (step === 0) {
|
||||
return step++;
|
||||
}
|
||||
|
||||
Meta.js.cache = minifiedString;
|
||||
Meta.js.map = mapString;
|
||||
winston.info('[meta/js] Compilation complete');
|
||||
emitter.emit('meta:js.compiled');
|
||||
minifier.kill();
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
Meta.js.cache = minifiedString;
|
||||
Meta.js.map = mapString;
|
||||
winston.info('[meta/js] Compilation complete');
|
||||
emitter.emit('meta:js.compiled');
|
||||
minifier.kill();
|
||||
|
||||
minifiedStream.on('data', function(buffer) {
|
||||
minifiedString += buffer.toString();
|
||||
});
|
||||
mapStream.on('data', function(buffer) {
|
||||
mapString += buffer.toString();
|
||||
});
|
||||
if (cluster.isWorker) {
|
||||
process.send({
|
||||
action: 'js-propagate',
|
||||
cache: minifiedString,
|
||||
map: mapString
|
||||
});
|
||||
}
|
||||
|
||||
minifier.on('message', function(message) {
|
||||
switch(message.type) {
|
||||
case 'end':
|
||||
if (message.payload === 'script') {
|
||||
winston.info('[meta/js] Successfully minified.');
|
||||
onComplete();
|
||||
} else if (message.payload === 'mapping') {
|
||||
winston.info('[meta/js] Retrieved Mapping.');
|
||||
onComplete();
|
||||
}
|
||||
break;
|
||||
case 'hash':
|
||||
Meta.js.hash = message.payload;
|
||||
break;
|
||||
case 'error':
|
||||
winston.error('[meta/js] Could not compile client-side scripts! ' + message.payload.message);
|
||||
minifier.kill();
|
||||
if (typeof callback === 'function') {
|
||||
callback(new Error(message.payload.message));
|
||||
} else {
|
||||
process.exit(0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
Meta.js.prepare(function() {
|
||||
minifier.send({
|
||||
action: 'js',
|
||||
relativePath: nconf.get('url') + '/',
|
||||
minify: minify,
|
||||
scripts: Meta.js.scripts.all
|
||||
minifiedStream.on('data', function(buffer) {
|
||||
minifiedString += buffer.toString();
|
||||
});
|
||||
});
|
||||
mapStream.on('data', function(buffer) {
|
||||
mapString += buffer.toString();
|
||||
});
|
||||
|
||||
minifier.on('message', function(message) {
|
||||
switch(message.type) {
|
||||
case 'end':
|
||||
if (message.payload === 'script') {
|
||||
winston.info('[meta/js] Successfully minified.');
|
||||
onComplete();
|
||||
} else if (message.payload === 'mapping') {
|
||||
winston.info('[meta/js] Retrieved Mapping.');
|
||||
onComplete();
|
||||
}
|
||||
break;
|
||||
case 'hash':
|
||||
Meta.js.hash = message.payload;
|
||||
break;
|
||||
case 'error':
|
||||
winston.error('[meta/js] Could not compile client-side scripts! ' + message.payload.message);
|
||||
minifier.kill();
|
||||
if (typeof callback === 'function') {
|
||||
callback(new Error(message.payload.message));
|
||||
} else {
|
||||
process.exit(0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
Meta.js.prepare(function() {
|
||||
minifier.send({
|
||||
action: 'js',
|
||||
relativePath: nconf.get('url') + '/',
|
||||
minify: minify,
|
||||
scripts: Meta.js.scripts.all
|
||||
});
|
||||
});
|
||||
} else {
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Meta.js.killMinifier = function(callback) {
|
||||
|
||||
Reference in New Issue
Block a user