Skip to content

[pull] main from MetaMask:main#77

Merged
pull[bot] merged 1 commit into
Reality2byte:mainfrom
MetaMask:main
Aug 17, 2025
Merged

[pull] main from MetaMask:main#77
pull[bot] merged 1 commit into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Aug 17, 2025

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.3)

Can you help keep this open source service alive? 💖 Please sponsor : )

…rformance (#18383)

<!--
  Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
  -->

  ## **Description**

This PR implements a new stream architecture for Perps that optimizes
rendering performance by allowing each component to subscribe to data
updates with its own
refresh interval. This prevents cascade re-rendering and gives
components fine-grained control over their update frequency.

The architecture introduces a centralized `PerpsStreamManager` that
manages WebSocket subscriptions and distributes updates to components
based on their
individual debounce settings. This first PR focuses on optimizing
`PerpsOrderView` with a 10-second refresh rate for stable price display
during order entry.

  ## **Changelog**

CHANGELOG entry: Improved Perps trading performance by optimizing
component rendering and update frequencies

  ## **Related issues**

Fixes: Performance issues with excessive re-renders in Perps trading
views

  ## **Manual testing steps**
```gherkin
Feature: Perps Stream Architecture Performance Optimization

    Scenario: User places an order with optimized price updates
      Given the user is on the Perps Order View screen
      And the stream architecture is active

      When user enters an order amount
      Then prices update every 10 seconds (not on every WebSocket message)
      And the component does not re-render unnecessarily
      And WDYR logs show reduced re-renders

    Scenario: Multiple components with different refresh rates
      Given multiple Perps components are mounted
      And each has different refresh requirements

      When WebSocket receives price updates
      Then each component updates at its configured interval
      And components don't interfere with each other's update cycles
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

Multiple re-renders on every WebSocket update, components interfering
with each other's debounce timers, WDYR showing excessive re-renders for
unchanged data
<!-- [screenshots/recordings] -->

### **After**

Price updates every 10 seconds in PerpsOrderView, no parent component
re-renders, WDYR showing optimized render patterns, stable array
references preventing
  unnecessary re-renders
<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

---------

Co-authored-by: Claude <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators Aug 17, 2025
@pull pull Bot added the ⤵️ pull label Aug 17, 2025
@pull pull Bot merged commit 79c347d into Reality2byte:main Aug 17, 2025
9 of 22 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant