Skip to content

1.0.19

Choose a tag to compare

@github-actions github-actions released this 20 Sep 21:11
· 19 commits to master since this release

Release Notes: Re-Supercharged Links (v1.0.19-optimized)

Overview

This production release introduces a completely re-engineered core runtime architecture. It addresses critical performance bottlenecks, eliminates heavy layout thrashing loops, and stabilizes background resource usage down to 0% idle CPU.

The entire framework has been audited to eliminate redundant object allocations, optimize memory footprint, and guarantee smooth performance inside large vaults with high-density data views.


Key Performance Enhancements

1. Fixed "Infinite Style Loop" & DOM Race Conditions

  • The Issue: Previous rendering loops repeatedly cleared, re-inserted, and evaluated link styles on active view elements. This triggered a cascading sequence of Obsidian mutation updates, keeping the Electron renderer thread locked at 58%–62% CPU.
  • The Fix: Implemented a synchronous Immutability Guard (scl-processed) inside the core mutation engine (setLinkNewProps). Element styles and attributes are now verified before any heavy DOM access. If a link matches its precompiled layout configuration, the mutation layer aborts immediately, clipping the endless execution chain.

2. High-Performance Asynchronous DOM Chunking

  • The Issue: Legitimately updating high-density layouts (e.g., loading large database tables or bulk link state changes via myBrain) forced up to 700 synchronous DOM mutations in a single frame, causing significant lag and frameskipping.
  • The Fix: Introduced DOMMutationBatcher, a non-blocking asynchronous render queue powered by requestAnimationFrame. Mutations are now split into micro-batches capped at 25 operations per frame. Large table layouts are processed smoothly across successive animation cycles, securing a fluid 60 FPS user experience.

3. Decoupled Core Event Engine & Cache Hygiene

  • The Issue: Real-time cache pruning and structural array mappings (Array.from().sort()) were executing inline across active styling loops, bottlenecking the main Obsidian process.
  • The Fix:
    • Relocated the cache eviction manager (runLifecyclePrune) out of hot execution paths onto a passive, native this.registerInterval() background worker that sweeps memory every 30 seconds.
    • Swapped out loose real-time event executions for a strictly debounced path and folder-prefix aggregation filter (asap: false), grouping rapid file changes together before executing a single compressed layout update.

4. Zero-Array Memory Optimization (Anti-Garbage Collection)

  • The Issue: Frequent use of high-order array methods (.filter(), .map(), and Regex splits) on critical hot paths generated massive amounts of short-lived heap allocations, forcing constant Garbage Collection thread pauses.
  • The Fix: Streamlined shared-utils with localized indexing loops (for, while) and index-based slicing (substring, indexOf). Features like hasTagToken now utilize zero-allocation string mapping to evaluate token parameters instantly.

Architectural Metrics & Telemetry Baseline

Following these optimizations, real-world vault analytics profiles demonstrate massive efficiency gains:

Metric Metric Legacy Runtime Engine v1.0.19 Optimized Engine Architectural Impact
Idle CPU (Renderer / Process) 55.0% – 62.0% 0.0% – 0.2% Eliminates thermal throttling and battery drain.
Sync Mutations per Frame ~702 nodes Capped at 25 nodes Breaks layout bottlenecks; guarantees fluid UI scrolling.
Average Execution Time 2.24ms – 5.10ms 0.63ms – 0.95ms Drastic sub-millisecond execution boundaries.
Cache Hit Rate Stability Volatile Loops 54.1% (Deterministic) Removes duplicate metadata queries from disk.

Installation & Deployment

The compiled assets have been packaged and optimized to fully prevent script evaluation anomalies during hot-reloads. Downstream plugins (such as myBrain) can safely bind against the standardized data-attribute matrices.