/
githubmirror
/
tailwindcss
Обзор
Документация
Войти
/
githubmirror
/
tailwindcss
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
crates/oxide/src/main.rs
65 строк
2 KB
Robin Malfait
Improve Oxide candidate extractor [0] (#16306)
05 мар 2025, 13:55
Не верифицирован
05 мар 2025, 13:55
b3c2556
Код
Авторство
О чём код?
use std::hint::black_box; use tailwindcss_oxide::cursor::Cursor; use tailwindcss_oxide::extractor::machine::{Machine, MachineState}; use tailwindcss_oxide::extractor::{Extracted, Extractor}; use tailwindcss_oxide::throughput::Throughput; fn run_full_extractor(input: &[u8]) -> Vec<&[u8]> { Extractor::new(input) .extract() .into_iter() .map(|x| match x { Extracted::Candidate(bytes) => bytes, Extracted::CssVariable(bytes) => bytes, }) .collect::<Vec<_>>() } fn _run_machine<T: Machine>(input: &[u8]) -> Vec<&[u8]> { let len = input.len(); let mut machine = T::default(); let mut cursor = Cursor::new(input); let mut result = Vec::with_capacity(25); while cursor.pos < len { if let MachineState::Done(span) = machine.next(&mut cursor) { result.push(span.slice(input)); } cursor.advance(); } result } fn run(input: &[u8]) -> Vec<&[u8]> { // _run_machine::<tailwindcss_oxide::extractor::arbitrary_property_machine::ArbitraryPropertyMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::arbitrary_value_machine::ArbitraryValueMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::arbitrary_variable_machine::ArbitraryVariableMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::candidate_machine::CandidateMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::css_variable_machine::CssVariableMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::modifier_machine::ModifierMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::named_utility_machine::NamedUtilityMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::named_variant_machine::NamedVariantMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::string_machine::StringMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::utility_machine::UtilityMachine>(input) // _run_machine::<tailwindcss_oxide::extractor::variant_machine::VariantMachine>(input) run_full_extractor(input) } fn main() { let iterations = 10_000; let input = include_bytes!("./fixtures/example.html"); let throughput = Throughput::compute(iterations, input.len(), || { _ = black_box( input .split(|x| *x == b'\n') .flat_map(run) .collect::<Vec<_>>(), ); }); eprintln!("Extractor: {:}", throughput); }