Skip to content

fix(rspeedy/react): fix memory leak when using <list />#1176

Merged
colinaaa merged 1 commit intolynx-family:mainfrom
colinaaa:colin/0630/iife
Jun 30, 2025
Merged

fix(rspeedy/react): fix memory leak when using <list />#1176
colinaaa merged 1 commit intolynx-family:mainfrom
colinaaa:colin/0630/iife

Conversation

@colinaaa
Copy link
Copy Markdown
Collaborator

Summary

Fix memory leak when using <list /> by removing the IIFE wrapper in main-thread.js.

Maybe we should set output.iife: false in @lynx-js/rspeedy.

Checklist

  • Tests updated (or not required).
  • Documentation updated (or not required).

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Jun 30, 2025

🦋 Changeset detected

Latest commit: 764c67c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
@lynx-js/react-rsbuild-plugin Patch
@lynx-js/runtime-wrapper-webpack-plugin Patch
@lynx-js/react-alias-rsbuild-plugin Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@codecov
Copy link
Copy Markdown

codecov bot commented Jun 30, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Jun 30, 2025

CodSpeed Performance Report

Merging #1176 will not alter performance

Comparing colinaaa:colin/0630/iife (764c67c) with main (a7e8b5b)

Summary

✅ 10 untouched benchmarks

@relativeci
Copy link
Copy Markdown

relativeci bot commented Jun 30, 2025

React Example

#2243 Bundle Size — 235.04KiB (+0.79%).

764c67c(current) vs a7e8b5b main#2227(baseline)

Bundle metrics  Change 1 change
                 Current
#2243
     Baseline
#2227
No change  Initial JS 0B 0B
No change  Initial CSS 0B 0B
Change  Cache Invalidation 37.49% 0%
No change  Chunks 0 0
No change  Assets 4 4
No change  Modules 152 152
No change  Duplicate Modules 60 60
No change  Duplicate Code 45.81% 45.81%
No change  Packages 2 2
No change  Duplicate Packages 0 0
Bundle size by type  Change 1 change Regression 1 regression
                 Current
#2243
     Baseline
#2227
No change  IMG 145.76KiB 145.76KiB
Regression  Other 89.28KiB (+2.11%) 87.43KiB

Bundle analysis reportBranch colinaaa:colin/0630/iifeProject dashboard


Generated by RelativeCIDocumentationReport issue

@relativeci
Copy link
Copy Markdown

relativeci bot commented Jun 30, 2025

Web Explorer

#2233 Bundle Size — 258.15KiB (0%).

764c67c(current) vs a7e8b5b main#2217(baseline)

Bundle metrics  no changes
                 Current
#2233
     Baseline
#2217
No change  Initial JS 140.17KiB 140.17KiB
No change  Initial CSS 31.82KiB 31.82KiB
No change  Cache Invalidation 0% 0%
No change  Chunks 4 4
No change  Assets 4 4
No change  Modules 207 207
No change  Duplicate Modules 15 15
No change  Duplicate Code 3.41% 3.41%
No change  Packages 4 4
No change  Duplicate Packages 0 0
Bundle size by type  no changes
                 Current
#2233
     Baseline
#2217
No change  JS 226.33KiB 226.33KiB
No change  CSS 31.82KiB 31.82KiB

Bundle analysis reportBranch colinaaa:colin/0630/iifeProject dashboard


Generated by RelativeCIDocumentationReport issue

@colinaaa colinaaa marked this pull request as ready for review June 30, 2025 08:48
@colinaaa colinaaa merged commit 51cb73d into lynx-family:main Jun 30, 2025
43 checks passed
@colinaaa colinaaa deleted the colin/0630/iife branch June 30, 2025 16:13
colinaaa pushed a commit that referenced this pull request Jun 30, 2025
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @lynx-js/qrcode-rsbuild-plugin@0.4.0

### Minor Changes

