Skip to content

[PERF] fix sub-optimal compiler output - #4655

Merged
stefanpenner merged 2 commits into
masterfrom
fix-poor-transpiler-output
Nov 15, 2016
Merged

[PERF] fix sub-optimal compiler output#4655
stefanpenner merged 2 commits into
masterfrom
fix-poor-transpiler-output

Conversation

@stefanpenner

@stefanpenner stefanpenner commented Nov 15, 2016

Copy link
Copy Markdown
Contributor

given:

let [a, b] = thing;

If it is not statically known to babel, it will assume an iterator may be present. At which the following code is omitted.

var _changedAttributes$attribute = _slicedToArray(changedAttributes[attribute], 2);

var oldData = _changedAttributes$attribute[0];
var newData = _changedAttributes$attribute[1];
  var _slicedToArray = (function () {
    function sliceIterator(arr, i) {
      var _arr = [];var _n = true;var _d = false;var _e = undefined;try {
        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
          _arr.push(_s.value);if (i && _arr.length === i) break;
        }
      } catch (err) {
        _d = true;_e = err;
      } finally {
        try {
          if (!_n && _i["return"]) _i["return"]();
        } finally {
          if (_d) throw _e;
        }
      }return _arr;
    }return function (arr, i) {
      if (Array.isArray(arr)) {
        return arr;
      } else if (Symbol.iterator in Object(arr)) {
        return sliceIterator(arr, i);
      } else {
        throw new TypeError("Invalid attempt to destructure non-iterable instance");
      }
    };
  })();

instead of the expected:

let a = thing[0];
let b = thing[1];

given:

```js
let [a, b] = thing;
```

If it is not statically known to babel, it will assume an iterator may be present. At which the following code is omitted.

```js
  var _slicedToArray = (function () {
    function sliceIterator(arr, i) {
      var _arr = [];var _n = true;var _d = false;var _e = undefined;try {
        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
          _arr.push(_s.value);if (i && _arr.length === i) break;
        }
      } catch (err) {
        _d = true;_e = err;
      } finally {
        try {
          if (!_n && _i["return"]) _i["return"]();
        } finally {
          if (_d) throw _e;
        }
      }return _arr;
    }return function (arr, i) {
      if (Array.isArray(arr)) {
        return arr;
      } else if (Symbol.iterator in Object(arr)) {
        return sliceIterator(arr, i);
      } else {
        throw new TypeError("Invalid attempt to destructure non-iterable instance");
      }
    };
  })();
```
let [oldData, newData] = changedAttributes[attribute];
let data = changedAttributes[attribute];
let oldData = data[0];
let newData = data[0];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let newData = data[1];

@rwjblue

rwjblue commented Nov 15, 2016

Copy link
Copy Markdown
Contributor

@stefanpenner - Are we sure we are using loose mode? I tested this method via Babel 5 REPL and it does the simple thing you have done:

Babel 5 REPL Demo

@rwjblue

rwjblue commented Nov 15, 2016

Copy link
Copy Markdown
Contributor

I do see that in our bower builds we are including the _slicedToArray helper as you mentioned (see here).

@stefanpenner
stefanpenner merged commit 3f4ae52 into master Nov 15, 2016
@stefanpenner
stefanpenner deleted the fix-poor-transpiler-output branch November 15, 2016 17:27
stefanpenner added a commit that referenced this pull request Nov 15, 2016
* [PERF] fix sub-optimal compiler output

given:

```js
let [a, b] = thing;
```

If it is not statically known to babel, it will assume an iterator may be present. At which the following code is omitted.

```js
  var _slicedToArray = (function () {
    function sliceIterator(arr, i) {
      var _arr = [];var _n = true;var _d = false;var _e = undefined;try {
        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
          _arr.push(_s.value);if (i && _arr.length === i) break;
        }
      } catch (err) {
        _d = true;_e = err;
      } finally {
        try {
          if (!_n && _i["return"]) _i["return"]();
        } finally {
          if (_d) throw _e;
        }
      }return _arr;
    }return function (arr, i) {
      if (Array.isArray(arr)) {
        return arr;
      } else if (Symbol.iterator in Object(arr)) {
        return sliceIterator(arr, i);
      } else {
        throw new TypeError("Invalid attempt to destructure non-iterable instance");
      }
    };
  })();
```

* Update internal-model.js
stefanpenner added a commit that referenced this pull request Nov 15, 2016
* [PERF] fix sub-optimal compiler output

given:

```js
let [a, b] = thing;
```

If it is not statically known to babel, it will assume an iterator may be present. At which the following code is omitted.

```js
  var _slicedToArray = (function () {
    function sliceIterator(arr, i) {
      var _arr = [];var _n = true;var _d = false;var _e = undefined;try {
        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
          _arr.push(_s.value);if (i && _arr.length === i) break;
        }
      } catch (err) {
        _d = true;_e = err;
      } finally {
        try {
          if (!_n && _i["return"]) _i["return"]();
        } finally {
          if (_d) throw _e;
        }
      }return _arr;
    }return function (arr, i) {
      if (Array.isArray(arr)) {
        return arr;
      } else if (Symbol.iterator in Object(arr)) {
        return sliceIterator(arr, i);
      } else {
        throw new TypeError("Invalid attempt to destructure non-iterable instance");
      }
    };
  })();
```

* Update internal-model.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants