-
Notifications
You must be signed in to change notification settings - Fork 107
Open
Description
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