Skip to content

Optimize the base64.decode function. - #185

Merged
fitzgen merged 1 commit into
mozilla:masterfrom
fitzgen:decode-base64
Jun 26, 2015
Merged

Optimize the base64.decode function.#185
fitzgen merged 1 commit into
mozilla:masterfrom
fitzgen:decode-base64

Conversation

@fitzgen

@fitzgen fitzgen commented Jun 17, 2015

Copy link
Copy Markdown
Contributor

This function is incredibly hot while parsing mappings. By avoiding property
gets and throwing errors in this function, we get about 2000 millisecond
improvement on the mean time to parse our source map in bench.html.

r? @ejpbruel

@ai

ai commented Jun 17, 2015

Copy link
Copy Markdown

BTW, why you didn’t use base64 function from some npm library?

@fitzgen

fitzgen commented Jun 17, 2015

Copy link
Copy Markdown
Contributor Author

At the time this lib was originally written, I'm not sure there was a good solution on npm. It was easy to implement it myself.

The requirement of running on node, in browsers, and within Firefox is another consideration, but not a show stopper.

Comment thread lib/source-map/base64.js

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.

Is the JIT clever enough not to reinitialize these variables on each call to decode? If not, these constants should be moved outside the function

@ejpbruel

Copy link
Copy Markdown
Contributor

Patch looks good to me. r+

It's a bit surprising that a property lookup is so much slower than a bunch of hardcoded if blocks. Intuitively, I'd expect table lookup to always win out over explicit branching (when not taking cache effects into account).

In any case, I wonder if doing a lookup based on the character's charCode, rather than it's string representation, would be any faster. Array element lookup is supposed to be faster than object property lookup, so I guess it depends on what the JIT can optimize. I expect it won't be faster than the inline code you just wrote, but it might be worth looking into at some point.

This function is incredibly hot while parsing mappings. By avoiding property
gets and throwing errors in this function, we get about 2000 millisecond
improvement on the mean time to parse our source map in bench.html.
fitzgen added a commit that referenced this pull request Jun 26, 2015
Optimize the base64.decode function.
@fitzgen
fitzgen merged commit fb5d2b3 into mozilla:master Jun 26, 2015
@fitzgen
fitzgen deleted the decode-base64 branch December 28, 2017 01:16
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