Rust library to generate static websites
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: try out something for perf

+58 -31
+58 -31
crates/maudit/src/build.rs
··· 43 43 pub mod options; 44 44 pub mod state; 45 45 46 - /// Helper to check if a route should be rebuilt during incremental builds 46 + /// Helper to check if a route should be rebuilt during incremental builds. 47 + /// Returns `true` for full builds (when `routes_to_rebuild` is `None`). 47 48 fn should_rebuild_route( 48 - route_id: &RouteIdentifier, 49 + route_id: Option<&RouteIdentifier>, 49 50 routes_to_rebuild: &Option<FxHashSet<RouteIdentifier>>, 50 51 ) -> bool { 51 - let result = match routes_to_rebuild { 52 - Some(set) => set.contains(route_id), 53 - None => true, // Full build 54 - }; 55 - 56 - if !result { 57 - trace!(target: "build", "Skipping route {:?} (not in rebuild set)", route_id); 52 + match routes_to_rebuild { 53 + Some(set) => { 54 + // Incremental build - need route_id to check 55 + let route_id = route_id.expect("route_id required for incremental builds"); 56 + let result = set.contains(route_id); 57 + if !result { 58 + trace!(target: "build", "Skipping route {:?} (not in rebuild set)", route_id); 59 + } 60 + result 61 + } 62 + None => true, // Full build - always rebuild 58 63 } 59 - 60 - result 61 64 } 62 65 63 - /// Helper to track all assets used by a route 66 + /// Helper to track all assets used by a route. 67 + /// Only performs work when incremental builds are enabled and route_id is provided. 64 68 fn track_route_assets( 65 69 build_state: &mut BuildState, 66 - route_id: &RouteIdentifier, 70 + route_id: Option<&RouteIdentifier>, 67 71 route_assets: &RouteAssets, 68 72 ) { 73 + // Skip tracking entirely when route_id is not provided (incremental disabled) 74 + let Some(route_id) = route_id else { 75 + return; 76 + }; 77 + 69 78 // Track images 70 79 for image in &route_assets.images { 71 80 if let Ok(canonical) = image.path().canonicalize() { ··· 321 330 322 331 // Static base route 323 332 if base_params.is_empty() { 324 - let route_id = RouteIdentifier::base(base_path.clone(), None); 333 + // Only create RouteIdentifier when incremental builds are enabled 334 + let route_id = if options.incremental { 335 + Some(RouteIdentifier::base(base_path.clone(), None)) 336 + } else { 337 + None 338 + }; 325 339 326 340 // Check if we need to rebuild this route 327 - if should_rebuild_route(&route_id, &routes_to_rebuild) { 341 + if should_rebuild_route(route_id.as_ref(), &routes_to_rebuild) { 328 342 let mut route_assets = RouteAssets::with_default_assets( 329 343 &route_assets_options, 330 344 Some(image_cache.clone()), ··· 350 364 info!(target: "pages", "{} -> {} {}", url, file_path.to_string_lossy().dimmed(), format_elapsed_time(route_start.elapsed(), &route_format_options)); 351 365 352 366 // Track assets for this route 353 - track_route_assets(&mut build_state, &route_id, &route_assets); 367 + track_route_assets(&mut build_state, route_id.as_ref(), &route_assets); 354 368 355 369 build_pages_images.extend(route_assets.images); 356 370 build_pages_scripts.extend(route_assets.scripts); ··· 398 412 399 413 // Build all pages for this route 400 414 for page in pages { 401 - let route_id = 402 - RouteIdentifier::base(base_path.clone(), Some(page.0.0.clone())); 415 + // Only create RouteIdentifier when incremental builds are enabled 416 + let route_id = if options.incremental { 417 + Some(RouteIdentifier::base(base_path.clone(), Some(page.0.0.clone()))) 418 + } else { 419 + None 420 + }; 403 421 404 422 // Check if we need to rebuild this specific page 405 - if should_rebuild_route(&route_id, &routes_to_rebuild) { 423 + if should_rebuild_route(route_id.as_ref(), &routes_to_rebuild) { 406 424 let page_start = Instant::now(); 407 425 let url = cached_route.url(&page.0); 408 426 let file_path = cached_route.file_path(&page.0, &options.output_dir); ··· 421 439 info!(target: "pages", "├─ {} {}", file_path.to_string_lossy().dimmed(), format_elapsed_time(page_start.elapsed(), &route_format_options)); 422 440 423 441 // Track assets for this page 424 - track_route_assets(&mut build_state, &route_id, &route_assets); 442 + track_route_assets(&mut build_state, route_id.as_ref(), &route_assets); 425 443 426 444 build_metadata.add_page( 427 445 base_path.clone(), ··· 458 476 459 477 if variant_params.is_empty() { 460 478 // Static variant 461 - let route_id = 462 - RouteIdentifier::variant(variant_id.clone(), variant_path.clone(), None); 479 + // Only create RouteIdentifier when incremental builds are enabled 480 + let route_id = if options.incremental { 481 + Some(RouteIdentifier::variant(variant_id.clone(), variant_path.clone(), None)) 482 + } else { 483 + None 484 + }; 463 485 464 486 // Check if we need to rebuild this variant 465 - if should_rebuild_route(&route_id, &routes_to_rebuild) { 487 + if should_rebuild_route(route_id.as_ref(), &routes_to_rebuild) { 466 488 let mut route_assets = RouteAssets::with_default_assets( 467 489 &route_assets_options, 468 490 Some(image_cache.clone()), ··· 491 513 info!(target: "pages", "├─ {} {}", file_path.to_string_lossy().dimmed(), format_elapsed_time(variant_start.elapsed(), &route_format_options)); 492 514 493 515 // Track assets for this variant 494 - track_route_assets(&mut build_state, &route_id, &route_assets); 516 + track_route_assets(&mut build_state, route_id.as_ref(), &route_assets); 495 517 496 518 build_pages_images.extend(route_assets.images); 497 519 build_pages_scripts.extend(route_assets.scripts); ··· 538 560 539 561 // Build all pages for this variant group 540 562 for page in pages { 541 - let route_id = RouteIdentifier::variant( 542 - variant_id.clone(), 543 - variant_path.clone(), 544 - Some(page.0.0.clone()), 545 - ); 563 + // Only create RouteIdentifier when incremental builds are enabled 564 + let route_id = if options.incremental { 565 + Some(RouteIdentifier::variant( 566 + variant_id.clone(), 567 + variant_path.clone(), 568 + Some(page.0.0.clone()), 569 + )) 570 + } else { 571 + None 572 + }; 546 573 547 574 // Check if we need to rebuild this specific variant page 548 - if should_rebuild_route(&route_id, &routes_to_rebuild) { 575 + if should_rebuild_route(route_id.as_ref(), &routes_to_rebuild) { 549 576 let variant_page_start = Instant::now(); 550 577 let url = cached_route.variant_url(&page.0, &variant_id)?; 551 578 let file_path = cached_route.variant_file_path( ··· 568 595 info!(target: "pages", "│ ├─ {} {}", file_path.to_string_lossy().dimmed(), format_elapsed_time(variant_page_start.elapsed(), &route_format_options)); 569 596 570 597 // Track assets for this variant page 571 - track_route_assets(&mut build_state, &route_id, &route_assets); 598 + track_route_assets(&mut build_state, route_id.as_ref(), &route_assets); 572 599 573 600 build_metadata.add_page( 574 601 variant_path.clone(),