Skip to content

Commit

Permalink
feat(css/minifier): Improve compression of media at-rules (#6665)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Dec 16, 2022
1 parent b9b3589 commit 2fd3ced
Show file tree
Hide file tree
Showing 6 changed files with 264 additions and 134 deletions.
341 changes: 209 additions & 132 deletions crates/swc_css_minifier/src/compressor/media.rs

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions crates/swc_css_minifier/src/compressor/mod.rs
Expand Up @@ -175,6 +175,12 @@ impl VisitMut for Compressor {
self.compress_media_in_parens(n);
}

fn visit_mut_media_feature(&mut self, n: &mut MediaFeature) {
n.visit_mut_children_with(self);

self.compress_media_feature(n);
}

fn visit_mut_media_feature_value(&mut self, n: &mut MediaFeatureValue) {
n.visit_mut_children_with(self);

Expand Down
Expand Up @@ -73,3 +73,38 @@
@media (max-width: calc(5px + 1rem)) { body { color: red; } }

@media (-webkit-calc(10px + 100px) < width <= calc(1000px + 10px)) { body { color: red; } }

@media (color) { body { color: red; } }
@media (min-color: 1) { body { color: red; } }
@media (color >= 1) { body { color: red; } }
@media (1 <= color) { body { color: red; } }

@media (color-index) { body { color: red; } }
@media (min-color-index: 1) { body { color: red; } }
@media (color-index >= 1) { body { color: red; } }
@media (1 <= color-index) { body { color: red; } }

@media (monochrome) { body { color: red; } }
@media (min-monochrome: 1) { body { color: red; } }
@media (monochrome >= 1) { body { color: red; } }
@media (1 <= monochrome) { body { color: red; } }

@media (width = 1024px) { body {background: green;} }
@media (1024px = width) { body {background: green;} }
@media (width: 1024px) { body {background: green;} }

@media (min-width: 900px) and (min-width: 900px) and (min-width: 900px),
(min-width: 900px) or (min-width: 900px) or (min-width: 900px) or (min-width: 900px)
{
a {
color: red;
}
}

@media screen and (min-width: 900px) and (min-width: 900px) and (min-width: 900px),
(min-width: 900px) or (min-width: 900px) or (min-width: 900px) or (min-width: 900px)
{
a {
color: red;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Expand Up @@ -215,3 +215,15 @@
animation: fade 3s cubic-bezier(0.25, 0.1, 0.25, 1)
}
}

@supports (display: table-cell) and (display: list-item) and (display: list-item) and (display: contents) and (display: contents) {
.color {
color: red;
}
}

@supports (display: table-cell) and ((display: list-item) and (display: contents)) and ((display: list-item) and (display: contents)) {
.color {
color: blue;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 comment on commit 2fd3ced

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 2fd3ced Previous: 1fc97a7 Ratio
es/full/bugs-1 296984 ns/iter (± 13943) 311176 ns/iter (± 9808) 0.95
es/full/minify/libraries/antd 1597276663 ns/iter (± 14677416) 1775581873 ns/iter (± 27499485) 0.90
es/full/minify/libraries/d3 310143484 ns/iter (± 8510001) 312728891 ns/iter (± 5383083) 0.99
es/full/minify/libraries/echarts 1270512575 ns/iter (± 18344651) 1363716880 ns/iter (± 9199524) 0.93
es/full/minify/libraries/jquery 91181654 ns/iter (± 650629) 91990533 ns/iter (± 1703350) 0.99
es/full/minify/libraries/lodash 106164954 ns/iter (± 814773) 108678784 ns/iter (± 562263) 0.98
es/full/minify/libraries/moment 52984349 ns/iter (± 474015) 53760617 ns/iter (± 220051) 0.99
es/full/minify/libraries/react 19084982 ns/iter (± 141364) 19298838 ns/iter (± 140954) 0.99
es/full/minify/libraries/terser 254797158 ns/iter (± 4054434) 262343731 ns/iter (± 2772658) 0.97
es/full/minify/libraries/three 461614895 ns/iter (± 9741950) 479505586 ns/iter (± 10934774) 0.96
es/full/minify/libraries/typescript 3038547638 ns/iter (± 23909186) 3333243105 ns/iter (± 26354226) 0.91
es/full/minify/libraries/victory 662347610 ns/iter (± 20472430) 749094432 ns/iter (± 14544727) 0.88
es/full/minify/libraries/vue 130372756 ns/iter (± 755922) 134491174 ns/iter (± 1320755) 0.97
es/full/codegen/es3 27284 ns/iter (± 62) 27398 ns/iter (± 73) 1.00
es/full/codegen/es5 27207 ns/iter (± 61) 27474 ns/iter (± 50) 0.99
es/full/codegen/es2015 27145 ns/iter (± 112) 27380 ns/iter (± 47) 0.99
es/full/codegen/es2016 27184 ns/iter (± 61) 27421 ns/iter (± 61) 0.99
es/full/codegen/es2017 27231 ns/iter (± 39) 27398 ns/iter (± 67) 0.99
es/full/codegen/es2018 27189 ns/iter (± 58) 27444 ns/iter (± 71) 0.99
es/full/codegen/es2019 27207 ns/iter (± 68) 27404 ns/iter (± 41) 0.99
es/full/codegen/es2020 27204 ns/iter (± 36) 27385 ns/iter (± 48) 0.99
es/full/all/es3 166053178 ns/iter (± 2338743) 171037184 ns/iter (± 1769984) 0.97
es/full/all/es5 157086736 ns/iter (± 4019461) 162278752 ns/iter (± 1441436) 0.97
es/full/all/es2015 118222527 ns/iter (± 731431) 121432395 ns/iter (± 1227312) 0.97
es/full/all/es2016 116891082 ns/iter (± 1004068) 120986801 ns/iter (± 1537505) 0.97
es/full/all/es2017 115870582 ns/iter (± 1113032) 120357674 ns/iter (± 1164235) 0.96
es/full/all/es2018 115259419 ns/iter (± 828433) 118428708 ns/iter (± 1265959) 0.97
es/full/all/es2019 114327265 ns/iter (± 449088) 118075555 ns/iter (± 1620599) 0.97
es/full/all/es2020 109826051 ns/iter (± 802936) 112930538 ns/iter (± 1116164) 0.97
es/full/parser 488643 ns/iter (± 5733) 515877 ns/iter (± 7226) 0.95
es/full/base/fixer 21571 ns/iter (± 152) 21962 ns/iter (± 42) 0.98
es/full/base/resolver_and_hygiene 76907 ns/iter (± 550) 78497 ns/iter (± 105) 0.98
serialization of ast node 136 ns/iter (± 1) 138 ns/iter (± 0) 0.99
serialization of serde 124 ns/iter (± 0) 124 ns/iter (± 0) 1
css/minify/libraries/bootstrap 26606880 ns/iter (± 248418) 27002188 ns/iter (± 87744) 0.99
css/visitor/compare/clone 2074360 ns/iter (± 20919) 2085060 ns/iter (± 14968) 0.99
css/visitor/compare/visit_mut_span 2273423 ns/iter (± 10607) 2297396 ns/iter (± 7861) 0.99
css/visitor/compare/visit_mut_span_panic 2334983 ns/iter (± 10233) 2382957 ns/iter (± 6375) 0.98
css/visitor/compare/fold_span 3037386 ns/iter (± 31273) 3058284 ns/iter (± 24136) 0.99
css/visitor/compare/fold_span_panic 3145460 ns/iter (± 23565) 3149914 ns/iter (± 26293) 1.00
css/lexer/bootstrap_5_1_3 5210962 ns/iter (± 4770) 5266184 ns/iter (± 6834) 0.99
css/lexer/foundation_6_7_4 4402365 ns/iter (± 41106) 4429143 ns/iter (± 3168) 0.99
css/lexer/tailwind_3_1_1 829241 ns/iter (± 652) 832377 ns/iter (± 1361) 1.00
css/parser/bootstrap_5_1_3 21097754 ns/iter (± 166799) 21087312 ns/iter (± 47860) 1.00
css/parser/foundation_6_7_4 16765602 ns/iter (± 47479) 16788559 ns/iter (± 41054) 1.00
css/parser/tailwind_3_1_1 3214345 ns/iter (± 4754) 3231035 ns/iter (± 10168) 0.99
es/codegen/colors 333227 ns/iter (± 187414) 324875 ns/iter (± 181931) 1.03
es/codegen/large 1071943 ns/iter (± 546179) 1245815 ns/iter (± 633547) 0.86
es/codegen/with-parser/colors 46960 ns/iter (± 332) 46632 ns/iter (± 327) 1.01
es/codegen/with-parser/large 507813 ns/iter (± 1852) 511406 ns/iter (± 1679) 0.99
es/minify/libraries/antd 1434793710 ns/iter (± 19961044) 1565650346 ns/iter (± 26597360) 0.92
es/minify/libraries/d3 263156862 ns/iter (± 3089330) 268500189 ns/iter (± 4810400) 0.98
es/minify/libraries/echarts 1090468054 ns/iter (± 20298623) 1172715515 ns/iter (± 9850203) 0.93
es/minify/libraries/jquery 78666931 ns/iter (± 371158) 79439898 ns/iter (± 727808) 0.99
es/minify/libraries/lodash 95667262 ns/iter (± 747271) 96970348 ns/iter (± 944225) 0.99
es/minify/libraries/moment 46006437 ns/iter (± 359363) 46974955 ns/iter (± 286344) 0.98
es/minify/libraries/react 16978168 ns/iter (± 151535) 17259795 ns/iter (± 151806) 0.98
es/minify/libraries/terser 211370827 ns/iter (± 3572222) 229933583 ns/iter (± 6011838) 0.92
es/minify/libraries/three 370452108 ns/iter (± 8203093) 399081446 ns/iter (± 9206746) 0.93
es/minify/libraries/typescript 2636086406 ns/iter (± 15373089) 2863139541 ns/iter (± 17888676) 0.92
es/minify/libraries/victory 580307331 ns/iter (± 19109215) 635373240 ns/iter (± 15140259) 0.91
es/minify/libraries/vue 117287207 ns/iter (± 1146951) 118275356 ns/iter (± 1890092) 0.99
es/visitor/compare/clone 2419306 ns/iter (± 14406) 2415176 ns/iter (± 4242) 1.00
es/visitor/compare/visit_mut_span 2799661 ns/iter (± 8311) 2842708 ns/iter (± 12448) 0.98
es/visitor/compare/visit_mut_span_panic 2886105 ns/iter (± 13372) 2888427 ns/iter (± 2894) 1.00
es/visitor/compare/fold_span 4071572 ns/iter (± 58587) 3990125 ns/iter (± 8103) 1.02
es/visitor/compare/fold_span_panic 4153424 ns/iter (± 20233) 4153102 ns/iter (± 12811) 1.00
es/lexer/colors 17166 ns/iter (± 78) 17225 ns/iter (± 31) 1.00
es/lexer/angular 8230614 ns/iter (± 8444) 8235156 ns/iter (± 17667) 1.00
es/lexer/backbone 1075110 ns/iter (± 2422) 1072041 ns/iter (± 3376) 1.00
es/lexer/jquery 5968181 ns/iter (± 1542) 5968023 ns/iter (± 8869) 1.00
es/lexer/jquery mobile 9145064 ns/iter (± 22115) 9153202 ns/iter (± 12531) 1.00
es/lexer/mootools 4676825 ns/iter (± 7294) 4666119 ns/iter (± 7013) 1.00
es/lexer/underscore 892172 ns/iter (± 4777) 895138 ns/iter (± 882) 1.00
es/lexer/three 27757976 ns/iter (± 193670) 27891988 ns/iter (± 30670) 1.00
es/lexer/yui 5022916 ns/iter (± 38651) 5046241 ns/iter (± 3710) 1.00
es/parser/colors 31420 ns/iter (± 215) 31230 ns/iter (± 203) 1.01
es/parser/angular 16105812 ns/iter (± 141539) 16190056 ns/iter (± 112070) 0.99
es/parser/backbone 2321890 ns/iter (± 13787) 2322015 ns/iter (± 13707) 1.00
es/parser/jquery 12464931 ns/iter (± 70502) 12680558 ns/iter (± 79496) 0.98
es/parser/jquery mobile 19861118 ns/iter (± 431884) 20740007 ns/iter (± 491092) 0.96
es/parser/mootools 9651026 ns/iter (± 31406) 9565262 ns/iter (± 42918) 1.01
es/parser/underscore 1962742 ns/iter (± 15179) 1969532 ns/iter (± 11077) 1.00
es/parser/three 59872135 ns/iter (± 502599) 61050618 ns/iter (± 555638) 0.98
es/parser/yui 9634501 ns/iter (± 62838) 9697221 ns/iter (± 91728) 0.99
es/preset-env/usage/builtin_type 139267 ns/iter (± 30591) 137577 ns/iter (± 30415) 1.01
es/preset-env/usage/property 21037 ns/iter (± 97) 21436 ns/iter (± 51) 0.98
es/resolver/typescript 116055082 ns/iter (± 4889285) 125439841 ns/iter (± 3176794) 0.93
es/fixer/typescript 87961997 ns/iter (± 1191029) 98838469 ns/iter (± 665946) 0.89
es/hygiene/typescript 171430903 ns/iter (± 2170157) 199157525 ns/iter (± 2671069) 0.86
es/resolver_with_hygiene/typescript 315084897 ns/iter (± 1686493) 343830721 ns/iter (± 1792413) 0.92
es/visitor/base-perf/module_clone 77383 ns/iter (± 1302) 76290 ns/iter (± 1619) 1.01
es/visitor/base-perf/fold_empty 87189 ns/iter (± 1360) 85937 ns/iter (± 1822) 1.01
es/visitor/base-perf/fold_noop_impl_all 86887 ns/iter (± 1263) 85714 ns/iter (± 2341) 1.01
es/visitor/base-perf/fold_noop_impl_vec 87386 ns/iter (± 1763) 85986 ns/iter (± 1480) 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 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 102 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 104 ns/iter (± 0) 102 ns/iter (± 0) 1.02
es/visitor/base-perf/visit_contains_this 3505 ns/iter (± 98) 3641 ns/iter (± 113) 0.96
es/base/parallel/resolver/typescript 5509255255 ns/iter (± 544904073) 5635989023 ns/iter (± 492243651) 0.98
es/base/parallel/hygiene/typescript 1999145201 ns/iter (± 33643443) 2298814593 ns/iter (± 36261400) 0.87
misc/visitors/time-complexity/time 5 93 ns/iter (± 0) 93 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 324 ns/iter (± 2) 324 ns/iter (± 0) 1
misc/visitors/time-complexity/time 15 638 ns/iter (± 7) 646 ns/iter (± 10) 0.99
misc/visitors/time-complexity/time 20 1188 ns/iter (± 3) 1192 ns/iter (± 1) 1.00
misc/visitors/time-complexity/time 40 6144 ns/iter (± 19) 6183 ns/iter (± 12) 0.99
misc/visitors/time-complexity/time 60 15417 ns/iter (± 46) 15528 ns/iter (± 17) 0.99
es/full-target/es2016 188558 ns/iter (± 484) 188881 ns/iter (± 383) 1.00
es/full-target/es2017 182895 ns/iter (± 1024) 183356 ns/iter (± 492) 1.00
es/full-target/es2018 172991 ns/iter (± 753) 171819 ns/iter (± 436) 1.01
es2020_nullish_coalescing 66933 ns/iter (± 164) 66687 ns/iter (± 144) 1.00
es2020_optional_chaining 103969 ns/iter (± 8951) 95459 ns/iter (± 4563) 1.09
es2022_class_properties 94126 ns/iter (± 164) 93574 ns/iter (± 262) 1.01
es2018_object_rest_spread 71939 ns/iter (± 200) 71464 ns/iter (± 175) 1.01
es2019_optional_catch_binding 61251 ns/iter (± 148) 61066 ns/iter (± 161) 1.00
es2017_async_to_generator 61882 ns/iter (± 95) 61567 ns/iter (± 90) 1.01
es2016_exponentiation 65273 ns/iter (± 92) 64951 ns/iter (± 116) 1.00
es2015_arrow 70887 ns/iter (± 210) 70366 ns/iter (± 210) 1.01
es2015_block_scoped_fn 66219 ns/iter (± 158) 65986 ns/iter (± 122) 1.00
es2015_block_scoping 148852 ns/iter (± 8202) 138896 ns/iter (± 6716) 1.07
es2015_classes 117489 ns/iter (± 395) 117385 ns/iter (± 502) 1.00
es2015_computed_props 61032 ns/iter (± 154) 61081 ns/iter (± 148) 1.00
es2015_destructuring 116298 ns/iter (± 307) 116261 ns/iter (± 270) 1.00
es2015_duplicate_keys 64182 ns/iter (± 155) 63700 ns/iter (± 167) 1.01
es2015_parameters 80108 ns/iter (± 210) 79293 ns/iter (± 118) 1.01
es2015_fn_name 66504 ns/iter (± 434) 67068 ns/iter (± 597) 0.99
es2015_for_of 64057 ns/iter (± 156) 64388 ns/iter (± 197) 0.99
es2015_instanceof 63507 ns/iter (± 121) 63472 ns/iter (± 176) 1.00
es2015_shorthand_property 61267 ns/iter (± 161) 60688 ns/iter (± 66) 1.01
es2015_spread 61223 ns/iter (± 162) 60794 ns/iter (± 111) 1.01
es2015_sticky_regex 62899 ns/iter (± 108) 62257 ns/iter (± 146) 1.01
es2015_typeof_symbol 62851 ns/iter (± 117) 62137 ns/iter (± 143) 1.01
es/transform/baseline/base 51893 ns/iter (± 171) 51738 ns/iter (± 103) 1.00
es/transform/baseline/common_reserved_word 62132 ns/iter (± 304) 62332 ns/iter (± 112) 1.00
es/transform/baseline/common_typescript 169276 ns/iter (± 661) 155484 ns/iter (± 10505) 1.09
es/target/es3 168095 ns/iter (± 879) 168700 ns/iter (± 321) 1.00
es/target/es2015 631916 ns/iter (± 1624) 630900 ns/iter (± 902) 1.00
es/target/es2016 65140 ns/iter (± 351) 64994 ns/iter (± 72) 1.00
es/target/es2017 62021 ns/iter (± 104) 61618 ns/iter (± 114) 1.01
es/target/es2018 81971 ns/iter (± 119) 81371 ns/iter (± 133) 1.01
es/target/es2020 133209 ns/iter (± 371) 132505 ns/iter (± 276) 1.01
babelify-only 669171 ns/iter (± 866) 675352 ns/iter (± 1283) 0.99
parse_and_babelify_angular 44546134 ns/iter (± 883068) 42497160 ns/iter (± 839117) 1.05
parse_and_babelify_backbone 5521302 ns/iter (± 69504) 5510516 ns/iter (± 63817) 1.00
parse_and_babelify_jquery 33118852 ns/iter (± 445375) 33558777 ns/iter (± 390548) 0.99
parse_and_babelify_jquery_mobile 56612605 ns/iter (± 526574) 57724765 ns/iter (± 657042) 0.98
parse_and_babelify_mootools 34305755 ns/iter (± 214661) 35086916 ns/iter (± 460985) 0.98
parse_and_babelify_underscore 4386724 ns/iter (± 19282) 4392479 ns/iter (± 41487) 1.00
parse_and_babelify_yui 32743223 ns/iter (± 419283) 35193477 ns/iter (± 616657) 0.93
html/minify/document/css_spec 42269422 ns/iter (± 396750) 42873073 ns/iter (± 314228) 0.99
html/minify/document/github 17374251 ns/iter (± 35492) 17709914 ns/iter (± 40382) 0.98
html/minify/document/stackoverflow 15725054 ns/iter (± 68901) 15626896 ns/iter (± 44190) 1.01
html/minify/document_fragment/css_spec 40027099 ns/iter (± 170299) 41142457 ns/iter (± 180003) 0.97
html/minify/document_fragment/github 16663957 ns/iter (± 35701) 16812405 ns/iter (± 27576) 0.99
html/minify/document_fragment/stackoverflow 15059593 ns/iter (± 52441) 15154728 ns/iter (± 41787) 0.99
html/document/visitor/compare/clone 338901 ns/iter (± 2367) 337699 ns/iter (± 1998) 1.00
html/document/visitor/compare/visit_mut_span 363823 ns/iter (± 1792) 367891 ns/iter (± 1838) 0.99
html/document/visitor/compare/visit_mut_span_panic 377166 ns/iter (± 1704) 378343 ns/iter (± 2491) 1.00
html/document/visitor/compare/fold_span 400469 ns/iter (± 1853) 409718 ns/iter (± 2226) 0.98
html/document/visitor/compare/fold_span_panic 457155 ns/iter (± 2150) 465945 ns/iter (± 1786) 0.98
html/document_fragment/visitor/compare/clone 336949 ns/iter (± 1963) 336222 ns/iter (± 1710) 1.00
html/document_fragment/visitor/compare/visit_mut_span 362490 ns/iter (± 2049) 362833 ns/iter (± 2500) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 370824 ns/iter (± 3377) 370407 ns/iter (± 1561) 1.00
html/document_fragment/visitor/compare/fold_span 398818 ns/iter (± 1037) 406743 ns/iter (± 1836) 0.98
html/document_fragment/visitor/compare/fold_span_panic 458746 ns/iter (± 1288) 460027 ns/iter (± 3150) 1.00
html/lexer/css_2021_spec 15668790 ns/iter (± 15950) 15554212 ns/iter (± 36572) 1.01
html/lexer/github_com_17_05_2022 6073981 ns/iter (± 5930) 6008585 ns/iter (± 9623) 1.01
html/lexer/stackoverflow_com_17_05_2022 5663301 ns/iter (± 10297) 5609862 ns/iter (± 4304) 1.01
html/parser/parser_document/css_2021_spec 26252229 ns/iter (± 731178) 26042056 ns/iter (± 146831) 1.01
html/parser/parser_document/github_com_17_05_2022 8842130 ns/iter (± 10962) 8800547 ns/iter (± 9337) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7778878 ns/iter (± 8281) 7757963 ns/iter (± 13928) 1.00
html/parser/parser_document_fragment/css_2021_spec 26967959 ns/iter (± 314988) 26173238 ns/iter (± 153488) 1.03
html/parser/parser_document_fragment/github_com_17_05_2022 8849498 ns/iter (± 9352) 8791442 ns/iter (± 10788) 1.01
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7754940 ns/iter (± 10441) 7724400 ns/iter (± 17119) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.