Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(css/compat): Add
Compiler
(#6626)
**Description:** Visitor patterns are inherently slow, so I decided to merge all compatibility passes into a single pass.
- Loading branch information
Showing
6 changed files
with
38 additions
and
0 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
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
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 @@ | ||
|
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,26 @@ | ||
use swc_css_visit::VisitMut; | ||
|
||
use crate::feature::Features; | ||
|
||
mod custom_media; | ||
|
||
/// Compiles a modern CSS file to a CSS file which works with old browsers. | ||
#[derive(Debug)] | ||
pub struct Compiler { | ||
#[allow(unused)] | ||
c: Config, | ||
} | ||
|
||
#[derive(Debug)] | ||
pub struct Config { | ||
/// The list of features to **process**. | ||
pub process: Features, | ||
} | ||
|
||
impl Compiler { | ||
pub fn new(config: Config) -> Self { | ||
Self { c: config } | ||
} | ||
} | ||
|
||
impl VisitMut for Compiler {} |
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,7 @@ | ||
use bitflags::bitflags; | ||
|
||
bitflags! { | ||
pub struct Features: u64 { | ||
const NESTING = 0b00000001; | ||
} | ||
} |
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 |
---|---|---|
@@ -1,4 +1,6 @@ | ||
#![feature(box_patterns)] | ||
#![allow(clippy::vec_box)] | ||
|
||
pub mod compiler; | ||
pub mod feature; | ||
pub mod nesting; |
b3bbd74
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
299883
ns/iter (± 8573
)296685
ns/iter (± 5865
)1.01
es/full/minify/libraries/antd
1819955102
ns/iter (± 20511009
)1668612733
ns/iter (± 16330412
)1.09
es/full/minify/libraries/d3
358522455
ns/iter (± 5926281
)346073590
ns/iter (± 2829400
)1.04
es/full/minify/libraries/echarts
1515171525
ns/iter (± 8471711
)1432114688
ns/iter (± 9216658
)1.06
es/full/minify/libraries/jquery
93828458
ns/iter (± 1164932
)94020670
ns/iter (± 902366
)1.00
es/full/minify/libraries/lodash
112467306
ns/iter (± 831152
)111407488
ns/iter (± 541717
)1.01
es/full/minify/libraries/moment
54522524
ns/iter (± 413130
)54946161
ns/iter (± 313020
)0.99
es/full/minify/libraries/react
20071931
ns/iter (± 147990
)20023902
ns/iter (± 110720
)1.00
es/full/minify/libraries/terser
271513982
ns/iter (± 5628389
)273702238
ns/iter (± 2027721
)0.99
es/full/minify/libraries/three
504027906
ns/iter (± 9496307
)498033086
ns/iter (± 3558852
)1.01
es/full/minify/libraries/typescript
3425518348
ns/iter (± 26773510
)3195941230
ns/iter (± 19103537
)1.07
es/full/minify/libraries/victory
777161836
ns/iter (± 19087161
)722749412
ns/iter (± 12656051
)1.08
es/full/minify/libraries/vue
138715879
ns/iter (± 1405719
)140260622
ns/iter (± 1263341
)0.99
es/full/codegen/es3
27538
ns/iter (± 51
)27595
ns/iter (± 67
)1.00
es/full/codegen/es5
27551
ns/iter (± 55
)27628
ns/iter (± 85
)1.00
es/full/codegen/es2015
27604
ns/iter (± 47
)27534
ns/iter (± 51
)1.00
es/full/codegen/es2016
27518
ns/iter (± 55
)27552
ns/iter (± 67
)1.00
es/full/codegen/es2017
27686
ns/iter (± 58
)27541
ns/iter (± 21
)1.01
es/full/codegen/es2018
27613
ns/iter (± 45
)27591
ns/iter (± 73
)1.00
es/full/codegen/es2019
27550
ns/iter (± 35
)27576
ns/iter (± 45
)1.00
es/full/codegen/es2020
27548
ns/iter (± 35
)27542
ns/iter (± 78
)1.00
es/full/all/es3
169120801
ns/iter (± 2820302
)168265749
ns/iter (± 2487126
)1.01
es/full/all/es5
160251999
ns/iter (± 3703286
)159587418
ns/iter (± 2393697
)1.00
es/full/all/es2015
122872257
ns/iter (± 1186092
)121125379
ns/iter (± 668699
)1.01
es/full/all/es2016
121206096
ns/iter (± 709671
)120519082
ns/iter (± 1059031
)1.01
es/full/all/es2017
120334712
ns/iter (± 573414
)119585106
ns/iter (± 799626
)1.01
es/full/all/es2018
118458852
ns/iter (± 507707
)118131364
ns/iter (± 968313
)1.00
es/full/all/es2019
117612640
ns/iter (± 539863
)116958316
ns/iter (± 1080592
)1.01
es/full/all/es2020
113265650
ns/iter (± 915352
)112758959
ns/iter (± 784313
)1.00
es/full/parser
522726
ns/iter (± 9362
)523597
ns/iter (± 6128
)1.00
es/full/base/fixer
21779
ns/iter (± 24
)21949
ns/iter (± 28
)0.99
es/full/base/resolver_and_hygiene
77675
ns/iter (± 105
)77767
ns/iter (± 83
)1.00
serialization of ast node
142
ns/iter (± 0
)143
ns/iter (± 0
)0.99
serialization of serde
123
ns/iter (± 0
)124
ns/iter (± 0
)0.99
css/minify/libraries/bootstrap
27515984
ns/iter (± 281989
)27385798
ns/iter (± 108932
)1.00
css/visitor/compare/clone
2103529
ns/iter (± 18368
)2118261
ns/iter (± 16029
)0.99
css/visitor/compare/visit_mut_span
2314998
ns/iter (± 9333
)2327866
ns/iter (± 9079
)0.99
css/visitor/compare/visit_mut_span_panic
2326481
ns/iter (± 7365
)2340281
ns/iter (± 5848
)0.99
css/visitor/compare/fold_span
2999354
ns/iter (± 24611
)2991499
ns/iter (± 11225
)1.00
css/visitor/compare/fold_span_panic
3148460
ns/iter (± 18713
)3180056
ns/iter (± 20067
)0.99
css/lexer/bootstrap_5_1_3
5199562
ns/iter (± 6926
)5230952
ns/iter (± 1212
)0.99
css/lexer/foundation_6_7_4
4406060
ns/iter (± 686
)4440891
ns/iter (± 2479
)0.99
css/lexer/tailwind_3_1_1
827197
ns/iter (± 350
)831402
ns/iter (± 324
)0.99
css/parser/bootstrap_5_1_3
20877455
ns/iter (± 163903
)20883898
ns/iter (± 116906
)1.00
css/parser/foundation_6_7_4
16720892
ns/iter (± 73704
)16706908
ns/iter (± 53899
)1.00
css/parser/tailwind_3_1_1
3183096
ns/iter (± 3665
)3177487
ns/iter (± 2541
)1.00
es/codegen/colors
330194
ns/iter (± 185202
)330521
ns/iter (± 184982
)1.00
es/codegen/large
1048641
ns/iter (± 533093
)1201394
ns/iter (± 607547
)0.87
es/codegen/with-parser/colors
46385
ns/iter (± 272
)46263
ns/iter (± 310
)1.00
es/codegen/with-parser/large
508828
ns/iter (± 1205
)510920
ns/iter (± 1306
)1.00
es/minify/libraries/antd
1590813418
ns/iter (± 12502735
)1477701976
ns/iter (± 16192131
)1.08
es/minify/libraries/d3
313412476
ns/iter (± 10983350
)300881794
ns/iter (± 2889391
)1.04
es/minify/libraries/echarts
1335060011
ns/iter (± 6759539
)1258695679
ns/iter (± 9627760
)1.06
es/minify/libraries/jquery
80919581
ns/iter (± 454066
)80224897
ns/iter (± 643864
)1.01
es/minify/libraries/lodash
101002003
ns/iter (± 1566095
)99179216
ns/iter (± 328181
)1.02
es/minify/libraries/moment
47183818
ns/iter (± 680036
)46684449
ns/iter (± 262995
)1.01
es/minify/libraries/react
17556569
ns/iter (± 184943
)17614274
ns/iter (± 67801
)1.00
es/minify/libraries/terser
231477492
ns/iter (± 5730046
)228557681
ns/iter (± 1764152
)1.01
es/minify/libraries/three
429297013
ns/iter (± 7390355
)427375721
ns/iter (± 3477264
)1.00
es/minify/libraries/typescript
2934663205
ns/iter (± 13873585
)2730471583
ns/iter (± 11207767
)1.07
es/minify/libraries/victory
669075496
ns/iter (± 9772485
)634012547
ns/iter (± 7256763
)1.06
es/minify/libraries/vue
123576875
ns/iter (± 1390278
)121879137
ns/iter (± 550210
)1.01
es/visitor/compare/clone
2424954
ns/iter (± 20622
)2443773
ns/iter (± 21202
)0.99
es/visitor/compare/visit_mut_span
2846956
ns/iter (± 11240
)2840846
ns/iter (± 6124
)1.00
es/visitor/compare/visit_mut_span_panic
2886154
ns/iter (± 20333
)2831952
ns/iter (± 5411
)1.02
es/visitor/compare/fold_span
3994841
ns/iter (± 23415
)3915824
ns/iter (± 21586
)1.02
es/visitor/compare/fold_span_panic
4200771
ns/iter (± 21463
)4082152
ns/iter (± 8479
)1.03
es/lexer/colors
17607
ns/iter (± 10
)17531
ns/iter (± 4
)1.00
es/lexer/angular
8266491
ns/iter (± 13550
)8243052
ns/iter (± 3852
)1.00
es/lexer/backbone
1078625
ns/iter (± 757
)1077064
ns/iter (± 690
)1.00
es/lexer/jquery
5993098
ns/iter (± 4013
)5973860
ns/iter (± 3932
)1.00
es/lexer/jquery mobile
9254052
ns/iter (± 3121
)9204201
ns/iter (± 6894
)1.01
es/lexer/mootools
4703193
ns/iter (± 1738
)4689115
ns/iter (± 3717
)1.00
es/lexer/underscore
899909
ns/iter (± 357
)899953
ns/iter (± 854
)1.00
es/lexer/three
28112982
ns/iter (± 18066
)28044651
ns/iter (± 15303
)1.00
es/lexer/yui
5075915
ns/iter (± 2554
)5071463
ns/iter (± 2113
)1.00
es/parser/colors
31432
ns/iter (± 146
)31570
ns/iter (± 157
)1.00
es/parser/angular
16427059
ns/iter (± 276973
)16439983
ns/iter (± 212046
)1.00
es/parser/backbone
2346254
ns/iter (± 15648
)2348859
ns/iter (± 11431
)1.00
es/parser/jquery
12914448
ns/iter (± 239999
)12999317
ns/iter (± 110736
)0.99
es/parser/jquery mobile
20931206
ns/iter (± 364913
)21292711
ns/iter (± 246042
)0.98
es/parser/mootools
9688361
ns/iter (± 30820
)9794680
ns/iter (± 44198
)0.99
es/parser/underscore
1984920
ns/iter (± 10825
)1974540
ns/iter (± 9545
)1.01
es/parser/three
62189386
ns/iter (± 527082
)60295486
ns/iter (± 149941
)1.03
es/parser/yui
9879728
ns/iter (± 90297
)9858804
ns/iter (± 40760
)1.00
es/preset-env/usage/builtin_type
141386
ns/iter (± 31933
)144701
ns/iter (± 33230
)0.98
es/preset-env/usage/property
21169
ns/iter (± 188
)21228
ns/iter (± 62
)1.00
es/resolver/typescript
127347237
ns/iter (± 2699136
)113717294
ns/iter (± 2670410
)1.12
es/fixer/typescript
102846122
ns/iter (± 1132204
)87314430
ns/iter (± 577508
)1.18
es/hygiene/typescript
199723116
ns/iter (± 2494038
)171044100
ns/iter (± 550732
)1.17
es/resolver_with_hygiene/typescript
344835744
ns/iter (± 4137957
)308152869
ns/iter (± 2403761
)1.12
es/visitor/base-perf/module_clone
74975
ns/iter (± 1427
)74258
ns/iter (± 1714
)1.01
es/visitor/base-perf/fold_empty
86709
ns/iter (± 869
)86681
ns/iter (± 1298
)1.00
es/visitor/base-perf/fold_noop_impl_all
86290
ns/iter (± 1540
)86486
ns/iter (± 549
)1.00
es/visitor/base-perf/fold_noop_impl_vec
86903
ns/iter (± 1133
)86695
ns/iter (± 784
)1.00
es/visitor/base-perf/boxing_boxed_clone
54
ns/iter (± 0
)54
ns/iter (± 0
)1
es/visitor/base-perf/boxing_unboxed_clone
58
ns/iter (± 0
)58
ns/iter (± 0
)1
es/visitor/base-perf/boxing_boxed
100
ns/iter (± 0
)105
ns/iter (± 0
)0.95
es/visitor/base-perf/boxing_unboxed
103
ns/iter (± 0
)106
ns/iter (± 0
)0.97
es/visitor/base-perf/visit_contains_this
3373
ns/iter (± 42
)3455
ns/iter (± 70
)0.98
es/base/parallel/resolver/typescript
5815964392
ns/iter (± 309767730
)4854986935
ns/iter (± 140822662
)1.20
es/base/parallel/hygiene/typescript
2276046834
ns/iter (± 27341772
)2015592858
ns/iter (± 39321767
)1.13
misc/visitors/time-complexity/time 5
94
ns/iter (± 0
)94
ns/iter (± 0
)1
misc/visitors/time-complexity/time 10
307
ns/iter (± 0
)307
ns/iter (± 0
)1
misc/visitors/time-complexity/time 15
638
ns/iter (± 1
)663
ns/iter (± 31
)0.96
misc/visitors/time-complexity/time 20
1180
ns/iter (± 8
)1196
ns/iter (± 6
)0.99
misc/visitors/time-complexity/time 40
6230
ns/iter (± 34
)6228
ns/iter (± 34
)1.00
misc/visitors/time-complexity/time 60
15643
ns/iter (± 33
)15524
ns/iter (± 35
)1.01
es/full-target/es2016
186723
ns/iter (± 205
)185980
ns/iter (± 564
)1.00
es/full-target/es2017
180000
ns/iter (± 505
)179137
ns/iter (± 438
)1.00
es/full-target/es2018
169523
ns/iter (± 443
)169039
ns/iter (± 595
)1.00
es2020_nullish_coalescing
65066
ns/iter (± 89
)65388
ns/iter (± 84
)1.00
es2020_optional_chaining
93075
ns/iter (± 3787
)93229
ns/iter (± 321
)1.00
es2022_class_properties
91686
ns/iter (± 138
)91670
ns/iter (± 187
)1.00
es2018_object_rest_spread
69507
ns/iter (± 136
)69381
ns/iter (± 110
)1.00
es2019_optional_catch_binding
59540
ns/iter (± 135
)59256
ns/iter (± 120
)1.00
es2017_async_to_generator
59867
ns/iter (± 86
)59543
ns/iter (± 127
)1.01
es2016_exponentiation
63140
ns/iter (± 72
)63151
ns/iter (± 85
)1.00
es2015_arrow
68516
ns/iter (± 221
)68259
ns/iter (± 238
)1.00
es2015_block_scoped_fn
64037
ns/iter (± 182
)64026
ns/iter (± 90
)1.00
es2015_block_scoping
150120
ns/iter (± 7107
)154314
ns/iter (± 10575
)0.97
es2015_classes
114848
ns/iter (± 527
)114651
ns/iter (± 368
)1.00
es2015_computed_props
59526
ns/iter (± 126
)59263
ns/iter (± 165
)1.00
es2015_destructuring
114687
ns/iter (± 272
)114289
ns/iter (± 127
)1.00
es2015_duplicate_keys
62222
ns/iter (± 144
)62113
ns/iter (± 86
)1.00
es2015_parameters
77673
ns/iter (± 223
)77404
ns/iter (± 149
)1.00
es2015_fn_name
65156
ns/iter (± 532
)65128
ns/iter (± 432
)1.00
es2015_for_of
62630
ns/iter (± 118
)62210
ns/iter (± 120
)1.01
es2015_instanceof
61294
ns/iter (± 197
)61357
ns/iter (± 122
)1.00
es2015_shorthand_property
59301
ns/iter (± 71
)59219
ns/iter (± 118
)1.00
es2015_spread
59257
ns/iter (± 125
)59358
ns/iter (± 83
)1.00
es2015_sticky_regex
60384
ns/iter (± 72
)60376
ns/iter (± 91
)1.00
es2015_typeof_symbol
60825
ns/iter (± 144
)61035
ns/iter (± 133
)1.00
es/transform/baseline/base
50121
ns/iter (± 72
)50144
ns/iter (± 83
)1.00
es/transform/baseline/common_reserved_word
60904
ns/iter (± 169
)60876
ns/iter (± 74
)1.00
es/transform/baseline/common_typescript
167591
ns/iter (± 542
)141966
ns/iter (± 7021
)1.18
es/target/es3
167714
ns/iter (± 482
)170643
ns/iter (± 179
)0.98
es/target/es2015
630616
ns/iter (± 2213
)633789
ns/iter (± 1518
)0.99
es/target/es2016
63210
ns/iter (± 136
)63266
ns/iter (± 78
)1.00
es/target/es2017
60080
ns/iter (± 109
)59784
ns/iter (± 83
)1.00
es/target/es2018
79389
ns/iter (± 132
)79374
ns/iter (± 67
)1.00
es/target/es2020
130401
ns/iter (± 218
)130920
ns/iter (± 230
)1.00
babelify-only
666138
ns/iter (± 2136
)673748
ns/iter (± 802
)0.99
parse_and_babelify_angular
42496546
ns/iter (± 909481
)42365938
ns/iter (± 434713
)1.00
parse_and_babelify_backbone
5500482
ns/iter (± 78176
)5468835
ns/iter (± 40415
)1.01
parse_and_babelify_jquery
34732689
ns/iter (± 378341
)32710161
ns/iter (± 370462
)1.06
parse_and_babelify_jquery_mobile
59693986
ns/iter (± 887186
)55945687
ns/iter (± 672183
)1.07
parse_and_babelify_mootools
35693426
ns/iter (± 566323
)33952802
ns/iter (± 403674
)1.05
parse_and_babelify_underscore
4383648
ns/iter (± 55700
)4378873
ns/iter (± 32337
)1.00
parse_and_babelify_yui
34710944
ns/iter (± 617190
)33091480
ns/iter (± 350873
)1.05
html/minify/document/css_spec
43559150
ns/iter (± 567913
)43934344
ns/iter (± 545825
)0.99
html/minify/document/github
18488188
ns/iter (± 157834
)18538161
ns/iter (± 33313
)1.00
html/minify/document/stackoverflow
16244922
ns/iter (± 110357
)16181366
ns/iter (± 34296
)1.00
html/minify/document_fragment/css_spec
41762497
ns/iter (± 382340
)42169907
ns/iter (± 178668
)0.99
html/minify/document_fragment/github
17659780
ns/iter (± 58943
)17619788
ns/iter (± 26183
)1.00
html/minify/document_fragment/stackoverflow
15836719
ns/iter (± 111582
)15737090
ns/iter (± 25448
)1.01
html/document/visitor/compare/clone
344505
ns/iter (± 1623
)346537
ns/iter (± 1962
)0.99
html/document/visitor/compare/visit_mut_span
366787
ns/iter (± 1594
)376062
ns/iter (± 2875
)0.98
html/document/visitor/compare/visit_mut_span_panic
376688
ns/iter (± 1905
)380634
ns/iter (± 1758
)0.99
html/document/visitor/compare/fold_span
406706
ns/iter (± 1618
)404241
ns/iter (± 1559
)1.01
html/document/visitor/compare/fold_span_panic
462992
ns/iter (± 2064
)464326
ns/iter (± 2795
)1.00
html/document_fragment/visitor/compare/clone
340971
ns/iter (± 2623
)337424
ns/iter (± 2032
)1.01
html/document_fragment/visitor/compare/visit_mut_span
369128
ns/iter (± 2479
)364046
ns/iter (± 1488
)1.01
html/document_fragment/visitor/compare/visit_mut_span_panic
373840
ns/iter (± 1942
)371367
ns/iter (± 1827
)1.01
html/document_fragment/visitor/compare/fold_span
403642
ns/iter (± 1463
)402011
ns/iter (± 2455
)1.00
html/document_fragment/visitor/compare/fold_span_panic
459536
ns/iter (± 899
)457742
ns/iter (± 1779
)1.00
html/lexer/css_2021_spec
15640009
ns/iter (± 27998
)15458132
ns/iter (± 10145
)1.01
html/lexer/github_com_17_05_2022
6088657
ns/iter (± 3706
)5995017
ns/iter (± 3722
)1.02
html/lexer/stackoverflow_com_17_05_2022
5689856
ns/iter (± 1505
)5619216
ns/iter (± 4786
)1.01
html/parser/parser_document/css_2021_spec
26216068
ns/iter (± 287758
)27001928
ns/iter (± 73338
)0.97
html/parser/parser_document/github_com_17_05_2022
8771556
ns/iter (± 5839
)8788646
ns/iter (± 6722
)1.00
html/parser/parser_document/stackoverflow_com_17_05_2022
7708888
ns/iter (± 10431
)7747989
ns/iter (± 6692
)0.99
html/parser/parser_document_fragment/css_2021_spec
26173474
ns/iter (± 307087
)26745028
ns/iter (± 216463
)0.98
html/parser/parser_document_fragment/github_com_17_05_2022
8761744
ns/iter (± 6936
)8789976
ns/iter (± 14095
)1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022
7739808
ns/iter (± 22718
)7752926
ns/iter (± 16046
)1.00
This comment was automatically generated by workflow using github-action-benchmark.