Skip to content

Replace Map<number,T> with (sparse) Array<T>  #467

@BurtHarris

Description

@BurtHarris

Arrays in JavaScript are by definition sparse, so using a Map with number key seems like a potential performance improvement. For example, DFAState.edges is high-traffic, particularly in getTarget().

A quick trial experiment of this showed around 17% speed improvement in TestLexerSeed. Before the change:

       lex_legacy_java_utf8 average time 2951us over 2000 runs of 29600 symbols
       lex_legacy_java_utf8 average time 7137us over 2000 runs of 29600 symbols DFA cleared
          lex_new_java_utf8 average time 2937us over 2000 runs of 29600 symbols
          lex_new_java_utf8 average time 7180us over 2000 runs of 29600 symbols DFA cleared

With Array replacing Map<number, DFAState> the results were:

       lex_legacy_java_utf8 average time 2436us over 2000 runs of 29600 symbols
       lex_legacy_java_utf8 average time 6733us over 2000 runs of 29600 symbols DFA cleared
          lex_new_java_utf8 average time 2481us over 2000 runs of 29600 symbols
          lex_new_java_utf8 average time 6761us over 2000 runs of 29600 symbols DFA cleared

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions