Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build tweaks #43

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
Open

Build tweaks #43

wants to merge 13 commits into from

Conversation

Andarist
Copy link

@Andarist Andarist commented Nov 20, 2018

So this is a PR attempting to optimize (many times doing micro optimizations) the final bundle.

I've checked the bundle size by executing:

npm run build && npx terser -cm --toplevel dist/ResizeObserver.es.js | gzip -c | wc -c

Before my PR this has reported the size of 2436. After that I have dropped buble and migrated to babel@7 which got me to 2571. So this was a little bit of a regression. However I've started to optimizing various patterns used across the codebase (you can follow my commits) and I was able to go down to 2444, which is only slight regression (8 bytes). Later I've prepared so called browser build which allowed me to drop environment checks for the browser and that bundle is now sitting at 2367 bytes (69 bytes improvement).

I realize this is not much, but it was fun to do nevertheless.

Right now 3 tests are failing on my machine, I'm happy to fix them, but I don't know how do you feel about changes that I have made here, so I'd like to get a preliminary review/approval first and only proceed with fixing tests after that.

A nice side effect of this PR is that it should make the library tree-shakeable, I have not tested it yet - but by inspecting the final bundle I havent found any more tree-shaking deopts.

PS. We could easily go down to 2351 (another 16 bytes) by removing undefined class properties from the class definition in places where they are assigned in the constructor, that is because the output code looks something like this:

function Constructor() {
  this.field = void 0;
  this.field = someAssignedValue;
}

The first statement is obviously not needed, but as part of the class declaration it was annotated with JSDocs and I was unsure how to convert it to annotate it only in the constructor (or somewhere else, without actually declaring it on the class). I might be able to implement this small optimization as part of the Babel itself, so maybe its not worth optimizing right now and better to wait for a new babel release which will have this optimization in the future automatically.

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.

1 participant