1
1
use either:: Either ;
2
+ use smartstring:: { LazyCompact , SmartString } ;
2
3
3
4
use super :: * ;
4
5
@@ -40,14 +41,23 @@ impl<'a> Lexer<'a> {
40
41
}
41
42
return self . read_token ( ) ;
42
43
}
43
- out. push_str ( unsafe {
44
- // Safety: We already checked for the range
45
- self . input . slice ( chunk_start, cur_pos)
46
- } ) ;
47
44
48
- return Ok ( Some ( Token :: JSXText {
49
- raw : self . atoms . atom ( out) ,
50
- } ) ) ;
45
+ let raw = if out. is_empty ( ) {
46
+ // Fast path: We don't need to allocate
47
+ let s = unsafe {
48
+ // Safety: We already checked for the range
49
+ self . input . slice ( chunk_start, cur_pos)
50
+ } ;
51
+ self . atoms . atom ( s)
52
+ } else {
53
+ out. push_str ( unsafe {
54
+ // Safety: We already checked for the range
55
+ self . input . slice ( chunk_start, cur_pos)
56
+ } ) ;
57
+ self . atoms . atom ( out)
58
+ } ;
59
+
60
+ return Ok ( Some ( Token :: JSXText { raw } ) ) ;
51
61
}
52
62
'>' => {
53
63
self . emit_error (
@@ -128,7 +138,7 @@ impl<'a> Lexer<'a> {
128
138
s. chars ( ) . all ( |c| c. is_ascii_digit ( ) )
129
139
}
130
140
131
- let mut s = String :: new ( ) ;
141
+ let mut s = SmartString :: < LazyCompact > :: default ( ) ;
132
142
133
143
let c = self . input . cur ( ) ;
134
144
debug_assert_eq ! ( c, Some ( '&' ) ) ;
@@ -292,13 +302,27 @@ impl<'a> Lexer<'a> {
292
302
}
293
303
}
294
304
295
- let cur_pos = self . input . cur_pos ( ) ;
296
- let value = unsafe {
297
- // Safety: We already checked for the range
298
- self . input . slice ( chunk_start, cur_pos)
299
- } ;
305
+ let value = if out. is_empty ( ) {
306
+ // Fast path: We don't need to allocate
307
+
308
+ let cur_pos = self . input . cur_pos ( ) ;
309
+ let value = unsafe {
310
+ // Safety: We already checked for the range
311
+ self . input . slice ( chunk_start, cur_pos)
312
+ } ;
300
313
301
- out. push_str ( value) ;
314
+ self . atoms . atom ( value)
315
+ } else {
316
+ let cur_pos = self . input . cur_pos ( ) ;
317
+ let value = unsafe {
318
+ // Safety: We already checked for the range
319
+ self . input . slice ( chunk_start, cur_pos)
320
+ } ;
321
+
322
+ out. push_str ( value) ;
323
+
324
+ self . atoms . atom ( out)
325
+ } ;
302
326
303
327
// it might be at the end of the file when
304
328
// the string literal is unterminated
@@ -316,7 +340,7 @@ impl<'a> Lexer<'a> {
316
340
} ;
317
341
318
342
Ok ( Token :: Str {
319
- value : self . atoms . atom ( out ) ,
343
+ value,
320
344
raw : self . atoms . atom ( raw) ,
321
345
} )
322
346
}
1 commit comments
github-actions[bot] commentedon Jun 19, 2024
Benchmark
es/full/bugs-1
291609
ns/iter (± 7556
)298985
ns/iter (± 5320
)0.98
es/full/minify/libraries/antd
1981305935
ns/iter (± 40617167
)1808422595
ns/iter (± 43874955
)1.10
es/full/minify/libraries/d3
356011647
ns/iter (± 3113121
)346699704
ns/iter (± 2875096
)1.03
es/full/minify/libraries/echarts
1677882018
ns/iter (± 31650687
)1514509639
ns/iter (± 26996919
)1.11
es/full/minify/libraries/jquery
104449686
ns/iter (± 512634
)102755901
ns/iter (± 509861
)1.02
es/full/minify/libraries/lodash
115885436
ns/iter (± 367790
)114181866
ns/iter (± 528136
)1.01
es/full/minify/libraries/moment
60281929
ns/iter (± 173725
)59387176
ns/iter (± 178357
)1.02
es/full/minify/libraries/react
18500931
ns/iter (± 51280
)18290762
ns/iter (± 86415
)1.01
es/full/minify/libraries/terser
290831341
ns/iter (± 4707340
)277185716
ns/iter (± 6225685
)1.05
es/full/minify/libraries/three
529904721
ns/iter (± 10445698
)480570409
ns/iter (± 10794108
)1.10
es/full/minify/libraries/typescript
3290623400
ns/iter (± 27802452
)3245929736
ns/iter (± 33467231
)1.01
es/full/minify/libraries/victory
755853037
ns/iter (± 18990956
)767594647
ns/iter (± 15816784
)0.98
es/full/minify/libraries/vue
146011921
ns/iter (± 972917
)146755152
ns/iter (± 1534714
)0.99
es/full/codegen/es3
60025
ns/iter (± 672
)59154
ns/iter (± 388
)1.01
es/full/codegen/es5
60247
ns/iter (± 459
)58860
ns/iter (± 181
)1.02
es/full/codegen/es2015
60111
ns/iter (± 227
)58614
ns/iter (± 188
)1.03
es/full/codegen/es2016
59906
ns/iter (± 143
)58721
ns/iter (± 179
)1.02
es/full/codegen/es2017
59909
ns/iter (± 272
)58852
ns/iter (± 322
)1.02
es/full/codegen/es2018
59915
ns/iter (± 164
)58666
ns/iter (± 160
)1.02
es/full/codegen/es2019
59885
ns/iter (± 182
)58665
ns/iter (± 206
)1.02
es/full/codegen/es2020
59925
ns/iter (± 177
)58867
ns/iter (± 376
)1.02
es/full/all/es3
161053851
ns/iter (± 890789
)160535825
ns/iter (± 907105
)1.00
es/full/all/es5
155745522
ns/iter (± 1345519
)154686881
ns/iter (± 1438573
)1.01
es/full/all/es2015
115247679
ns/iter (± 563436
)115525617
ns/iter (± 568246
)1.00
es/full/all/es2016
114654564
ns/iter (± 526111
)113857841
ns/iter (± 820293
)1.01
es/full/all/es2017
114065912
ns/iter (± 568193
)113685394
ns/iter (± 876687
)1.00
es/full/all/es2018
111968622
ns/iter (± 1047599
)112116777
ns/iter (± 627956
)1.00
es/full/all/es2019
110919931
ns/iter (± 845132
)111164273
ns/iter (± 542461
)1.00
es/full/all/es2020
107386517
ns/iter (± 701101
)107209335
ns/iter (± 634197
)1.00
es/full/parser
456219
ns/iter (± 2019
)460589
ns/iter (± 12538
)0.99
es/full/base/fixer
15539
ns/iter (± 71
)15602
ns/iter (± 568
)1.00
es/full/base/resolver_and_hygiene
81435
ns/iter (± 290
)80288
ns/iter (± 202
)1.01
serialization of serde
265
ns/iter (± 7
)266
ns/iter (± 0
)1.00
css/minify/libraries/bootstrap
21925275
ns/iter (± 107971
)21954322
ns/iter (± 22713
)1.00
css/visitor/compare/clone
1399968
ns/iter (± 26727
)1402313
ns/iter (± 25417
)1.00
css/visitor/compare/visit_mut_span
1521433
ns/iter (± 19342
)1522948
ns/iter (± 17507
)1.00
css/visitor/compare/visit_mut_span_panic
1546270
ns/iter (± 5880
)1543067
ns/iter (± 6651
)1.00
css/visitor/compare/fold_span
2039403
ns/iter (± 6578
)2035171
ns/iter (± 4673
)1.00
css/visitor/compare/fold_span_panic
2156781
ns/iter (± 2996
)2155893
ns/iter (± 6795
)1.00
css/lexer/bootstrap_5_1_3
3460072
ns/iter (± 3762
)3468154
ns/iter (± 3079
)1.00
css/lexer/foundation_6_7_4
2790045
ns/iter (± 1369
)2797190
ns/iter (± 2697
)1.00
css/lexer/tailwind_3_1_1
532470
ns/iter (± 382
)532353
ns/iter (± 438
)1.00
css/parser/bootstrap_5_1_3
16039266
ns/iter (± 34334
)16077132
ns/iter (± 97141
)1.00
css/parser/foundation_6_7_4
12802782
ns/iter (± 29154
)12862872
ns/iter (± 6996
)1.00
css/parser/tailwind_3_1_1
2581524
ns/iter (± 21061
)2598600
ns/iter (± 5436
)0.99
es/codegen/colors
729143
ns/iter (± 399514
)723416
ns/iter (± 395074
)1.01
es/codegen/large
3010325
ns/iter (± 1594347
)3009030
ns/iter (± 1580904
)1.00
es/codegen/with-parser/colors
41327
ns/iter (± 411
)41336
ns/iter (± 328
)1.00
es/codegen/with-parser/large
451933
ns/iter (± 1380
)452105
ns/iter (± 2514
)1.00
es/minify/libraries/antd
1487637633
ns/iter (± 52095785
)1488841400
ns/iter (± 42663453
)1.00
es/minify/libraries/d3
291732894
ns/iter (± 12748846
)286388751
ns/iter (± 13269912
)1.02
es/minify/libraries/echarts
1263005879
ns/iter (± 27130092
)1230163006
ns/iter (± 44031395
)1.03
es/minify/libraries/jquery
83159447
ns/iter (± 390115
)82180169
ns/iter (± 244664
)1.01
es/minify/libraries/lodash
105183839
ns/iter (± 407475
)104282621
ns/iter (± 499186
)1.01
es/minify/libraries/moment
49244171
ns/iter (± 254735
)48046386
ns/iter (± 69162
)1.02
es/minify/libraries/react
16309590
ns/iter (± 20160
)16176741
ns/iter (± 49775
)1.01
es/minify/libraries/terser
223425094
ns/iter (± 4251353
)217600314
ns/iter (± 6639948
)1.03
es/minify/libraries/three
381946358
ns/iter (± 24638450
)402859037
ns/iter (± 7000081
)0.95
es/minify/libraries/typescript
2878746073
ns/iter (± 38418796
)2765086514
ns/iter (± 20700614
)1.04
es/minify/libraries/victory
674221067
ns/iter (± 21423722
)666407649
ns/iter (± 34415598
)1.01
es/minify/libraries/vue
123759111
ns/iter (± 1193326
)121463971
ns/iter (± 1053447
)1.02
es/visitor/compare/clone
1703248
ns/iter (± 9691
)1695845
ns/iter (± 4921
)1.00
es/visitor/compare/visit_mut_span
2041088
ns/iter (± 2389
)2034621
ns/iter (± 8842
)1.00
es/visitor/compare/visit_mut_span_panic
2030526
ns/iter (± 3568
)2029761
ns/iter (± 28467
)1.00
es/visitor/compare/fold_span
2763279
ns/iter (± 12823
)2721509
ns/iter (± 15621
)1.02
es/visitor/compare/fold_span_panic
2797136
ns/iter (± 4715
)2759792
ns/iter (± 8911
)1.01
es/lexer/colors
9505
ns/iter (± 195
)9241
ns/iter (± 88
)1.03
es/lexer/angular
4885195
ns/iter (± 10833
)4777904
ns/iter (± 29978
)1.02
es/lexer/backbone
613559
ns/iter (± 1281
)623864
ns/iter (± 2128
)0.98
es/lexer/jquery
3454508
ns/iter (± 6562
)3479065
ns/iter (± 23955
)0.99
es/lexer/jquery mobile
5151583
ns/iter (± 69334
)5174955
ns/iter (± 23269
)1.00
es/lexer/mootools
2749379
ns/iter (± 4337
)2738883
ns/iter (± 14198
)1.00
es/lexer/underscore
515648
ns/iter (± 3626
)519330
ns/iter (± 1276
)0.99
es/lexer/three
15543270
ns/iter (± 176141
)15519923
ns/iter (± 55207
)1.00
es/lexer/yui
2818113
ns/iter (± 50925
)2860513
ns/iter (± 29469
)0.99
es/lexer/cal-com
12503664
ns/iter (± 100469
)12538765
ns/iter (± 41313
)1.00
es/lexer/typescript
88366758
ns/iter (± 649840
)87492115
ns/iter (± 351823
)1.01
es/parser/colors
24207
ns/iter (± 452
)23913
ns/iter (± 109
)1.01
es/parser/angular
12381757
ns/iter (± 72513
)12440877
ns/iter (± 85379
)1.00
es/parser/backbone
1819446
ns/iter (± 6501
)1798124
ns/iter (± 7552
)1.01
es/parser/jquery
10048030
ns/iter (± 54616
)9921538
ns/iter (± 67001
)1.01
es/parser/jquery mobile
15139985
ns/iter (± 139348
)14956843
ns/iter (± 96517
)1.01
es/parser/mootools
7819964
ns/iter (± 21581
)7703949
ns/iter (± 55902
)1.02
es/parser/underscore
1589380
ns/iter (± 5919
)1565627
ns/iter (± 6208
)1.02
es/parser/three
44053345
ns/iter (± 496953
)43720351
ns/iter (± 497499
)1.01
es/parser/yui
7379593
ns/iter (± 65897
)7365400
ns/iter (± 39731
)1.00
es/parser/cal-com
41075176
ns/iter (± 192337
)42441813
ns/iter (± 472703
)0.97
es/parser/typescript
269689513
ns/iter (± 3842553
)264785378
ns/iter (± 785945
)1.02
es/preset-env/usage/builtin_type
136743
ns/iter (± 36808
)135972
ns/iter (± 33909
)1.01
es/preset-env/usage/property
16394
ns/iter (± 71
)16427
ns/iter (± 147
)1.00
es/resolver/typescript
100744702
ns/iter (± 3544517
)103886193
ns/iter (± 2033631
)0.97
es/fixer/typescript
79989774
ns/iter (± 5029994
)81255809
ns/iter (± 2203838
)0.98
es/hygiene/typescript
183694156
ns/iter (± 4149396
)188950922
ns/iter (± 2189172
)0.97
es/resolver_with_hygiene/typescript
302324124
ns/iter (± 2702970
)308658017
ns/iter (± 2242011
)0.98
es/visitor/base-perf/module_clone
56881
ns/iter (± 684
)57882
ns/iter (± 781
)0.98
es/visitor/base-perf/fold_empty
60547
ns/iter (± 532
)60051
ns/iter (± 880
)1.01
es/visitor/base-perf/fold_noop_impl_all
60555
ns/iter (± 763
)60374
ns/iter (± 206
)1.00
es/visitor/base-perf/fold_noop_impl_vec
60426
ns/iter (± 503
)60851
ns/iter (± 383
)0.99
es/visitor/base-perf/boxing_boxed_clone
60
ns/iter (± 0
)60
ns/iter (± 0
)1
es/visitor/base-perf/boxing_unboxed_clone
46
ns/iter (± 0
)46
ns/iter (± 0
)1
es/visitor/base-perf/boxing_boxed
106
ns/iter (± 0
)106
ns/iter (± 0
)1
es/visitor/base-perf/boxing_unboxed
81
ns/iter (± 0
)81
ns/iter (± 0
)1
es/visitor/base-perf/visit_contains_this
2485
ns/iter (± 12
)2482
ns/iter (± 8
)1.00
es/base/parallel/resolver/typescript
2510540884
ns/iter (± 143062092
)2512810991
ns/iter (± 133198971
)1.00
es/base/parallel/hygiene/typescript
3115820887
ns/iter (± 54222894
)3272860671
ns/iter (± 57878659
)0.95
babelify-only
477908
ns/iter (± 3854
)477833
ns/iter (± 3723
)1.00
parse_and_babelify_angular
40895258
ns/iter (± 820205
)41060600
ns/iter (± 2062419
)1.00
parse_and_babelify_backbone
4305135
ns/iter (± 145226
)4426043
ns/iter (± 127265
)0.97
parse_and_babelify_jquery
28151313
ns/iter (± 304406
)28342652
ns/iter (± 254300
)0.99
parse_and_babelify_jquery_mobile
47994025
ns/iter (± 630083
)48690745
ns/iter (± 577105
)0.99
parse_and_babelify_mootools
25432920
ns/iter (± 459544
)25478708
ns/iter (± 1672446
)1.00
parse_and_babelify_underscore
3590739
ns/iter (± 25717
)3601076
ns/iter (± 20758
)1.00
parse_and_babelify_yui
23725714
ns/iter (± 447193
)27665419
ns/iter (± 2077720
)0.86
html/minify/document/css_spec
45558340
ns/iter (± 452430
)47007161
ns/iter (± 245664
)0.97
html/minify/document/github
18424840
ns/iter (± 194984
)18446566
ns/iter (± 244942
)1.00
html/minify/document/stackoverflow
16875231
ns/iter (± 400132
)17609647
ns/iter (± 793089
)0.96
html/minify/document_fragment/css_spec
44836405
ns/iter (± 91525
)46571856
ns/iter (± 486683
)0.96
html/minify/document_fragment/github
18267316
ns/iter (± 33222
)18534172
ns/iter (± 173064
)0.99
html/minify/document_fragment/stackoverflow
16641264
ns/iter (± 30692
)16981590
ns/iter (± 290978
)0.98
html/document/visitor/compare/clone
165820
ns/iter (± 1745
)166929
ns/iter (± 1336
)0.99
html/document/visitor/compare/visit_mut_span
183293
ns/iter (± 1096
)184117
ns/iter (± 1437
)1.00
html/document/visitor/compare/visit_mut_span_panic
191593
ns/iter (± 4882
)188669
ns/iter (± 2802
)1.02
html/document/visitor/compare/fold_span
232630
ns/iter (± 1319
)233118
ns/iter (± 2398
)1.00
html/document/visitor/compare/fold_span_panic
281758
ns/iter (± 1902
)280933
ns/iter (± 1034
)1.00
html/document_fragment/visitor/compare/clone
168122
ns/iter (± 783
)168007
ns/iter (± 535
)1.00
html/document_fragment/visitor/compare/visit_mut_span
184196
ns/iter (± 1630
)184072
ns/iter (± 1804
)1.00
html/document_fragment/visitor/compare/visit_mut_span_panic
188424
ns/iter (± 1703
)188160
ns/iter (± 3580
)1.00
html/document_fragment/visitor/compare/fold_span
230750
ns/iter (± 1442
)228205
ns/iter (± 1874
)1.01
html/document_fragment/visitor/compare/fold_span_panic
284070
ns/iter (± 1656
)280155
ns/iter (± 1009
)1.01
html/lexer/css_2021_spec
12873925
ns/iter (± 188948
)12990434
ns/iter (± 49990
)0.99
html/lexer/github_com_17_05_2022
4915711
ns/iter (± 15502
)4957775
ns/iter (± 10231
)0.99
html/lexer/stackoverflow_com_17_05_2022
4649654
ns/iter (± 3167
)4709916
ns/iter (± 16871
)0.99
html/parser/parser_document/css_2021_spec
26319142
ns/iter (± 629708
)25264856
ns/iter (± 141878
)1.04
html/parser/parser_document/github_com_17_05_2022
8515829
ns/iter (± 37453
)8439937
ns/iter (± 33535
)1.01
html/parser/parser_document/stackoverflow_com_17_05_2022
7484427
ns/iter (± 18053
)7382028
ns/iter (± 8249
)1.01
html/parser/parser_document_fragment/css_2021_spec
25519590
ns/iter (± 156570
)25091556
ns/iter (± 133286
)1.02
html/parser/parser_document_fragment/github_com_17_05_2022
8473128
ns/iter (± 26690
)8455505
ns/iter (± 73908
)1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022
7393373
ns/iter (± 13551
)7283319
ns/iter (± 20625
)1.02
This comment was automatically generated by workflow using github-action-benchmark.