- Support "Type to search" when switching entries and schema.
([#1115](#1115))

## @lynx-js/react@0.110.1

### Patch Changes

- Fix a memory leak when using `<list/>`.
([#1144](#1144))

## @lynx-js/rspeedy@0.9.11

### Patch Changes

- Enable fine-grained control for `output.inlineScripts`
([#883](#883))

    ```ts
    type InlineChunkTestFunction = (params: {
      size: number;
      name: string;
    }) => boolean;

    type InlineChunkTest = RegExp | InlineChunkTestFunction;

    type InlineChunkConfig =
      | boolean
      | InlineChunkTest
      | { enable?: boolean | "auto"; test: InlineChunkTest };
    ```

    ```ts
    import { defineConfig } from "@lynx-js/rspeedy";

    export default defineConfig({
      output: {
        inlineScripts: ({ name, size }) => {
          return name.includes("foo") && size < 1000;
        },
      },
    });
    ```

- docs: remove chunks: 'all' in comments
([#1168](#1168))

## @lynx-js/react-rsbuild-plugin@0.10.5

### Patch Changes

- Avoid IIFE in `main-thread.js` to resolve memory leak when using
`<list />`.
([#1176](#1176))

- Enable fine-grained control for `output.inlineScripts`
([#883](#883))

    ```ts
    type InlineChunkTestFunction = (params: {
      size: number;
      name: string;
    }) => boolean;

    type InlineChunkTest = RegExp | InlineChunkTestFunction;

    type InlineChunkConfig =
      | boolean
      | InlineChunkTest
      | { enable?: boolean | "auto"; test: InlineChunkTest };
    ```

    ```ts
    import { defineConfig } from "@lynx-js/rspeedy";

    export default defineConfig({
      output: {
        inlineScripts: ({ name, size }) => {
          return name.includes("foo") && size < 1000;
        },
      },
    });
    ```

- Updated dependencies
\[[`51cb73d`](51cb73d),
[`69fb042`](69fb042),
[`a7e8b5b`](a7e8b5b)]:
    -   @lynx-js/runtime-wrapper-webpack-plugin@0.1.2
    -   @lynx-js/template-webpack-plugin@0.8.1
    -   @lynx-js/react-webpack-plugin@0.6.17
    -   @lynx-js/react-alias-rsbuild-plugin@0.10.5
    -   @lynx-js/use-sync-external-store@1.5.0
    -   @lynx-js/react-refresh-webpack-plugin@0.3.3
    -   @lynx-js/css-extract-webpack-plugin@0.6.0

## @lynx-js/web-constants@0.14.1

### Patch Changes

- feat: support BTS API `lynx.reportError` && `__SetSourceMapRelease`,
now you can use it and handle it in lynx-view error event.
([#1059](#1059))

- fix: in lynx-view all-on-ui mode, the input event of input and
textarea is triggered twice, and the first e.detail is a string, which
does not conform to the expected data format.
([#1179](#1179))

- fix: under the all-on-ui strategy, reload() will add two page
elements. ([#1147](#1147))

-   Updated dependencies \[]:
    -   @lynx-js/web-worker-rpc@0.14.1

## @lynx-js/web-core@0.14.1

### Patch Changes

- feat: support BTS API `lynx.reportError` && `__SetSourceMapRelease`,
now you can use it and handle it in lynx-view error event.
([#1059](#1059))

- fix: under the all-on-ui strategy, reload() will add two page
elements. ([#1147](#1147))

- Updated dependencies
\[[`a64333e`](a64333e),
[`7751375`](7751375),
[`b52a924`](b52a924)]:
    -   @lynx-js/web-worker-runtime@0.14.1
    -   @lynx-js/web-constants@0.14.1
    -   @lynx-js/web-mainthread-apis@0.14.1
    -   @lynx-js/web-worker-rpc@0.14.1

## @lynx-js/web-elements@0.7.7

### Patch Changes

- fix: the param `index` of list scrollToPosition function should be
`position`.
([#1135](#1135))

- fix: in lynx-view all-on-ui mode, the input event of input and
textarea is triggered twice, and the first e.detail is a string, which
does not conform to the expected data format.
([#1179](#1179))

-   Updated dependencies \[]:
    -   @lynx-js/web-elements-template@0.7.7

## @lynx-js/web-mainthread-apis@0.14.1

### Patch Changes

- fix: under the all-on-ui strategy, reload() will add two page
elements. ([#1147](#1147))

- Updated dependencies
\[[`a64333e`](a64333e),
[`7751375`](7751375),
[`b52a924`](b52a924)]:
    -   @lynx-js/web-constants@0.14.1

## @lynx-js/web-worker-runtime@0.14.1

### Patch Changes

- feat: support BTS API `lynx.reportError` && `__SetSourceMapRelease`,
now you can use it and handle it in lynx-view error event.
([#1059](#1059))

- Updated dependencies
\[[`a64333e`](a64333e),
[`7751375`](7751375),
[`b52a924`](b52a924)]:
    -   @lynx-js/web-constants@0.14.1
    -   @lynx-js/web-mainthread-apis@0.14.1
    -   @lynx-js/web-worker-rpc@0.14.1

## @lynx-js/react-webpack-plugin@0.6.17

### Patch Changes

- Enable fine-grained control for `output.inlineScripts`
([#883](#883))

    ```ts
    type InlineChunkTestFunction = (params: {
      size: number;
      name: string;
    }) => boolean;

    type InlineChunkTest = RegExp | InlineChunkTestFunction;

    type InlineChunkConfig =
      | boolean
      | InlineChunkTest
      | { enable?: boolean | "auto"; test: InlineChunkTest };
    ```

    ```ts
    import { defineConfig } from "@lynx-js/rspeedy";

    export default defineConfig({
      output: {
        inlineScripts: ({ name, size }) => {
          return name.includes("foo") && size < 1000;
        },
      },
    });
    ```

## @lynx-js/runtime-wrapper-webpack-plugin@0.1.2

### Patch Changes

- Wrap with IIFE when `output.iife: false` to avoid naming conflict.
([#1176](#1176))

## @lynx-js/template-webpack-plugin@0.8.1

### Patch Changes

- feat: `::placeholder` will be compiled to `part(input)::placeholder`,
which means you can use pseudo-element CSS to add placeholder styles to
input and textarea.
([#1158](#1158))

        // before
<input placeholder-color='red' placeholder-font-weight='bold'
placeholder-font-size='20px'>

        // after
        <input>

        input::placeholder {
          color: red;
          font-weight: bold;
          font-size: 20px;
        }

- Enable fine-grained control for `output.inlineScripts`
([#883](#883))

    ```ts
    type InlineChunkTestFunction = (params: {
      size: number;
      name: string;
    }) => boolean;

    type InlineChunkTest = RegExp | InlineChunkTestFunction;

    type InlineChunkConfig =
      | boolean
      | InlineChunkTest
      | { enable?: boolean | "auto"; test: InlineChunkTest };
    ```

    ```ts
    import { defineConfig } from "@lynx-js/rspeedy";

    export default defineConfig({
      output: {
        inlineScripts: ({ name, size }) => {
          return name.includes("foo") && size < 1000;
        },
      },
    });
    ```

## create-rspeedy@0.9.11



## @lynx-js/react-alias-rsbuild-plugin@0.10.5



## upgrade-rspeedy@0.9.11



## @lynx-js/web-core-server@0.14.1



## @lynx-js/web-elements-template@0.7.7



## @lynx-js/web-worker-rpc@0.14.1

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant