Skip to content

Commit 7895599

Browse files
authoredDec 6, 2022
perf(css/minifier): Improve performance (#6583)
1 parent 824979f commit 7895599

File tree

1 file changed

+21
-10
lines changed
  • crates/swc_css_minifier/src/compressor

1 file changed

+21
-10
lines changed
 

‎crates/swc_css_minifier/src/compressor/rules.rs

+21-10
Original file line numberDiff line numberDiff line change
@@ -482,12 +482,23 @@ impl Compressor {
482482

483483
pub(super) fn compress_simple_block(&mut self, simple_block: &mut SimpleBlock) {
484484
let mut names: AHashMap<Name, isize> = Default::default();
485-
let mut prev_rule: Option<ComponentValue> = None;
485+
let mut prev_rule_idx = None;
486486
let mut remove_rules_list = vec![];
487487
let mut prev_index = 0;
488-
let mut index = 0;
489488

490-
simple_block.value.retain_mut(|rule| {
489+
for index in 0..simple_block.value.len() {
490+
// We need two &mut
491+
let (a, b) = simple_block.value.split_at_mut(index);
492+
493+
let mut prev_rule = match prev_rule_idx {
494+
Some(idx) => a.get_mut(idx),
495+
None => None,
496+
};
497+
let rule = match b.first_mut() {
498+
Some(v) => v,
499+
None => continue,
500+
};
501+
491502
let result = match rule {
492503
ComponentValue::Rule(box Rule::AtRule(box AtRule {
493504
block: Some(block), ..
@@ -600,24 +611,24 @@ impl Compressor {
600611
if self.is_mergeable_at_rule(at_rule) =>
601612
{
602613
prev_index = index;
603-
prev_rule = Some(rule.clone());
614+
prev_rule_idx = Some(index);
604615
}
605616

606617
ComponentValue::Rule(box Rule::QualifiedRule(_))
607618
| ComponentValue::StyleBlock(box StyleBlock::QualifiedRule(_)) => {
608619
prev_index = index;
609-
prev_rule = Some(rule.clone());
620+
prev_rule_idx = Some(index);
610621
}
611622
_ => {
612-
prev_rule = None;
623+
prev_rule_idx = None;
613624
}
614625
}
615-
616-
index += 1;
617626
}
618627

619-
result
620-
});
628+
if !result {
629+
remove_rules_list.push(index);
630+
}
631+
}
621632

622633
if !names.is_empty() {
623634
self.discard_overridden(

0 commit comments

Comments
 (0)
Please sign in to comment.