Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
perf(es/minifier): Use rope-like structure for the name mangler (#6661)
- Loading branch information
Showing
3 changed files
with
75 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
47 changes: 47 additions & 0 deletions
47
crates/swc_ecma_transforms_base/src/rename/analyzer/reverse_map.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
use rustc_hash::FxHashMap; | ||
|
||
use super::scope::{FastId, FastJsWord}; | ||
|
||
#[derive(Debug, Default)] | ||
pub(crate) struct ReverseMap<'a> { | ||
prev: Option<&'a ReverseMap<'a>>, | ||
|
||
inner: FxHashMap<FastJsWord, Vec<FastId>>, | ||
} | ||
|
||
impl ReverseMap<'_> { | ||
pub fn push_entry(&mut self, key: FastJsWord, id: FastId) { | ||
self.inner.entry(key).or_default().push(id); | ||
} | ||
|
||
fn iter(&self) -> Iter { | ||
Iter { cur: Some(self) } | ||
} | ||
|
||
pub fn get<'a>(&'a self, key: &'a FastJsWord) -> impl Iterator<Item = &'a FastId> + 'a { | ||
self.iter() | ||
.filter_map(|v| v.inner.get(key)) | ||
.flat_map(|v| v.iter()) | ||
} | ||
|
||
pub fn next(&self) -> ReverseMap { | ||
ReverseMap { | ||
prev: Some(self), | ||
..Default::default() | ||
} | ||
} | ||
} | ||
|
||
pub(crate) struct Iter<'a> { | ||
cur: Option<&'a ReverseMap<'a>>, | ||
} | ||
|
||
impl<'a> Iterator for Iter<'a> { | ||
type Item = &'a ReverseMap<'a>; | ||
|
||
fn next(&mut self) -> Option<Self::Item> { | ||
let cur = self.cur.take()?; | ||
self.cur = cur.prev; | ||
Some(cur) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cb4173a
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Benchmark
es/full/bugs-1
307549
ns/iter (± 17103
)294436
ns/iter (± 18672
)1.04
es/full/minify/libraries/antd
1747643644
ns/iter (± 19341265
)1682929952
ns/iter (± 22010166
)1.04
es/full/minify/libraries/d3
313284816
ns/iter (± 4775108
)355263299
ns/iter (± 6437494
)0.88
es/full/minify/libraries/echarts
1354874075
ns/iter (± 12750915
)1392993601
ns/iter (± 13312952
)0.97
es/full/minify/libraries/jquery
92036818
ns/iter (± 776717
)91520549
ns/iter (± 874153
)1.01
es/full/minify/libraries/lodash
107803067
ns/iter (± 793937
)109655120
ns/iter (± 910534
)0.98
es/full/minify/libraries/moment
53624495
ns/iter (± 356373
)53472926
ns/iter (± 381720
)1.00
es/full/minify/libraries/react
19217933
ns/iter (± 334353
)19432660
ns/iter (± 120930
)0.99
es/full/minify/libraries/terser
257417945
ns/iter (± 2765754
)256302558
ns/iter (± 3615254
)1.00
es/full/minify/libraries/three
491971444
ns/iter (± 5626645
)472979053
ns/iter (± 9766481
)1.04
es/full/minify/libraries/typescript
3343596629
ns/iter (± 36374127
)3131604239
ns/iter (± 27741782
)1.07
es/full/minify/libraries/victory
755861182
ns/iter (± 15794788
)735437178
ns/iter (± 8807430
)1.03
es/full/minify/libraries/vue
132540867
ns/iter (± 2237567
)140084586
ns/iter (± 1289782
)0.95
es/full/codegen/es3
27342
ns/iter (± 60
)27338
ns/iter (± 44
)1.00
es/full/codegen/es5
27224
ns/iter (± 48
)27310
ns/iter (± 53
)1.00
es/full/codegen/es2015
27206
ns/iter (± 75
)27316
ns/iter (± 39
)1.00
es/full/codegen/es2016
27199
ns/iter (± 58
)27258
ns/iter (± 37
)1.00
es/full/codegen/es2017
27159
ns/iter (± 64
)27366
ns/iter (± 35
)0.99
es/full/codegen/es2018
27169
ns/iter (± 72
)27296
ns/iter (± 37
)1.00
es/full/codegen/es2019
27196
ns/iter (± 38
)27338
ns/iter (± 57
)0.99
es/full/codegen/es2020
27183
ns/iter (± 58
)27291
ns/iter (± 58
)1.00
es/full/all/es3
165807884
ns/iter (± 2838023
)166551369
ns/iter (± 2324597
)1.00
es/full/all/es5
159599653
ns/iter (± 1206851
)158377352
ns/iter (± 1348868
)1.01
es/full/all/es2015
119457396
ns/iter (± 651824
)118910261
ns/iter (± 759066
)1.00
es/full/all/es2016
118742186
ns/iter (± 754297
)117633050
ns/iter (± 698753
)1.01
es/full/all/es2017
117044212
ns/iter (± 946954
)117200000
ns/iter (± 800425
)1.00
es/full/all/es2018
115900335
ns/iter (± 625258
)115294995
ns/iter (± 749570
)1.01
es/full/all/es2019
115242257
ns/iter (± 757364
)114894506
ns/iter (± 1060860
)1.00
es/full/all/es2020
110804480
ns/iter (± 773503
)110434503
ns/iter (± 742005
)1.00
es/full/parser
517522
ns/iter (± 8407
)500817
ns/iter (± 8391
)1.03
es/full/base/fixer
21674
ns/iter (± 24
)21928
ns/iter (± 122
)0.99
es/full/base/resolver_and_hygiene
77950
ns/iter (± 400
)77659
ns/iter (± 173
)1.00
serialization of ast node
138
ns/iter (± 0
)138
ns/iter (± 0
)1
serialization of serde
124
ns/iter (± 0
)124
ns/iter (± 0
)1
css/minify/libraries/bootstrap
27171931
ns/iter (± 159908
)26887820
ns/iter (± 102574
)1.01
css/visitor/compare/clone
2052928
ns/iter (± 16640
)2075951
ns/iter (± 9801
)0.99
css/visitor/compare/visit_mut_span
2254912
ns/iter (± 5824
)2273458
ns/iter (± 10834
)0.99
css/visitor/compare/visit_mut_span_panic
2302595
ns/iter (± 3875
)2338348
ns/iter (± 9293
)0.98
css/visitor/compare/fold_span
3014376
ns/iter (± 22136
)3043917
ns/iter (± 31390
)0.99
css/visitor/compare/fold_span_panic
3140004
ns/iter (± 21920
)3168852
ns/iter (± 31699
)0.99
css/lexer/bootstrap_5_1_3
5195876
ns/iter (± 5685
)5192281
ns/iter (± 3829
)1.00
css/lexer/foundation_6_7_4
4411955
ns/iter (± 5414
)4412449
ns/iter (± 2479
)1.00
css/lexer/tailwind_3_1_1
827014
ns/iter (± 921
)826178
ns/iter (± 2449
)1.00
css/parser/bootstrap_5_1_3
20795778
ns/iter (± 92331
)20596008
ns/iter (± 67809
)1.01
css/parser/foundation_6_7_4
16614590
ns/iter (± 358718
)16520169
ns/iter (± 85931
)1.01
css/parser/tailwind_3_1_1
3191332
ns/iter (± 1817
)3179605
ns/iter (± 14653
)1.00
es/codegen/colors
322832
ns/iter (± 181265
)332505
ns/iter (± 184587
)0.97
es/codegen/large
1222619
ns/iter (± 648829
)1214663
ns/iter (± 638499
)1.01
es/codegen/with-parser/colors
46444
ns/iter (± 185
)46525
ns/iter (± 308
)1.00
es/codegen/with-parser/large
506151
ns/iter (± 792
)507275
ns/iter (± 3069
)1.00
es/minify/libraries/antd
1537765646
ns/iter (± 17495496
)1426407874
ns/iter (± 35008575
)1.08
es/minify/libraries/d3
270564678
ns/iter (± 2546261
)291770407
ns/iter (± 8919424
)0.93
es/minify/libraries/echarts
1168670568
ns/iter (± 8739553
)1234274153
ns/iter (± 18205554
)0.95
es/minify/libraries/jquery
79049173
ns/iter (± 402012
)78429729
ns/iter (± 462202
)1.01
es/minify/libraries/lodash
97178072
ns/iter (± 654722
)96527179
ns/iter (± 810436
)1.01
es/minify/libraries/moment
46448220
ns/iter (± 557728
)45601333
ns/iter (± 409756
)1.02
es/minify/libraries/react
17132418
ns/iter (± 178791
)17188800
ns/iter (± 48269
)1.00
es/minify/libraries/terser
221322840
ns/iter (± 1344115
)217834267
ns/iter (± 5117316
)1.02
es/minify/libraries/three
407318621
ns/iter (± 6715311
)375739149
ns/iter (± 8066482
)1.08
es/minify/libraries/typescript
2872945859
ns/iter (± 16800180
)2667070863
ns/iter (± 17619355
)1.08
es/minify/libraries/victory
661292915
ns/iter (± 13593674
)650161833
ns/iter (± 5953547
)1.02
es/minify/libraries/vue
120009351
ns/iter (± 1165564
)126373991
ns/iter (± 1633084
)0.95
es/visitor/compare/clone
2397189
ns/iter (± 32516
)2462465
ns/iter (± 54473
)0.97
es/visitor/compare/visit_mut_span
2820002
ns/iter (± 6403
)2829867
ns/iter (± 5572
)1.00
es/visitor/compare/visit_mut_span_panic
2895829
ns/iter (± 9637
)2870932
ns/iter (± 31975
)1.01
es/visitor/compare/fold_span
4073064
ns/iter (± 19496
)4024262
ns/iter (± 30676
)1.01
es/visitor/compare/fold_span_panic
4186693
ns/iter (± 40180
)4200530
ns/iter (± 62954
)1.00
es/lexer/colors
17301
ns/iter (± 11
)17202
ns/iter (± 8
)1.01
es/lexer/angular
8277733
ns/iter (± 3768
)8242882
ns/iter (± 7031
)1.00
es/lexer/backbone
1080932
ns/iter (± 653
)1072940
ns/iter (± 1007
)1.01
es/lexer/jquery
5989510
ns/iter (± 9387
)5954217
ns/iter (± 4914
)1.01
es/lexer/jquery mobile
9217453
ns/iter (± 8822
)9170690
ns/iter (± 76548
)1.01
es/lexer/mootools
4703594
ns/iter (± 6606
)4666905
ns/iter (± 1661
)1.01
es/lexer/underscore
903078
ns/iter (± 1696
)895575
ns/iter (± 432
)1.01
es/lexer/three
28083250
ns/iter (± 23122
)27956337
ns/iter (± 21218
)1.00
es/lexer/yui
5078391
ns/iter (± 4588
)5057986
ns/iter (± 4264
)1.00
es/parser/colors
31127
ns/iter (± 172
)31100
ns/iter (± 87
)1.00
es/parser/angular
16169038
ns/iter (± 216179
)16296176
ns/iter (± 221851
)0.99
es/parser/backbone
2329835
ns/iter (± 15506
)2307745
ns/iter (± 15186
)1.01
es/parser/jquery
12518000
ns/iter (± 69109
)12509076
ns/iter (± 173857
)1.00
es/parser/jquery mobile
19906042
ns/iter (± 165118
)20019512
ns/iter (± 245125
)0.99
es/parser/mootools
9577984
ns/iter (± 22266
)9518618
ns/iter (± 38550
)1.01
es/parser/underscore
1972276
ns/iter (± 9221
)1970016
ns/iter (± 13241
)1.00
es/parser/three
60737398
ns/iter (± 552253
)58861235
ns/iter (± 988584
)1.03
es/parser/yui
9722516
ns/iter (± 58254
)9668789
ns/iter (± 59036
)1.01
es/preset-env/usage/builtin_type
138109
ns/iter (± 29992
)139745
ns/iter (± 32025
)0.99
es/preset-env/usage/property
21520
ns/iter (± 119
)21622
ns/iter (± 116
)1.00
es/resolver/typescript
121828619
ns/iter (± 2534116
)112657650
ns/iter (± 5869324
)1.08
es/fixer/typescript
100484955
ns/iter (± 7791125
)88737974
ns/iter (± 3462499
)1.13
es/hygiene/typescript
199837365
ns/iter (± 767829
)174923076
ns/iter (± 1264461
)1.14
es/resolver_with_hygiene/typescript
340751107
ns/iter (± 1599241
)303966080
ns/iter (± 2716871
)1.12
es/visitor/base-perf/module_clone
76327
ns/iter (± 1135
)76881
ns/iter (± 926
)0.99
es/visitor/base-perf/fold_empty
86218
ns/iter (± 1582
)84810
ns/iter (± 1205
)1.02
es/visitor/base-perf/fold_noop_impl_all
85527
ns/iter (± 630
)85526
ns/iter (± 1294
)1.00
es/visitor/base-perf/fold_noop_impl_vec
86968
ns/iter (± 1212
)85464
ns/iter (± 1275
)1.02
es/visitor/base-perf/boxing_boxed_clone
56
ns/iter (± 0
)56
ns/iter (± 0
)1
es/visitor/base-perf/boxing_unboxed_clone
60
ns/iter (± 0
)59
ns/iter (± 0
)1.02
es/visitor/base-perf/boxing_boxed
102
ns/iter (± 0
)102
ns/iter (± 0
)1
es/visitor/base-perf/boxing_unboxed
108
ns/iter (± 0
)103
ns/iter (± 0
)1.05
es/visitor/base-perf/visit_contains_this
3560
ns/iter (± 95
)3532
ns/iter (± 53
)1.01
es/base/parallel/resolver/typescript
6119864528
ns/iter (± 453058491
)5417307049
ns/iter (± 559709080
)1.13
es/base/parallel/hygiene/typescript
2247701111
ns/iter (± 22222650
)2019229736
ns/iter (± 29826157
)1.11
misc/visitors/time-complexity/time 5
93
ns/iter (± 0
)94
ns/iter (± 0
)0.99
misc/visitors/time-complexity/time 10
331
ns/iter (± 4
)324
ns/iter (± 0
)1.02
misc/visitors/time-complexity/time 15
638
ns/iter (± 1
)649
ns/iter (± 13
)0.98
misc/visitors/time-complexity/time 20
1196
ns/iter (± 5
)1217
ns/iter (± 5
)0.98
misc/visitors/time-complexity/time 40
6149
ns/iter (± 10
)6171
ns/iter (± 20
)1.00
misc/visitors/time-complexity/time 60
15522
ns/iter (± 11
)15504
ns/iter (± 27
)1.00
es/full-target/es2016
189636
ns/iter (± 1289
)188499
ns/iter (± 1045
)1.01
es/full-target/es2017
183036
ns/iter (± 612
)182801
ns/iter (± 574
)1.00
es/full-target/es2018
172317
ns/iter (± 656
)171970
ns/iter (± 311
)1.00
es2020_nullish_coalescing
67161
ns/iter (± 188
)66432
ns/iter (± 152
)1.01
es2020_optional_chaining
95859
ns/iter (± 368
)95684
ns/iter (± 281
)1.00
es2022_class_properties
93487
ns/iter (± 166
)92974
ns/iter (± 125
)1.01
es2018_object_rest_spread
71647
ns/iter (± 120
)71432
ns/iter (± 142
)1.00
es2019_optional_catch_binding
60909
ns/iter (± 115
)60902
ns/iter (± 116
)1.00
es2017_async_to_generator
61540
ns/iter (± 125
)61542
ns/iter (± 193
)1.00
es2016_exponentiation
65125
ns/iter (± 90
)64302
ns/iter (± 153
)1.01
es2015_arrow
70293
ns/iter (± 281
)70195
ns/iter (± 247
)1.00
es2015_block_scoped_fn
65846
ns/iter (± 106
)65728
ns/iter (± 99
)1.00
es2015_block_scoping
153039
ns/iter (± 9249
)152273
ns/iter (± 9926
)1.01
es2015_classes
117250
ns/iter (± 455
)116749
ns/iter (± 483
)1.00
es2015_computed_props
60986
ns/iter (± 151
)61249
ns/iter (± 131
)1.00
es2015_destructuring
116234
ns/iter (± 795
)115586
ns/iter (± 501
)1.01
es2015_duplicate_keys
63729
ns/iter (± 80
)63812
ns/iter (± 104
)1.00
es2015_parameters
79609
ns/iter (± 130
)79481
ns/iter (± 205
)1.00
es2015_fn_name
66921
ns/iter (± 448
)66330
ns/iter (± 442
)1.01
es2015_for_of
64215
ns/iter (± 163
)63789
ns/iter (± 158
)1.01
es2015_instanceof
63376
ns/iter (± 135
)63006
ns/iter (± 155
)1.01
es2015_shorthand_property
61026
ns/iter (± 200
)60640
ns/iter (± 186
)1.01
es2015_spread
61113
ns/iter (± 125
)60779
ns/iter (± 236
)1.01
es2015_sticky_regex
62722
ns/iter (± 255
)61598
ns/iter (± 404
)1.02
es2015_typeof_symbol
62302
ns/iter (± 156
)61235
ns/iter (± 363
)1.02
es/transform/baseline/base
51825
ns/iter (± 126
)50836
ns/iter (± 337
)1.02
es/transform/baseline/common_reserved_word
62141
ns/iter (± 197
)61213
ns/iter (± 645
)1.02
es/transform/baseline/common_typescript
142944
ns/iter (± 165
)168027
ns/iter (± 9919
)0.85
es/target/es3
169271
ns/iter (± 416
)168926
ns/iter (± 317
)1.00
es/target/es2015
632907
ns/iter (± 1455
)628567
ns/iter (± 940
)1.01
es/target/es2016
65235
ns/iter (± 100
)64598
ns/iter (± 119
)1.01
es/target/es2017
61693
ns/iter (± 139
)61544
ns/iter (± 63
)1.00
es/target/es2018
81578
ns/iter (± 164
)81707
ns/iter (± 153
)1.00
es/target/es2020
132271
ns/iter (± 435
)132298
ns/iter (± 423
)1.00
babelify-only
671107
ns/iter (± 1558
)676449
ns/iter (± 5412
)0.99
parse_and_babelify_angular
45717147
ns/iter (± 894610
)43617700
ns/iter (± 1323660
)1.05
parse_and_babelify_backbone
5450147
ns/iter (± 52413
)5487939
ns/iter (± 46905
)0.99
parse_and_babelify_jquery
33290365
ns/iter (± 284656
)32504788
ns/iter (± 447983
)1.02
parse_and_babelify_jquery_mobile
57085374
ns/iter (± 525509
)55565622
ns/iter (± 1072970
)1.03
parse_and_babelify_mootools
34689749
ns/iter (± 223867
)33313681
ns/iter (± 432095
)1.04
parse_and_babelify_underscore
4368149
ns/iter (± 22565
)4370814
ns/iter (± 25748
)1.00
parse_and_babelify_yui
34397162
ns/iter (± 983371
)32557445
ns/iter (± 515317
)1.06
html/minify/document/css_spec
42316429
ns/iter (± 153518
)42067483
ns/iter (± 289318
)1.01
html/minify/document/github
17503163
ns/iter (± 56464
)17501483
ns/iter (± 46000
)1.00
html/minify/document/stackoverflow
15608511
ns/iter (± 50109
)15491201
ns/iter (± 48719
)1.01
html/minify/document_fragment/css_spec
40783326
ns/iter (± 133475
)39677040
ns/iter (± 257148
)1.03
html/minify/document_fragment/github
16794670
ns/iter (± 35438
)16734193
ns/iter (± 72746
)1.00
html/minify/document_fragment/stackoverflow
15219623
ns/iter (± 54089
)15151481
ns/iter (± 78267
)1.00
html/document/visitor/compare/clone
342927
ns/iter (± 2157
)337130
ns/iter (± 2597
)1.02
html/document/visitor/compare/visit_mut_span
363714
ns/iter (± 1807
)362307
ns/iter (± 1419
)1.00
html/document/visitor/compare/visit_mut_span_panic
374205
ns/iter (± 2336
)373646
ns/iter (± 1167
)1.00
html/document/visitor/compare/fold_span
403141
ns/iter (± 2523
)398408
ns/iter (± 1779
)1.01
html/document/visitor/compare/fold_span_panic
458588
ns/iter (± 2549
)465858
ns/iter (± 1782
)0.98
html/document_fragment/visitor/compare/clone
334030
ns/iter (± 1848
)337247
ns/iter (± 1851
)0.99
html/document_fragment/visitor/compare/visit_mut_span
363046
ns/iter (± 3489
)365285
ns/iter (± 2376
)0.99
html/document_fragment/visitor/compare/visit_mut_span_panic
372158
ns/iter (± 1811
)375328
ns/iter (± 3124
)0.99
html/document_fragment/visitor/compare/fold_span
402757
ns/iter (± 2100
)399443
ns/iter (± 1518
)1.01
html/document_fragment/visitor/compare/fold_span_panic
462885
ns/iter (± 2117
)457163
ns/iter (± 2796
)1.01
html/lexer/css_2021_spec
15551820
ns/iter (± 67920
)15536961
ns/iter (± 31091
)1.00
html/lexer/github_com_17_05_2022
6014614
ns/iter (± 5386
)6040970
ns/iter (± 14460
)1.00
html/lexer/stackoverflow_com_17_05_2022
5627358
ns/iter (± 7907
)5616909
ns/iter (± 1670
)1.00
html/parser/parser_document/css_2021_spec
25829958
ns/iter (± 137744
)26651772
ns/iter (± 392650
)0.97
html/parser/parser_document/github_com_17_05_2022
8793884
ns/iter (± 23491
)8797885
ns/iter (± 33020
)1.00
html/parser/parser_document/stackoverflow_com_17_05_2022
7713298
ns/iter (± 15061
)7710602
ns/iter (± 49959
)1.00
html/parser/parser_document_fragment/css_2021_spec
25804260
ns/iter (± 473366
)25755418
ns/iter (± 212978
)1.00
html/parser/parser_document_fragment/github_com_17_05_2022
8793308
ns/iter (± 19000
)8816610
ns/iter (± 15131
)1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022
7737262
ns/iter (± 60702
)7715076
ns/iter (± 11361
)1.00
This comment was automatically generated by workflow using github-action-benchmark.