Skip to content

Commit 2c7cbff

Browse files
committed
perf: Slightly improve performance of HTML serialization
Signed-off-by: Dmitry Dygalo <[email protected]>
1 parent d04cf88 commit 2c7cbff

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## [Unreleased]
44

5+
### Performance
6+
7+
- Slightly improve performance of HTML serialization.
8+
59
## [0.14.4] - 2024-12-27
610

711
### Changed

css-inline/src/html/serializer.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,14 @@ impl<'a, W: Write> HtmlSerializer<'a, W> {
171171
.expect("Invalid substring")
172172
.as_bytes(),
173173
)?;
174-
match part {
175-
"&" => self.writer.write_all(b"&amp;")?,
176-
"\u{00A0}" => self.writer.write_all(b"&nbsp;")?,
177-
"<" => self.writer.write_all(b"&lt;")?,
178-
">" => self.writer.write_all(b"&gt;")?,
179-
_ => unreachable!("Only the variants above are searched"),
174+
// This is slightly faster than matching on `char`
175+
// Notably, this approach does not work in `write_attributes` below
176+
match (part.as_bytes()[0] & 0b0000_1110) >> 1 {
177+
1 => self.writer.write_all(b"&nbsp;")?,
178+
3 => self.writer.write_all(b"&amp;")?,
179+
6 => self.writer.write_all(b"&lt;")?,
180+
7 => self.writer.write_all(b"&gt;")?,
181+
_ => unreachable!(),
180182
}
181183
last_end = start.checked_add(part.len()).expect("Size overflow");
182184
}

0 commit comments

Comments
 (0)