jalmenarez / minify

Automatically exported from code.google.com/p/minify
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

jsmin bails on extremely large libraries. #17

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Hi, I've encountered problems with jsmin when using extremely large files, (ie 
prototype, 
scriptaculous et al) in one compression. I've previously been using a simple 
sequence of 
preg_replaces to flatten the js into one line. It might not through exceptions 
for errors in the 
javascript and if the javascript was not written 100% correctly, ie ; after 
nearly everything then 
the compressed javascript will not work. however there is a significant speed 
improvement and it 
might be worth implementing. as an options instead of using jsmin.

to implement the hack modify the function 'minifyJS' to below

  protected static function minifyJS($js) {
     return self::compressCode($js);
  }

then add the following function

  protected static function compressCode($code)
  {
    // Remove multiline comment
    $code = preg_replace('/\/\*(?!-)[\x00-\xff]*?\*\//', '', $code);
    // Remove single line comment
    $code = preg_replace('/[^:]\/\/.*/', '', $code);
    // Remove extra spaces
    $code = preg_replace('/\s+/', ' ', $code);
    // Remove spaces that can be removed
    $code = preg_replace('/\s?([\{\};\=\(\)\/\+\*-])\s?/', '\\1', $code);
    return trim($code);
  }

Original issue reported on code.google.com by bugged...@gmail.com on 28 Aug 2007 at 4:39

GoogleCodeExporter commented 9 years ago

Original comment by rgr...@gmail.com on 28 Aug 2007 at 5:06

GoogleCodeExporter commented 9 years ago
not quite sure why it is invalid. it's a perfectly valid point. a better 
alternative to jsmin and the pre mentioned 
script is http://joliclic.free.fr/php/javascript-packer/en/

Original comment by bugged...@gmail.com on 28 Aug 2007 at 9:15

GoogleCodeExporter commented 9 years ago
JSMin doesn't "bail" on large libraries. The problem you're seeing is that 
Prototype,
Scriptaculous, and some other libraries are written with bad coding practices 
that
JSMin doesn't tolerate. The rule of thumb is that if JSLint throws warnings, 
you're
likely to run into problems with JSMin.

Packer is a reasonable alternative to JSMin, but whether or not it's better is
arguable. They both have their advantages and disadvantages.

I'd advise against using your regexp-based minification function. JavaScript is 
a
notoriously difficult language to parse correctly, and those regexps are 
absolutely
guaranteed to introduce errors (especially the 'remove extra spaces' regexp, 
which
doesn't take strings into account).

Original comment by rgr...@gmail.com on 28 Aug 2007 at 9:23

GoogleCodeExporter commented 9 years ago
I believe I read someone now maintains JSMin-friendly versions of these 
libraries 
(or you can get pre-minified versions). Regardless, in version 2.x you can use 
the 
PHP5 Packer (or any other code) for certain files if you want. The 
configuration is 
a little tricky, but ask on the google groups.

Original comment by mrclay....@gmail.com on 27 Nov 2008 at 3:37