Skip to content

faster maps#1026

Draft
Fil wants to merge 3 commits intomainfrom
fil/faster-map
Draft

faster maps#1026
Fil wants to merge 3 commits intomainfrom
fil/faster-map

Conversation

@Fil
Copy link
Copy Markdown
Contributor

@Fil Fil commented Aug 9, 2022

it's faster to allocate a typed array with a known size than through Array.from — when dealing with millions of points, this can boost the performance quite a bit.

(results of a pairing session with @yurivish)

saving as draft for now (we'll want to make the test on the scale type less ad-hoc, probably?)

see also #888

Comment thread src/channel.js
return [name, scale === undefined ? value : map(value, scale)];
return [
name,
scale === undefined ? value : map(value, scale, ["x", "y", "r"].includes(scaleName) ? Float64Array : undefined)
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

TBD: this is possibly wrong, since in the case of numbers we want to wrap the scale function and return NaN when the result is null? Or maybe it never happens?

Comment thread src/options.js
// instanceof the desired array type, the faster values.map method is used.
export function map(values, f, type = Array) {
return values instanceof type ? values.map(f) : type.from(values, f);
if (values instanceof type) return values.map(f);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we know that values is an array here? It could be that we are using map for non-arrays like iterables and {length} objects too.

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.

2 participants