diff --git a/.changeset/clean-papers-go.md b/.changeset/clean-papers-go.md new file mode 100644 index 0000000000..ff5485032f --- /dev/null +++ b/.changeset/clean-papers-go.md @@ -0,0 +1,5 @@ +--- +"@lynx-js/web-explorer": patch +--- + +chore: update dependencies diff --git a/.changeset/dull-falcons-smile.md b/.changeset/dull-falcons-smile.md new file mode 100644 index 0000000000..3e3a6b91c0 --- /dev/null +++ b/.changeset/dull-falcons-smile.md @@ -0,0 +1,23 @@ +--- +"@lynx-js/web-mainthread-apis": minor +"@lynx-js/web-worker-runtime": minor +"@lynx-js/web-constants": minor +"@lynx-js/web-elements": minor +"@lynx-js/web-core": minor +--- + +refactor: remove web-elements/lazy and loadNewTag + +- remove @lynx-js/web-elements/lazy +- remove loadElement +- remove loadNewTag callback + +**This is a breaking change** + +Now we removed the default lazy loading preinstalled in web-core + +Please add the following statement in your web project + +``` +import "@lynx-js/web-elements/all"; +``` diff --git a/packages/web-platform/web-constants/src/endpoints.ts b/packages/web-platform/web-constants/src/endpoints.ts index 16dea03af1..33149d48eb 100644 --- a/packages/web-platform/web-constants/src/endpoints.ts +++ b/packages/web-platform/web-constants/src/endpoints.ts @@ -107,11 +107,6 @@ export const BackgroundThreadStartEndpoint = createRpcEndpoint<[ }, ], void>('start', false, true); -export const loadNewTagEndpoint = createRpcEndpoint< - [tag: string], - void ->('loadNewTag', false, true); - /** * threadLabel, Error message, info */ diff --git a/packages/web-platform/web-core/src/apis/LynxView.ts b/packages/web-platform/web-core/src/apis/LynxView.ts index 64b1b51f48..24a720a120 100644 --- a/packages/web-platform/web-core/src/apis/LynxView.ts +++ b/packages/web-platform/web-core/src/apis/LynxView.ts @@ -14,16 +14,10 @@ import { type NativeModulesCall, type UpdateDataType, } from '@lynx-js/web-constants'; -import { loadElement } from '@lynx-js/web-elements/lazy'; /** * Based on our experiences, these elements are almost used in all lynx cards. */ -loadElement('lynx-wrapper'); -loadElement('x-view'); -loadElement('x-text'); -loadElement('x-image'); -loadElement('scroll-view'); /** * @param {string} url [required] The url of the entry of your Lynx card @@ -359,7 +353,6 @@ export class LynxView extends HTMLElement { overrideLynxTagToHTMLTagMap: this.#overrideLynxTagToHTMLTagMap, nativeModulesUrl: this.#nativeModulesUrl, callbacks: { - loadNewTag: loadElement, nativeModulesCall: ( ...args: [name: string, data: any, moduleName: string] ) => { diff --git a/packages/web-platform/web-core/src/uiThread/crossThreadHandlers/registerFlushElementTreeHandler.ts b/packages/web-platform/web-core/src/uiThread/crossThreadHandlers/registerFlushElementTreeHandler.ts index 36b270ec7f..5d602ae33c 100644 --- a/packages/web-platform/web-core/src/uiThread/crossThreadHandlers/registerFlushElementTreeHandler.ts +++ b/packages/web-platform/web-core/src/uiThread/crossThreadHandlers/registerFlushElementTreeHandler.ts @@ -42,7 +42,6 @@ export function registerFlushElementTreeHandler( backgroundRpc: Rpc; rootDom: HTMLElement; entryId: string; - currentLoadingTags: Promise[]; }, onCommit: (info: { pipelineId: string | undefined; @@ -61,7 +60,6 @@ export function registerFlushElementTreeHandler( backgroundRpc, rootDom, entryId, - currentLoadingTags, } = options; const uniqueIdToElement: WeakRef< HTMLElement & RuntimePropertyOnElement @@ -146,37 +144,35 @@ export function registerFlushElementTreeHandler( const pipelineId = pipelineOptions?.pipelineID; const timingFlags: string[] = []; markTimingInternal('dispatch_start', pipelineId); - Promise.all(currentLoadingTags).then(() => { - markTimingInternal('layout_start', pipelineId); - markTimingInternal('ui_operation_flush_start', pipelineId); - const page = decodeElementOperation(operations, { - timingFlags, - uniqueIdToElement, - uniqueIdToCssInJsRule, - createElementImpl, - createStyleRuleImpl, - eventHandler: { - mtsHandler, - btsHandler, - }, - }); - markTimingInternal('ui_operation_flush_end', pipelineId); - const isFP = !!page; - if (isFP) { - // on FP - const styleElement = document.createElement('style'); - styleElement.innerHTML = cardCss!; - rootDom.append(styleElement); - rootDom.append(page); - applyPageAttributes(page, pageConfig, entryId); - } - markTimingInternal('layout_end', pipelineId); - markTimingInternal('dispatch_end', pipelineId); - onCommit({ - pipelineId, - timingFlags, - isFP, - }); + markTimingInternal('layout_start', pipelineId); + markTimingInternal('ui_operation_flush_start', pipelineId); + const page = decodeElementOperation(operations, { + timingFlags, + uniqueIdToElement, + uniqueIdToCssInJsRule, + createElementImpl, + createStyleRuleImpl, + eventHandler: { + mtsHandler, + btsHandler, + }, + }); + markTimingInternal('ui_operation_flush_end', pipelineId); + const isFP = !!page; + if (isFP) { + // on FP + const styleElement = document.createElement('style'); + styleElement.innerHTML = cardCss!; + rootDom.append(styleElement); + rootDom.append(page); + applyPageAttributes(page, pageConfig, entryId); + } + markTimingInternal('layout_end', pipelineId); + markTimingInternal('dispatch_end', pipelineId); + onCommit({ + pipelineId, + timingFlags, + isFP, }); }, ); diff --git a/packages/web-platform/web-core/src/uiThread/crossThreadHandlers/registerLoadNewTagHandler.ts b/packages/web-platform/web-core/src/uiThread/crossThreadHandlers/registerLoadNewTagHandler.ts deleted file mode 100644 index e2b77c5240..0000000000 --- a/packages/web-platform/web-core/src/uiThread/crossThreadHandlers/registerLoadNewTagHandler.ts +++ /dev/null @@ -1,21 +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 type { Rpc } from '@lynx-js/web-worker-rpc'; -import { getElementTag } from '../getElementTag.js'; -import type { loadNewTagEndpoint } from '@lynx-js/web-constants'; - -export function registerLoadNewTagHandler( - rpc: Rpc, - endpoint: typeof loadNewTagEndpoint, - loadTag: (tag: string) => void, - tagMap: Record, - currentLoadingTags: Promise[], -) { - rpc.registerHandler( - endpoint, - (tag) => { - loadTag(getElementTag(tag, tagMap, currentLoadingTags)); - }, - ); -} diff --git a/packages/web-platform/web-core/src/uiThread/startUIThread.ts b/packages/web-platform/web-core/src/uiThread/startUIThread.ts index fde1c3297a..fa89f114bc 100644 --- a/packages/web-platform/web-core/src/uiThread/startUIThread.ts +++ b/packages/web-platform/web-core/src/uiThread/startUIThread.ts @@ -3,7 +3,6 @@ // LICENSE file in the root directory of this source tree. import type { LynxView } from '../apis/createLynxView.js'; -import { registerLoadNewTagHandler } from './crossThreadHandlers/registerLoadNewTagHandler.js'; import { createExposureService } from './crossThreadHandlers/createExposureService.js'; import { registerInvokeUIMethodHandler } from './crossThreadHandlers/registerInvokeUIMethodHandler.js'; import { registerNativePropsHandler } from './crossThreadHandlers/registerSetNativePropsHandler.js'; @@ -17,7 +16,6 @@ import { registerTriggerComponentEventHandler } from './crossThreadHandlers/regi import { registerSelectComponentHandler } from './crossThreadHandlers/registerSelectComponentHandler.js'; import { flushElementTreeEndpoint, - loadNewTagEndpoint, mainThreadChunkReadyEndpoint, mainThreadStartEndpoint, sendGlobalEventEndpoint, @@ -33,7 +31,6 @@ export function startUIThread( configs: Omit, rootDom: HTMLElement, callbacks: { - loadNewTag?: (tag: string) => void; nativeModulesCall: NativeModulesCall; onError?: () => void; }, @@ -42,7 +39,6 @@ export function startUIThread( ): LynxView { const createLynxStartTiming = performance.now() + performance.timeOrigin; const { entryId } = configs; - const currentLoadingTags: Promise[] = []; const { mainThreadRpc, backgroundRpc, @@ -66,21 +62,6 @@ export function startUIThread( nativeModulesUrl, }); }); - registerLoadNewTagHandler( - mainThreadRpc, - loadNewTagEndpoint, - (tag) => { - if (callbacks.loadNewTag) { - callbacks.loadNewTag(tag); - } else { - if (!customElements.get(tag) && tag.includes('-')) { - throw new Error(`[lynx-web] cannot find custom element ${tag}`); - } - } - }, - overrideTagMap, - currentLoadingTags, - ); registerReportErrorHandler( mainThreadRpc, callbacks.onError, @@ -98,7 +79,6 @@ export function startUIThread( backgroundRpc, rootDom, entryId, - currentLoadingTags, }, (info) => { const { pipelineId, timingFlags, isFP } = info; diff --git a/packages/web-platform/web-elements/package.json b/packages/web-platform/web-elements/package.json index 42115c76f1..b27916ed8d 100644 --- a/packages/web-platform/web-elements/package.json +++ b/packages/web-platform/web-elements/package.json @@ -22,10 +22,6 @@ "types": "./dist/all.d.ts", "default": "./dist/all.js" }, - "./lazy": { - "types": "./dist/lazy.d.ts", - "default": "./dist/lazy.js" - }, "./LynxWrapper": { "types": "./dist/LynxWrapper/index.d.ts", "default": "./dist/LynxWrapper/index.js" diff --git a/packages/web-platform/web-elements/src/lazy.ts b/packages/web-platform/web-elements/src/lazy.ts deleted file mode 100644 index aec3b20c3e..0000000000 --- a/packages/web-platform/web-elements/src/lazy.ts +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2024 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. -const loadingElementPromises = new Set(); -export function loadElement(tag: string) { - if (loadingElementPromises.has(tag)) { - return; - } - if (customElements.get(tag)) { - return; - } - switch (tag) { - case 'lynx-wrapper': - import('./LynxWrapper/index.js'); - loadingElementPromises.add(tag); - return; - case 'scroll-view': - import('./ScrollView/index.js'); - loadingElementPromises.add(tag); - return; - case 'x-audio-tt': - import('./XAudioTT/index.js'); - loadingElementPromises.add(tag); - return; - case 'x-canvas': - import('./XCanvas/index.js'); - loadingElementPromises.add(tag); - return; - case 'x-foldview-ng': - case 'x-foldview-header-ng': - case 'x-foldview-toolbar-ng': - case 'x-foldview-slot-ng': - case 'x-foldview-slot-drag-ng': - import('./XFoldViewNg/index.js'); - loadingElementPromises.add('x-foldview-ng'); - loadingElementPromises.add('x-foldview-header-ng'); - loadingElementPromises.add('x-foldview-toolbar-ng'); - loadingElementPromises.add('x-foldview-slot-ng'); - loadingElementPromises.add('x-foldview-slot-drag-ng'); - return; - case 'x-image': - case 'filter-image': - import('./XImage/index.js'); - loadingElementPromises.add('x-image'); - loadingElementPromises.add('filter-image'); - return; - case 'x-input': - import('./XInput/index.js'); - loadingElementPromises.add(tag); - return; - case 'x-list': - import('./XList/index.js'); - loadingElementPromises.add('x-list'); - loadingElementPromises.add('list-item'); - return; - case 'x-overlay-ng': - import('./XOverlayNg/index.js'); - loadingElementPromises.add(tag); - return; - case 'x-refresh-view': - case 'x-refresh-header': - case 'x-refresh-footer': - import('./XRefreshView/index.js'); - loadingElementPromises.add('x-refresh-view'); - loadingElementPromises.add('x-refresh-header'); - loadingElementPromises.add('x-refresh-footer'); - return; - case 'x-svg': - import('./XSvg/index.js'); - loadingElementPromises.add(tag); - return; - case 'x-swiper': - case 'x-swiper-item': - import('./XSwiper/index.js'); - loadingElementPromises.add('x-swiper'); - loadingElementPromises.add('x-swiper-item'); - return; - case 'x-text': - case 'inline-text': - case 'inline-image': - case 'inline-truncation': - case 'raw-text': - import('./XText/index.js'); - loadingElementPromises.add('x-text'); - loadingElementPromises.add('inline-text'); - loadingElementPromises.add('inline-image'); - loadingElementPromises.add('inline-truncation'); - loadingElementPromises.add('raw-text'); - return; - case 'x-textarea': - import('./XTextarea/index.js'); - loadingElementPromises.add(tag); - return; - case 'x-view': - import('./XView/index.js'); - loadingElementPromises.add(tag); - return; - case 'x-viewpager-ng': - case 'x-viewpager-item-ng': - import('./XViewpagerNg/index.js'); - loadingElementPromises.add('x-viewpager-ng'); - loadingElementPromises.add('x-viewpager-item-ng'); - return; - } -} diff --git a/packages/web-platform/web-explorer/index.html b/packages/web-platform/web-explorer/index.html index b571229662..0bf78e7dd2 100644 --- a/packages/web-platform/web-explorer/index.html +++ b/packages/web-platform/web-explorer/index.html @@ -76,7 +76,7 @@