diff --git a/.changeset/good-onions-go.md b/.changeset/good-onions-go.md
new file mode 100644
index 0000000000..96a492626c
--- /dev/null
+++ b/.changeset/good-onions-go.md
@@ -0,0 +1,7 @@
+---
+"@lynx-js/web-core": patch
+---
+
+feat: remove multi-thread mts heating
+
+The default rendering mode is "all-on-ui". Therefore the preheating for "multi-thread" will be removed.
diff --git a/packages/web-platform/web-core/src/uiThread/bootWorkers.ts b/packages/web-platform/web-core/src/uiThread/bootWorkers.ts
index 8e897cbec3..f36707d366 100644
--- a/packages/web-platform/web-core/src/uiThread/bootWorkers.ts
+++ b/packages/web-platform/web-core/src/uiThread/bootWorkers.ts
@@ -14,7 +14,6 @@ interface LynxViewRpc {
const backgroundWorkerContextCount: number[] = [];
const contextIdToBackgroundWorker: (Worker | undefined)[] = [];
-let preHeatedMainWorker = createMainWorker();
export function bootWorkers(
lynxGroupId: number | undefined,
allOnUI?: boolean,
@@ -27,8 +26,7 @@ export function bootWorkers(
if (allOnUI) {
curMainWorker = createUIChannel();
} else {
- curMainWorker = preHeatedMainWorker;
- preHeatedMainWorker = createMainWorker();
+ curMainWorker = createMainWorker();
}
const curBackgroundWorker = createBackgroundWorker(
lynxGroupId,
@@ -124,6 +122,10 @@ function createBackgroundWorker(
function createWebWorker(name: string): Worker {
return new Worker(
+ /* webpackFetchPriority: "high" */
+ /* webpackChunkName: "web-core-worker-runtime" */
+ /* webpackPrefetch: true */
+ /* webpackPreload: true */
new URL('@lynx-js/web-worker-runtime', import.meta.url),
{
type: 'module',
diff --git a/packages/web-platform/web-core/src/uiThread/createRenderAllOnUI.ts b/packages/web-platform/web-core/src/uiThread/createRenderAllOnUI.ts
index 5d87e5267a..32c6a5e228 100644
--- a/packages/web-platform/web-core/src/uiThread/createRenderAllOnUI.ts
+++ b/packages/web-platform/web-core/src/uiThread/createRenderAllOnUI.ts
@@ -22,7 +22,14 @@ import { createExposureMonitor } from './crossThreadHandlers/createExposureMonit
const {
prepareMainThreadAPIs,
-} = await import('@lynx-js/web-mainthread-apis');
+} = await import(
+ /* webpackChunkName: "web-core-main-thread-apis" */
+ /* webpackMode: "lazy-once" */
+ /* webpackPreload: true */
+ /* webpackPrefetch: true */
+ /* webpackFetchPriority: "high" */
+ '@lynx-js/web-mainthread-apis'
+);
export function createRenderAllOnUI(
mainToBackgroundRpc: Rpc,
diff --git a/packages/web-platform/web-tests/tests/react.spec.ts b/packages/web-platform/web-tests/tests/react.spec.ts
index 6cbf6e2646..65766033a0 100644
--- a/packages/web-platform/web-tests/tests/react.spec.ts
+++ b/packages/web-platform/web-tests/tests/react.spec.ts
@@ -720,7 +720,7 @@ test.describe('reactlynx3 tests', () => {
});
await wait(50);
expect(message).toContain('fin');
- expect(page.workers().length).toStrictEqual(1);
+ expect(page.workers().length).toStrictEqual(0);
});
test('api-error', async ({ page }, { title }) => {
@@ -886,43 +886,6 @@ test.describe('reactlynx3 tests', () => {
await expect(offset).toBe(true);
});
- test('api-preheat', async ({ page }, { title }) => {
- await goto(page, title);
- const target = page.locator('#target');
- await expect(target).toHaveCSS('background-color', 'rgb(255, 192, 203)'); // pink
- expect(page.workers().length).toStrictEqual(ENABLE_MULTI_THREAD ? 3 : 2);
- });
-
- test('api-preheat-at-least-one', async ({ page }, { title }) => {
- await goto(page, title);
- const target = page.locator('#target');
- await expect(target).toHaveCSS('background-color', 'rgb(255, 192, 203)'); // pink
- expect(page.workers().length).toBe(ENABLE_MULTI_THREAD ? 3 : 2);
- await page.evaluate(() => {
- document.body.querySelector('lynx-view')?.remove();
- });
- await wait(100);
- const threadStrategy = ENABLE_MULTI_THREAD ? 'multi-thread' : 'all-on-ui';
- expect(page.workers().length).toBe(1);
- await page.evaluate((threadStrategy) => {
- const newView = document.createElement('lynx-view');
- newView.setAttribute('style', 'height:50vh; width:100vw;');
- newView.setAttribute('thread-strategy', threadStrategy);
- newView.setAttribute('url', '/dist/api-preheat/main-thread.js');
- document.body.append(newView);
- }, threadStrategy);
-
- await page.evaluate((threadStrategy) => {
- const newView = document.createElement('lynx-view');
- newView.setAttribute('style', 'height:50vh; width:100vw;');
- newView.setAttribute('thread-strategy', threadStrategy);
- newView.setAttribute('url', '/dist/api-preheat/main-thread.js');
- document.body.append(newView);
- }, threadStrategy);
- await wait(500);
- expect(page.workers().length).toBe(ENABLE_MULTI_THREAD ? 5 : 3);
- });
-
test('api-setSharedData', async ({ page }, { title }) => {
await goto(page, title);
await wait(100);
@@ -945,23 +908,23 @@ test.describe('reactlynx3 tests', () => {
test('api-shared-context-worker-count', async ({ page }) => {
await goto(page, 'api-setSharedData', 'api-getSharedData');
await wait(100);
- expect(page.workers().length).toBeLessThanOrEqual(4);
+ expect(page.workers().length).toBeLessThanOrEqual(3);
});
test('api-shared-context-worker-count-release', async ({ page }) => {
await goto(page, 'api-setSharedData', 'api-getSharedData');
await wait(100);
- expect(page.workers().length).toBeLessThanOrEqual(4);
+ expect(page.workers().length).toBeLessThanOrEqual(3);
await page.evaluate(() =>
document.body.querySelector('lynx-view')?.remove()
);
await wait(100);
- expect(page.workers().length).toBeLessThanOrEqual(3);
+ expect(page.workers().length).toBeLessThanOrEqual(2);
await page.evaluate(() =>
document.body.querySelector('lynx-view')?.remove()
);
await wait(100);
- expect(page.workers().length).toBeLessThanOrEqual(1);
+ expect(page.workers().length).toBeLessThanOrEqual(0);
});
test.describe('api-exposure', () => {
diff --git a/packages/web-platform/web-tests/tests/react/api-preheat-at-least-one/index.jsx b/packages/web-platform/web-tests/tests/react/api-preheat-at-least-one/index.jsx
deleted file mode 100644
index 686e3df09f..0000000000
--- a/packages/web-platform/web-tests/tests/react/api-preheat-at-least-one/index.jsx
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2023 The Lynx Authors. All rights reserved.
-// Licensed under the Apache License Version 2.0 that can be found in the
-// LICENSE file in the root directory of this source tree.
-import { root, useEffect } from '@lynx-js/react';
-
-function App() {
- useEffect(() => {
- return () => {
- console.log('fin');
- };
- }, []);
- return (
-
- );
-}
-
-root.render();
diff --git a/packages/web-platform/web-tests/tests/react/api-preheat/index.jsx b/packages/web-platform/web-tests/tests/react/api-preheat/index.jsx
deleted file mode 100644
index 686e3df09f..0000000000
--- a/packages/web-platform/web-tests/tests/react/api-preheat/index.jsx
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2023 The Lynx Authors. All rights reserved.
-// Licensed under the Apache License Version 2.0 that can be found in the
-// LICENSE file in the root directory of this source tree.
-import { root, useEffect } from '@lynx-js/react';
-
-function App() {
- useEffect(() => {
- return () => {
- console.log('fin');
- };
- }, []);
- return (
-
- );
-}
-
-root.render();
diff --git a/packages/web-platform/web-worker-runtime/src/index.ts b/packages/web-platform/web-worker-runtime/src/index.ts
index e2f7f55c31..b6b970da23 100644
--- a/packages/web-platform/web-worker-runtime/src/index.ts
+++ b/packages/web-platform/web-worker-runtime/src/index.ts
@@ -3,7 +3,6 @@
// LICENSE file in the root directory of this source tree.
import { startBackgroundThread } from './backgroundThread/index.js';
-import { startMainThreadWorker } from './mainThread/startMainThread.js';
export interface WorkerStartMessage {
mode: 'main' | 'background';
@@ -11,10 +10,16 @@ export interface WorkerStartMessage {
toUIThread: MessagePort;
}
-globalThis.onmessage = (ev) => {
+globalThis.onmessage = async (ev) => {
const { mode, toPeerThread, toUIThread } = ev
.data as WorkerStartMessage;
if (mode === 'main') {
+ const { startMainThreadWorker } = await import(
+ /* webpackChunkName: "web-worker-runtime-main-thread" */
+ /* webpackMode: "lazy-once" */
+ /* webpackPreload: true */
+ './mainThread/startMainThread.js'
+ );
startMainThreadWorker(toUIThread, toPeerThread);
} else {
startBackgroundThread(toUIThread, toPeerThread);
diff --git a/packages/web-platform/web-worker-runtime/src/mainThread/startMainThread.ts b/packages/web-platform/web-worker-runtime/src/mainThread/startMainThread.ts
index d3371b7ea7..c20bd4350b 100644
--- a/packages/web-platform/web-worker-runtime/src/mainThread/startMainThread.ts
+++ b/packages/web-platform/web-worker-runtime/src/mainThread/startMainThread.ts
@@ -23,13 +23,18 @@ import { OffscreenDocument } from '@lynx-js/offscreen-document/webworker';
import { _onEvent } from '@lynx-js/offscreen-document/webworker';
import { registerUpdateDataHandler } from './crossThreadHandlers/registerUpdateDataHandler.js';
+const { prepareMainThreadAPIs } = await import(
+ /* webpackChunkName: "web-core-main-thread-apis" */
+ /* webpackMode: "lazy-once" */
+ /* webpackPreload: true */
+ /* webpackPrefetch: true */
+ /* webpackFetchPriority: "high" */
+ '@lynx-js/web-mainthread-apis'
+);
export async function startMainThreadWorker(
uiThreadPort: MessagePort,
backgroundThreadPort: MessagePort,
) {
- const { prepareMainThreadAPIs } = await import(
- '@lynx-js/web-mainthread-apis'
- );
const uiThreadRpc = new Rpc(uiThreadPort, 'main-to-ui');
const backgroundThreadRpc = new Rpc(backgroundThreadPort, 'main-to-bg');
const { markTimingInternal, flushMarkTimingInternal } =