mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-23 22:11:38 +00:00
fix: optimize serve/sourcemap startup from >180s to ~8s
Root cause: notify-debouncer-full with macos_kqueue caused 25K+ directory watch registrations to take >170s on large projects. Changes: - Replace notify-debouncer-full with notify-debouncer-mini to avoid FSEvents Create+Remove event cancellation and heavy per-watch overhead - Remove macos_kqueue feature; use FSEvents (matches upstream Rojo) - Fix VFS read guard: watch_enabled && watch_recursive -> watch_enabled so recording mechanism works when watch_recursive is false - Build RefPathIndex from patch_apply data instead of redundant 4.8s WalkDir + 5,854 file re-reads (populate_from_dir) - Use ServeSession::new_oneshot() for sourcemap without --watch - Restore simple synchronous watch setup (implicit during reads) Serve: >180s (never completed) -> ~8s to Listening Sourcemap: 14.3s -> ~9s All 489 tests passing.
This commit is contained in:
parent
4ddc4a3e31
commit
9cf4cea936
10 changed files with 236 additions and 210 deletions
|
|
@ -326,6 +326,22 @@ impl RefPathIndex {
|
|||
}
|
||||
}
|
||||
|
||||
/// Build from pre-collected entries (avoids re-walking the directory tree).
|
||||
pub fn from_entries(entries: Vec<(String, PathBuf)>) -> Self {
|
||||
let mut index = Self::new();
|
||||
let count = entries.len();
|
||||
for (ref_path, meta_file) in entries {
|
||||
index.add(&ref_path, &meta_file);
|
||||
}
|
||||
if count > 0 {
|
||||
log::debug!(
|
||||
"RefPathIndex: built from {} collected Rojo_Ref_* entries",
|
||||
count
|
||||
);
|
||||
}
|
||||
index
|
||||
}
|
||||
|
||||
/// Record that `meta_file` contains a `Rojo_Ref_*` attribute with value
|
||||
/// `ref_path` (the instance path string, e.g., "Workspace/Model/Part1").
|
||||
pub fn add(&mut self, ref_path: &str, meta_file: &Path) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue