Skip to content

Commit

Permalink
perf(es/minifier): Remove needless operations for char freq analysis (#…
Browse files Browse the repository at this point in the history
…8222)

**Description:**

This skips a string search operation, which is quite costly, without affecting the output.
  • Loading branch information
kdy1 committed Nov 6, 2023
1 parent 48e5c9a commit b745ed7
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 4 deletions.
4 changes: 4 additions & 0 deletions crates/swc_bundler/src/hash.rs
Expand Up @@ -126,4 +126,8 @@ impl WriteJs for &mut Hasher<'_> {
fn commit_pending_semi(&mut self) -> io::Result<()> {
Ok(())
}

fn can_ignore_invalid_unicodes(&mut self) -> bool {
true
}
}
15 changes: 11 additions & 4 deletions crates/swc_ecma_codegen/src/lib.rs
Expand Up @@ -2170,10 +2170,17 @@ where
// TODO: span

if self.cfg.ascii_only {
self.wr.write_symbol(
DUMMY_SP,
&get_ascii_only_ident(&handle_invalid_unicodes(&ident.sym), self.cfg.target),
)?;
if self.wr.can_ignore_invalid_unicodes() {
self.wr
.write_symbol(DUMMY_SP, &get_ascii_only_ident(&ident.sym, self.cfg.target))?;
} else {
self.wr.write_symbol(
DUMMY_SP,
&get_ascii_only_ident(&handle_invalid_unicodes(&ident.sym), self.cfg.target),
)?;
}
} else if self.wr.can_ignore_invalid_unicodes() {
self.wr.write_symbol(DUMMY_SP, &ident.sym)?;
} else {
self.wr
.write_symbol(DUMMY_SP, &handle_invalid_unicodes(&ident.sym))?;
Expand Down
19 changes: 19 additions & 0 deletions crates/swc_ecma_codegen/src/text_writer.rs
Expand Up @@ -42,6 +42,14 @@ pub trait WriteJs {
fn add_srcmap(&mut self, pos: BytePos) -> Result;

fn commit_pending_semi(&mut self) -> Result;

/// If true, the code generator will skip **modification** of invalid
/// unicode characters.
///
/// Defaults to `false``
fn can_ignore_invalid_unicodes(&mut self) -> bool {
false
}
}

impl<W> WriteJs for Box<W>
Expand Down Expand Up @@ -136,6 +144,11 @@ where
fn commit_pending_semi(&mut self) -> Result {
(**self).commit_pending_semi()
}

#[inline(always)]
fn can_ignore_invalid_unicodes(&mut self) -> bool {
(**self).can_ignore_invalid_unicodes()
}
}

impl<W> WriteJs for &'_ mut W
Expand Down Expand Up @@ -227,7 +240,13 @@ where
(**self).add_srcmap(pos)
}

#[inline(always)]
fn commit_pending_semi(&mut self) -> Result {
(**self).commit_pending_semi()
}

#[inline(always)]
fn can_ignore_invalid_unicodes(&mut self) -> bool {
(**self).can_ignore_invalid_unicodes()
}
}
5 changes: 5 additions & 0 deletions crates/swc_ecma_codegen/src/text_writer/basic_impl.rs
Expand Up @@ -297,6 +297,11 @@ impl<'a, W: Write> WriteJs for JsWriter<'a, W> {
fn commit_pending_semi(&mut self) -> Result {
Ok(())
}

#[inline(always)]
fn can_ignore_invalid_unicodes(&mut self) -> bool {
false
}
}

#[derive(Debug)]
Expand Down
5 changes: 5 additions & 0 deletions crates/swc_ecma_codegen/src/text_writer/semicolon.rs
Expand Up @@ -97,4 +97,9 @@ impl<W: WriteJs> WriteJs for OmitTrailingSemi<W> {
}
Ok(())
}

#[inline(always)]
fn can_ignore_invalid_unicodes(&mut self) -> bool {
self.inner.can_ignore_invalid_unicodes()
}
}
5 changes: 5 additions & 0 deletions crates/swc_ecma_minifier/src/util/base54.rs
Expand Up @@ -178,6 +178,11 @@ impl WriteJs for CharFreq {
fn commit_pending_semi(&mut self) -> io::Result<()> {
Ok(())
}

#[inline(always)]
fn can_ignore_invalid_unicodes(&mut self) -> bool {
true
}
}

impl CharFreq {
Expand Down

0 comments on commit b745ed7

Please sign in to comment.