mirror of
https://github.com/lexmount/moli.git
synced 2026-09-28 16:01:39 +00:00
57 lines
1.8 KiB
Rust
57 lines
1.8 KiB
Rust
use std::time::Instant;
|
|
|
|
use moli_dom::native::{DomHost, NativeDom};
|
|
use url::Url;
|
|
|
|
const ELEMENTS: usize = 2_000;
|
|
const DENSE_ITERATIONS: usize = 100;
|
|
const SPARSE_ITERATIONS: usize = 20_000;
|
|
const NAMESPACE: &str = "urn:moli:element-query-bench";
|
|
|
|
fn main() {
|
|
let mut host = DomHost::from_dom(NativeDom::new_html(
|
|
Url::parse("https://element-query-bench.test/").expect("valid benchmark URL"),
|
|
));
|
|
let document = host.document_handle();
|
|
for _ in 0..ELEMENTS {
|
|
let element = host
|
|
.create_element_ns(Some(NAMESPACE), "bench:item")
|
|
.expect("valid benchmark element");
|
|
assert!(host.append_child(document, element));
|
|
}
|
|
let rare = host
|
|
.create_element_ns(Some(NAMESPACE), "bench:rare")
|
|
.expect("valid rare benchmark element");
|
|
assert!(host.append_child(document, rare));
|
|
|
|
assert_eq!(
|
|
host.elements_by_tag_name_ns(document, Some(NAMESPACE), "item", true)
|
|
.len(),
|
|
ELEMENTS
|
|
);
|
|
|
|
let dense_start = Instant::now();
|
|
let mut checksum = 0;
|
|
for _ in 0..DENSE_ITERATIONS {
|
|
checksum += host
|
|
.elements_by_tag_name_ns(document, Some(NAMESPACE), "item", true)
|
|
.len();
|
|
}
|
|
let dense_elapsed = dense_start.elapsed();
|
|
|
|
let sparse_start = Instant::now();
|
|
for _ in 0..SPARSE_ITERATIONS {
|
|
checksum += host
|
|
.elements_by_tag_name_ns(document, Some(NAMESPACE), "rare", true)
|
|
.len();
|
|
}
|
|
let sparse_elapsed = sparse_start.elapsed();
|
|
|
|
assert_eq!(checksum, ELEMENTS * DENSE_ITERATIONS + SPARSE_ITERATIONS);
|
|
println!(
|
|
"elements={ELEMENTS} dense_iterations={DENSE_ITERATIONS} sparse_iterations={SPARSE_ITERATIONS} dense_ms={} sparse_ms={}",
|
|
dense_elapsed.as_millis(),
|
|
sparse_elapsed.as_millis(),
|
|
);
|
|
}
|