Optimize FancyCursor: Move DOM checks to mouseover #8

Merged
google-labs-jules[bot] merged 1 commits from optimize-fancy-cursor-13866096887027914754 into main 2026-01-23 09:55:22 +00:00
google-labs-jules[bot] commented 2026-01-23 09:27:47 +00:00 (Migrated from github.com)

Optimized FancyCursor performance by moving expensive DOM operations (elementFromPoint and closest checks) out of the mousemove animation loop.

💡 What

  • Refactored FancyCursor.tsx to use a mouseover event listener to detect element hover states.
  • Removed elementFromPoint calls entirely.
  • Created updateCursorState helper to manage class toggling only when the hovered element changes.
  • Simplified handleMouseMove to only handle transform updates.

🎯 Why

  • Calling document.elementFromPoint and traversing the DOM with closest on every mousemove event (or animation frame) causes significant CPU usage and potential layout thrashing, especially on complex pages.
  • Moving this logic to mouseover ensures it only runs when necessary (when the cursor enters a new element), vastly reducing the computational overhead during mouse movement.

📊 Measured Improvement

  • Verified via tests that document.elementFromPoint is no longer called during mousemove.
  • While a specific CPU benchmark wasn't run, removing forced synchronous layout (which elementFromPoint can trigger) from the main thread's animation loop is a standard and impactful performance win.

PR created automatically by Jules for task 13866096887027914754 started by @ragusa-it

Optimized `FancyCursor` performance by moving expensive DOM operations (`elementFromPoint` and `closest` checks) out of the `mousemove` animation loop. ### 💡 What - Refactored `FancyCursor.tsx` to use a `mouseover` event listener to detect element hover states. - Removed `elementFromPoint` calls entirely. - Created `updateCursorState` helper to manage class toggling only when the hovered element changes. - Simplified `handleMouseMove` to only handle `transform` updates. ### 🎯 Why - Calling `document.elementFromPoint` and traversing the DOM with `closest` on every `mousemove` event (or animation frame) causes significant CPU usage and potential layout thrashing, especially on complex pages. - Moving this logic to `mouseover` ensures it only runs when necessary (when the cursor enters a new element), vastly reducing the computational overhead during mouse movement. ### 📊 Measured Improvement - Verified via tests that `document.elementFromPoint` is no longer called during `mousemove`. - While a specific CPU benchmark wasn't run, removing forced synchronous layout (which `elementFromPoint` can trigger) from the main thread's animation loop is a standard and impactful performance win. --- *PR created automatically by Jules for task [13866096887027914754](https://jules.google.com/task/13866096887027914754) started by @ragusa-it*
google-labs-jules[bot] commented 2026-01-23 09:27:49 +00:00 (Migrated from github.com)

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to **Reactive Mode**. When this mode is on, I will only act on comments where you specifically mention me with `@jules`. You can find this option in the **Pull Request** section of your [global Jules UI settings](https://jules.google.com/settings). You can always switch back! New to Jules? Learn more at [jules.google/docs](https://jules.google/docs). --- *_For security, I will only act on instructions from the user who triggered this task._*
Sign in to join this conversation.