|
@@ -141,123 +141,19 @@ var FileMinifier = function() {
|
|
// Uglify
|
|
// Uglify
|
|
function minifyJs(body) {
|
|
function minifyJs(body) {
|
|
|
|
|
|
- // Splitting the Uglify function because it sometime takes too long (more than 10 seconds)
|
|
|
|
- // I hope that, by splitting, it can be a little more asynchronous, so the application doesn't freeze.
|
|
|
|
-
|
|
|
|
- return splittedUglifyStep1(body)
|
|
|
|
- .delay(1)
|
|
|
|
- .then(splittedUglifyStep2)
|
|
|
|
- .delay(1)
|
|
|
|
- .then(function(ast) {
|
|
|
|
- // Only do the compression step for smaller files
|
|
|
|
- // otherwise it can take a very long time compared to the gain
|
|
|
|
- if (body.length < 200*1024) {
|
|
|
|
- return splittedUglifyStep3(ast);
|
|
|
|
- } else {
|
|
|
|
- debug('Skipping step 3 because the file is too big (%d bytes)!', body.length);
|
|
|
|
- return ast;
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
- .delay(1)
|
|
|
|
- .then(splittedUglifyStep4)
|
|
|
|
- .delay(1)
|
|
|
|
- .then(splittedUglifyStep5)
|
|
|
|
- .delay(1)
|
|
|
|
- .then(splittedUglifyStep6)
|
|
|
|
- .delay(1)
|
|
|
|
- .then(splittedUglifyStep7);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- function splittedUglifyStep1(code) {
|
|
|
|
- var deferred = Q.defer();
|
|
|
|
- var startTime = Date.now();
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- var toplevel_ast = UglifyJS.parse(code);
|
|
|
|
-
|
|
|
|
- var endTime = Date.now();
|
|
|
|
- debug('Uglify step 1 took %dms', endTime - startTime);
|
|
|
|
- deferred.resolve(toplevel_ast);
|
|
|
|
-
|
|
|
|
- } catch(err) {
|
|
|
|
- debug('JS syntax error, Uglify\'s parser failed (step 1)');
|
|
|
|
- deferred.reject(err);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return deferred.promise;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- function splittedUglifyStep2(toplevel) {
|
|
|
|
- var deferred = Q.defer();
|
|
|
|
- var startTime = Date.now();
|
|
|
|
-
|
|
|
|
- toplevel.figure_out_scope();
|
|
|
|
-
|
|
|
|
- var endTime = Date.now();
|
|
|
|
- debug('Uglify step 2 took %dms', endTime - startTime);
|
|
|
|
- deferred.resolve(toplevel);
|
|
|
|
- return deferred.promise;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- function splittedUglifyStep3(toplevel) {
|
|
|
|
- var deferred = Q.defer();
|
|
|
|
- var startTime = Date.now();
|
|
|
|
-
|
|
|
|
- var compressor = UglifyJS.Compressor({warnings: false});
|
|
|
|
- var compressed_ast = toplevel.transform(compressor);
|
|
|
|
-
|
|
|
|
- var endTime = Date.now();
|
|
|
|
- debug('Uglify step 3 took %dms', endTime - startTime);
|
|
|
|
- deferred.resolve(compressed_ast);
|
|
|
|
- return deferred.promise;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- function splittedUglifyStep4(compressed_ast) {
|
|
|
|
- var deferred = Q.defer();
|
|
|
|
- var startTime = Date.now();
|
|
|
|
-
|
|
|
|
- compressed_ast.figure_out_scope();
|
|
|
|
-
|
|
|
|
- var endTime = Date.now();
|
|
|
|
- debug('Uglify step 4 took %dms', endTime - startTime);
|
|
|
|
- deferred.resolve(compressed_ast);
|
|
|
|
- return deferred.promise;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- function splittedUglifyStep5(compressed_ast) {
|
|
|
|
var deferred = Q.defer();
|
|
var deferred = Q.defer();
|
|
var startTime = Date.now();
|
|
var startTime = Date.now();
|
|
|
|
|
|
- compressed_ast.compute_char_frequency();
|
|
|
|
-
|
|
|
|
- var endTime = Date.now();
|
|
|
|
- debug('Uglify step 5 took %dms', endTime - startTime);
|
|
|
|
- deferred.resolve(compressed_ast);
|
|
|
|
- return deferred.promise;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- function splittedUglifyStep6(compressed_ast) {
|
|
|
|
- var deferred = Q.defer();
|
|
|
|
- var startTime = Date.now();
|
|
|
|
-
|
|
|
|
- compressed_ast.mangle_names();
|
|
|
|
|
|
+ var result = UglifyJS.minify(body, {
|
|
|
|
+ // Only do the compression step for smaller files
|
|
|
|
+ // otherwise it can take a very long time compared to the gain
|
|
|
|
+ compress: (body.length < 200*1024)
|
|
|
|
+ });
|
|
|
|
|
|
var endTime = Date.now();
|
|
var endTime = Date.now();
|
|
- debug('Uglify step 6 took %dms', endTime - startTime);
|
|
|
|
- deferred.resolve(compressed_ast);
|
|
|
|
- return deferred.promise;
|
|
|
|
- }
|
|
|
|
|
|
+ debug('Uglify took %dms', endTime - startTime);
|
|
|
|
+ deferred.resolve(result.code);
|
|
|
|
|
|
- function splittedUglifyStep7(compressed_ast) {
|
|
|
|
- var deferred = Q.defer();
|
|
|
|
- var startTime = Date.now();
|
|
|
|
-
|
|
|
|
- var code = compressed_ast.print_to_string();
|
|
|
|
-
|
|
|
|
- var endTime = Date.now();
|
|
|
|
- debug('Uglify step 7 took %dms', endTime - startTime);
|
|
|
|
- deferred.resolve(code);
|
|
|
|
return deferred.promise;
|
|
return deferred.promise;
|
|
}
|
|
}
|
|
|
|
|