Skip to content

Commit

Permalink
fix(html/minifier): Fix script/style merging (#6443)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Nov 16, 2022
1 parent 520c5ca commit 1dfd8ce
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 25 deletions.
39 changes: 18 additions & 21 deletions crates/swc_html_minifier/src/lib.rs
Expand Up @@ -1827,32 +1827,29 @@ impl Minifier<'_> {

let result = child_will_be_retained(&mut child, &mut new_children, children);

if result {
if self.options.remove_empty_metadata_elements
&& self.is_empty_metadata_element(&child)
{
let need_continue = {
let next_element = if let Some(Child::Element(element)) = children.get(0) {
Some(element)
} else if let Some(Child::Element(element)) = children.get(1) {
Some(element)
} else {
None
};
if self.options.remove_empty_metadata_elements {
if let Some(last_child @ Child::Element(_)) = new_children.last() {
if self.is_empty_metadata_element(last_child) {
new_children.pop();

if let Some(element) = next_element {
self.options.merge_metadata_elements
&& !self.allow_elements_to_merge(Some(&child), element)
} else {
true
}
};
if let Child::Text(text) = &mut child {
if let Some(Child::Text(prev_text)) = new_children.last_mut() {
let mut new_data =
String::with_capacity(prev_text.data.len() + text.data.len());

if need_continue {
continue;
new_data.push_str(&prev_text.data);
new_data.push_str(&text.data);

text.data = new_data.into();

new_children.pop();
}
}
}
}
}

if result {
new_children.push(child);
}
}
Expand Down
Expand Up @@ -215,5 +215,13 @@
var a = "test";console.log(a);console.log(a);console.log(a);
</script>

<div>breaker</div>
<script></script>
<script></script>

<div>breaker</div>
<script type="module"></script>
<script type="module"></script>

</body>
</html>
Expand Up @@ -90,4 +90,12 @@
<script type=module>var a="test";console.log(a),console.log(a),console.log(a)</script><script>var o="test";console.log(o);console.log(o);console.log(o)</script><script type=module>var a="test";console.log(a),console.log(a),console.log(a)</script>

<div>breaker</div>
<script>var o="test";console.log(o);console.log(o);console.log(o)</script><script type=module>var a="test";console.log(a),console.log(a),console.log(a)</script><script>var o="test";console.log(o);console.log(o);console.log(o)</script>
<script>var o="test";console.log(o);console.log(o);console.log(o)</script><script type=module>var a="test";console.log(a),console.log(a),console.log(a)</script><script>var o="test";console.log(o);console.log(o);console.log(o)</script>

<div>breaker</div>



<div>breaker</div>
<script type=module></script>
<script type=module></script>
Expand Up @@ -90,5 +90,41 @@ <h1>Text</h1>
<style type="unknown">a { color: red }</style><style type="unknown"></style>
<div>test</div>
<style type="text/css">a { color: red; }</style><style type=" text/css ">div { color: blue; }</style>
<div>EMPTY breaker</div>
<style></style>
<style></style>
<div>breaker</div>
<style></style>
<style></style>
<style></style>

<div>breaker style tags</div>

<style></style>

<style></style>

<style></style>

<style></style>

<style></style>

<div>breaker style tags</div>

<style></style><style></style><style></style><style></style><style></style>

<div>breaker</div>
<style></style>
<script></script>
<div>breaker</div>
<script></script>
<style></style>
<div>breaker</div>
<style></style>
<span>test</span>
<div>breaker</div>
<span>test</span>
<style></style>
</body>
</html>
Expand Up @@ -3,8 +3,7 @@
<style>a{color:red}b{color:blue}</style>
<div>test</div>
<style>a{color:red}</style>
<div>test</div>
<style>a{color:red}</style>
<div>test</div><style>a{color:red}</style>
<div>test</div>
<style>a,html,body{color:red}</style>
<div>test</div>
Expand All @@ -20,4 +19,20 @@
<div>test</div>
<style type=unknown>a { color: red }</style><style type=unknown></style>
<div>test</div>
<style>a{color:red}div{color:blue}</style>
<style>a{color:red}div{color:blue}</style>
<div>EMPTY breaker</div>
<div>breaker</div>

<div>breaker style tags</div>

<div>breaker style tags</div>



<div>breaker</div>
<div>breaker</div>
<div>breaker</div>

<span>test</span>
<div>breaker</div>
<span>test</span>

1 comment on commit 1dfd8ce

@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: 1dfd8ce Previous: f14b156 Ratio
es/full/bugs-1 357899 ns/iter (± 29349) 345189 ns/iter (± 42761) 1.04
es/full/minify/libraries/antd 1995326402 ns/iter (± 79291138) 1819852473 ns/iter (± 27054128) 1.10
es/full/minify/libraries/d3 456519937 ns/iter (± 44126815) 389347779 ns/iter (± 30587483) 1.17
es/full/minify/libraries/echarts 1939151547 ns/iter (± 124765219) 1558999784 ns/iter (± 38200656) 1.24
es/full/minify/libraries/jquery 129731158 ns/iter (± 10642916) 102809901 ns/iter (± 5741564) 1.26
es/full/minify/libraries/lodash 155720302 ns/iter (± 20475401) 117651409 ns/iter (± 6854053) 1.32
es/full/minify/libraries/moment 75765692 ns/iter (± 5778983) 58271594 ns/iter (± 5713954) 1.30
es/full/minify/libraries/react 24480300 ns/iter (± 2005651) 20904927 ns/iter (± 1869975) 1.17
es/full/minify/libraries/terser 388452515 ns/iter (± 23837383) 303249132 ns/iter (± 2655768) 1.28
es/full/minify/libraries/three 627710057 ns/iter (± 29120172) 560791522 ns/iter (± 35093236) 1.12
es/full/minify/libraries/typescript 4048571408 ns/iter (± 1382412454) 3358717570 ns/iter (± 60724272) 1.21
es/full/minify/libraries/victory 976403133 ns/iter (± 35867447) 825875173 ns/iter (± 143880561) 1.18
es/full/minify/libraries/vue 195630668 ns/iter (± 21116209) 163197364 ns/iter (± 4058444) 1.20
es/full/codegen/es3 39693 ns/iter (± 6405) 33432 ns/iter (± 2137) 1.19
es/full/codegen/es5 38896 ns/iter (± 5542) 33279 ns/iter (± 1618) 1.17
es/full/codegen/es2015 37283 ns/iter (± 5955) 34263 ns/iter (± 1650) 1.09
es/full/codegen/es2016 40515 ns/iter (± 10345) 34067 ns/iter (± 2221) 1.19
es/full/codegen/es2017 36930 ns/iter (± 7646) 34051 ns/iter (± 1925) 1.08
es/full/codegen/es2018 37856 ns/iter (± 6874) 34159 ns/iter (± 2412) 1.11
es/full/codegen/es2019 45958 ns/iter (± 23401) 34169 ns/iter (± 1989) 1.35
es/full/codegen/es2020 38990 ns/iter (± 6135) 34209 ns/iter (± 1853) 1.14
es/full/all/es3 238580830 ns/iter (± 28722168) 232287311 ns/iter (± 26942820) 1.03
es/full/all/es5 224927333 ns/iter (± 26666477) 221893523 ns/iter (± 26236479) 1.01
es/full/all/es2015 177884956 ns/iter (± 23786388) 174231272 ns/iter (± 16141004) 1.02
es/full/all/es2016 179526493 ns/iter (± 24409673) 171969918 ns/iter (± 16465334) 1.04
es/full/all/es2017 176323122 ns/iter (± 22744149) 171881926 ns/iter (± 18447525) 1.03
es/full/all/es2018 174981188 ns/iter (± 25129657) 167931726 ns/iter (± 14315490) 1.04
es/full/all/es2019 174284662 ns/iter (± 20953279) 165847920 ns/iter (± 14247141) 1.05
es/full/all/es2020 163635784 ns/iter (± 13875128) 159574806 ns/iter (± 19683453) 1.03
es/full/parser 830683 ns/iter (± 123839) 735682 ns/iter (± 60487) 1.13
es/full/base/fixer 31749 ns/iter (± 6214) 27651 ns/iter (± 1330) 1.15
es/full/base/resolver_and_hygiene 101760 ns/iter (± 18473) 94419 ns/iter (± 9773) 1.08
serialization of ast node 261 ns/iter (± 44) 217 ns/iter (± 6) 1.20
serialization of serde 275 ns/iter (± 58) 222 ns/iter (± 7) 1.24

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

Please sign in to comment.