Skip to content

Compression of CoffeeScript output #315

@mbarkhau

Description

@mbarkhau

I'm wondering if UglifyJS2 might not be able to do a better job at compressing common output of CoffeeScript. Here an example:

test = (
  (s) -> w.toLowerCase() for w in s.trim().split(" ")
)("test")

Which compiles to this:

var test;

test = (function(s) {
  var w, _i, _len, _ref, _results;
  _ref = s.trim().split(" ");
  _results = [];
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    w = _ref[_i];
    _results.push(w.toLowerCase());
  }
  return _results;
})("test");

Which is uglified to this:

var test;

test = function(t) {
    var e, r, s, n, o;
    for (n = t.trim().split(" "), o = [], r = 0, s = n.length; s > r; r++) e = n[r], 
    o.push(e.toLowerCase());
    return o;
}("test");

Shouldn't it also be possible to produce the following?

var test = function(t) {
    var n = t.trim().split(" "), o = [], r = 0, s = n.length;
    for (; s > r; r++) o.push(n[r].toLowerCase());
    return o;
}("test");

I removed the unnecessary temporary variable e from the last example, but mostly I'm referring to moving assignments up into the corresponding var declaration. I'm new to UglifyJS, so forgive me if I'm just missing a compiler flag.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions