@lynx-js/web-core 0.14.1 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @lynx-js/web-core
|
|
2
2
|
|
|
3
|
+
## 0.14.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- feat: merge multiple markTiming RPC communication events together and send them together, which can effectively reduce the number of RPC communications. ([#1178](https://github.com/lynx-family/lynx-stack/pull/1178))
|
|
8
|
+
|
|
9
|
+
- chore: extract shared logic from web-core and web-core-server's loadTemplate into a unified generateTemplate function ([#1211](https://github.com/lynx-family/lynx-stack/pull/1211))
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`e44b146`](https://github.com/lynx-family/lynx-stack/commit/e44b146b1bc2b58c0347af7fb4e4157688e07e36), [`5a9b38b`](https://github.com/lynx-family/lynx-stack/commit/5a9b38b783e611aa9761c4cd52191172270c09c7), [`6ca5b91`](https://github.com/lynx-family/lynx-stack/commit/6ca5b9106aade393dfac88914b160960a61a82f2)]:
|
|
12
|
+
- @lynx-js/web-mainthread-apis@0.14.2
|
|
13
|
+
- @lynx-js/web-worker-runtime@0.14.2
|
|
14
|
+
- @lynx-js/web-constants@0.14.2
|
|
15
|
+
- @lynx-js/web-worker-rpc@0.14.2
|
|
16
|
+
|
|
3
17
|
## 0.14.1
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type StartMainThreadContextConfig, type Cloneable } from '@lynx-js/web-constants';
|
|
2
2
|
import { Rpc } from '@lynx-js/web-worker-rpc';
|
|
3
|
-
export declare function createRenderAllOnUI(mainToBackgroundRpc: Rpc, shadowRoot: ShadowRoot, markTimingInternal: (timingKey: string, pipelineId?: string, timeStamp?: number) => void, callbacks: {
|
|
3
|
+
export declare function createRenderAllOnUI(mainToBackgroundRpc: Rpc, shadowRoot: ShadowRoot, markTimingInternal: (timingKey: string, pipelineId?: string, timeStamp?: number) => void, flushMarkTimingInternal: () => void, callbacks: {
|
|
4
4
|
onError?: (err: Error, release: string) => void;
|
|
5
5
|
}): {
|
|
6
6
|
start: (configs: StartMainThreadContextConfig) => Promise<void>;
|
|
@@ -2,7 +2,7 @@ import { i18nResourceMissedEventName, I18nResources, } from '@lynx-js/web-consta
|
|
|
2
2
|
import { Rpc } from '@lynx-js/web-worker-rpc';
|
|
3
3
|
import { dispatchLynxViewEvent } from '../utils/dispatchLynxViewEvent.js';
|
|
4
4
|
const { prepareMainThreadAPIs, } = await import('@lynx-js/web-mainthread-apis');
|
|
5
|
-
export function createRenderAllOnUI(mainToBackgroundRpc, shadowRoot, markTimingInternal, callbacks) {
|
|
5
|
+
export function createRenderAllOnUI(mainToBackgroundRpc, shadowRoot, markTimingInternal, flushMarkTimingInternal, callbacks) {
|
|
6
6
|
if (!globalThis.module) {
|
|
7
7
|
Object.assign(globalThis, { module: {} });
|
|
8
8
|
}
|
|
@@ -10,7 +10,7 @@ export function createRenderAllOnUI(mainToBackgroundRpc, shadowRoot, markTimingI
|
|
|
10
10
|
dispatchLynxViewEvent(shadowRoot, i18nResourceMissedEventName, options);
|
|
11
11
|
};
|
|
12
12
|
const i18nResources = new I18nResources();
|
|
13
|
-
const { startMainThread } = prepareMainThreadAPIs(mainToBackgroundRpc, shadowRoot, document.createElement.bind(document), () => { }, markTimingInternal, (err, _, release) => {
|
|
13
|
+
const { startMainThread } = prepareMainThreadAPIs(mainToBackgroundRpc, shadowRoot, document.createElement.bind(document), () => { }, markTimingInternal, flushMarkTimingInternal, (err, _, release) => {
|
|
14
14
|
callbacks.onError?.(err, release);
|
|
15
15
|
}, triggerI18nResourceFallback, (initI18nResources) => {
|
|
16
16
|
i18nResources.setData(initI18nResources);
|
|
@@ -3,7 +3,7 @@ import type { Rpc } from '@lynx-js/web-worker-rpc';
|
|
|
3
3
|
import type { StartUIThreadCallbacks } from './startUIThread.js';
|
|
4
4
|
export declare function startBackground(backgroundRpc: Rpc, shadowRoot: ShadowRoot, callbacks: StartUIThreadCallbacks): {
|
|
5
5
|
sendGlobalEvent: (args_0: string, args_1: Cloneable[] | undefined) => void;
|
|
6
|
-
markTiming: (
|
|
6
|
+
markTiming: (args_0: import("@lynx-js/web-constants").MarkTiming[]) => void;
|
|
7
7
|
updateDataBackground: (args_0: Cloneable, args_1: Record<string, string>) => Promise<void>;
|
|
8
8
|
updateI18nResourceBackground: (data: InitI18nResources, options: I18nResourceTranslationOptions) => void;
|
|
9
9
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// LICENSE file in the root directory of this source tree.
|
|
4
4
|
import { bootWorkers } from './bootWorkers.js';
|
|
5
5
|
import { createDispose } from './crossThreadHandlers/createDispose.js';
|
|
6
|
-
import { updateGlobalPropsEndpoint, } from '@lynx-js/web-constants';
|
|
6
|
+
import { updateGlobalPropsEndpoint, dispatchMarkTiming, flushMarkTiming, } from '@lynx-js/web-constants';
|
|
7
7
|
import { loadTemplate } from '../utils/loadTemplate.js';
|
|
8
8
|
import { createUpdateData } from './crossThreadHandlers/createUpdateData.js';
|
|
9
9
|
import { startBackground } from './startBackground.js';
|
|
@@ -14,20 +14,30 @@ export function startUIThread(templateUrl, configs, shadowRoot, lynxGroupId, thr
|
|
|
14
14
|
const allOnUI = threadStrategy === 'all-on-ui';
|
|
15
15
|
const { mainThreadRpc, backgroundRpc, terminateWorkers, } = bootWorkers(lynxGroupId, allOnUI);
|
|
16
16
|
const { markTiming, sendGlobalEvent, updateDataBackground, updateI18nResourceBackground, } = startBackground(backgroundRpc, shadowRoot, callbacks);
|
|
17
|
+
const cacheMarkTimings = {
|
|
18
|
+
records: [],
|
|
19
|
+
timeout: null,
|
|
20
|
+
};
|
|
17
21
|
const markTimingInternal = (timingKey, pipelineId, timeStamp) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
dispatchMarkTiming({
|
|
23
|
+
timingKey,
|
|
24
|
+
pipelineId,
|
|
25
|
+
timeStamp,
|
|
26
|
+
markTiming,
|
|
27
|
+
cacheMarkTimings,
|
|
28
|
+
});
|
|
21
29
|
};
|
|
30
|
+
const flushMarkTimingInternal = () => flushMarkTiming(markTiming, cacheMarkTimings);
|
|
22
31
|
const { start, updateDataMainThread, updateI18nResourcesMainThread } = allOnUI
|
|
23
32
|
? createRenderAllOnUI(
|
|
24
|
-
/* main-to-bg rpc*/ mainThreadRpc, shadowRoot, markTimingInternal, callbacks)
|
|
33
|
+
/* main-to-bg rpc*/ mainThreadRpc, shadowRoot, markTimingInternal, flushMarkTimingInternal, callbacks)
|
|
25
34
|
: createRenderMultiThread(
|
|
26
35
|
/* main-to-ui rpc*/ mainThreadRpc, shadowRoot, callbacks);
|
|
27
36
|
markTimingInternal('create_lynx_start', undefined, createLynxStartTiming);
|
|
28
37
|
markTimingInternal('load_template_start');
|
|
29
38
|
loadTemplate(templateUrl, callbacks.customTemplateLoader).then((template) => {
|
|
30
39
|
markTimingInternal('load_template_end');
|
|
40
|
+
flushMarkTimingInternal();
|
|
31
41
|
start({
|
|
32
42
|
...configs,
|
|
33
43
|
template,
|
|
@@ -1,106 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const
|
|
1
|
+
import { generateTemplate } from '@lynx-js/web-constants';
|
|
2
|
+
const templateCache = {};
|
|
3
3
|
function createJsModuleUrl(content) {
|
|
4
4
|
return URL.createObjectURL(new Blob([content], { type: 'text/javascript' }));
|
|
5
5
|
}
|
|
6
|
-
function generateJavascriptUrl(obj, injectVars, injectWithBind, muteableVars) {
|
|
7
|
-
injectVars = injectVars.concat(muteableVars);
|
|
8
|
-
return Object.fromEntries(Object.entries(obj).map(([name, content]) => {
|
|
9
|
-
return [
|
|
10
|
-
name,
|
|
11
|
-
createJsModuleUrl([
|
|
12
|
-
'//# allFunctionsCalledOnLoad\n',
|
|
13
|
-
'globalThis.module.exports = function(lynx_runtime) {',
|
|
14
|
-
'const module= {exports:{}};let exports = module.exports;',
|
|
15
|
-
'var {',
|
|
16
|
-
injectVars.join(','),
|
|
17
|
-
'} = lynx_runtime;',
|
|
18
|
-
...injectWithBind.map((nm) => `const ${nm} = lynx_runtime.${nm}?.bind(lynx_runtime);`),
|
|
19
|
-
';var globDynamicComponentEntry = \'__Card__\';',
|
|
20
|
-
'var {__globalProps} = lynx;',
|
|
21
|
-
'lynx_runtime._updateVars=()=>{',
|
|
22
|
-
...muteableVars.map((nm) => `${nm} = lynx_runtime.__lynxGlobalBindingValues.${nm};`),
|
|
23
|
-
'};\n',
|
|
24
|
-
content,
|
|
25
|
-
'\n return module.exports;}',
|
|
26
|
-
].join('')),
|
|
27
|
-
];
|
|
28
|
-
}));
|
|
29
|
-
}
|
|
30
|
-
const mainThreadInjectVars = [
|
|
31
|
-
'lynx',
|
|
32
|
-
'globalThis',
|
|
33
|
-
'_ReportError',
|
|
34
|
-
'_SetSourceMapRelease',
|
|
35
|
-
'__AddConfig',
|
|
36
|
-
'__AddDataset',
|
|
37
|
-
'__GetAttributes',
|
|
38
|
-
'__GetComponentID',
|
|
39
|
-
'__GetDataByKey',
|
|
40
|
-
'__GetDataset',
|
|
41
|
-
'__GetElementConfig',
|
|
42
|
-
'__GetElementUniqueID',
|
|
43
|
-
'__GetID',
|
|
44
|
-
'__GetTag',
|
|
45
|
-
'__SetAttribute',
|
|
46
|
-
'__SetConfig',
|
|
47
|
-
'__SetDataset',
|
|
48
|
-
'__SetID',
|
|
49
|
-
'__UpdateComponentID',
|
|
50
|
-
'__GetConfig',
|
|
51
|
-
'__UpdateListCallbacks',
|
|
52
|
-
'__AppendElement',
|
|
53
|
-
'__ElementIsEqual',
|
|
54
|
-
'__FirstElement',
|
|
55
|
-
'__GetChildren',
|
|
56
|
-
'__GetParent',
|
|
57
|
-
'__InsertElementBefore',
|
|
58
|
-
'__LastElement',
|
|
59
|
-
'__NextElement',
|
|
60
|
-
'__RemoveElement',
|
|
61
|
-
'__ReplaceElement',
|
|
62
|
-
'__ReplaceElements',
|
|
63
|
-
'__SwapElement',
|
|
64
|
-
'__CreateComponent',
|
|
65
|
-
'__CreateElement',
|
|
66
|
-
'__CreatePage',
|
|
67
|
-
'__CreateView',
|
|
68
|
-
'__CreateText',
|
|
69
|
-
'__CreateRawText',
|
|
70
|
-
'__CreateImage',
|
|
71
|
-
'__CreateScrollView',
|
|
72
|
-
'__CreateWrapperElement',
|
|
73
|
-
'__CreateList',
|
|
74
|
-
'__AddEvent',
|
|
75
|
-
'__GetEvent',
|
|
76
|
-
'__GetEvents',
|
|
77
|
-
'__SetEvents',
|
|
78
|
-
'__AddClass',
|
|
79
|
-
'__SetClasses',
|
|
80
|
-
'__GetClasses',
|
|
81
|
-
'__AddInlineStyle',
|
|
82
|
-
'__SetInlineStyles',
|
|
83
|
-
'__SetCSSId',
|
|
84
|
-
'__OnLifecycleEvent',
|
|
85
|
-
'__FlushElementTree',
|
|
86
|
-
'__LoadLepusChunk',
|
|
87
|
-
'SystemInfo',
|
|
88
|
-
'_I18nResourceTranslation',
|
|
89
|
-
'_AddEventListener',
|
|
90
|
-
];
|
|
91
|
-
const backgroundInjectVars = [
|
|
92
|
-
'NativeModules',
|
|
93
|
-
'globalThis',
|
|
94
|
-
'lynx',
|
|
95
|
-
'lynxCoreInject',
|
|
96
|
-
'SystemInfo',
|
|
97
|
-
];
|
|
98
|
-
const backgroundInjectWithBind = [
|
|
99
|
-
'Card',
|
|
100
|
-
'Component',
|
|
101
|
-
];
|
|
102
6
|
export async function loadTemplate(url, customTemplateLoader) {
|
|
103
|
-
const cachedTemplate =
|
|
7
|
+
const cachedTemplate = templateCache[url];
|
|
104
8
|
if (cachedTemplate)
|
|
105
9
|
return cachedTemplate;
|
|
106
10
|
const template = customTemplateLoader
|
|
@@ -108,12 +12,8 @@ export async function loadTemplate(url, customTemplateLoader) {
|
|
|
108
12
|
: (await (await fetch(url, {
|
|
109
13
|
method: 'GET',
|
|
110
14
|
})).json());
|
|
111
|
-
const decodedTemplate =
|
|
112
|
-
|
|
113
|
-
lepusCode: generateJavascriptUrl(template.lepusCode, mainThreadInjectVars, [], globalMuteableVars),
|
|
114
|
-
manifest: generateJavascriptUrl(template.manifest, backgroundInjectVars, backgroundInjectWithBind, []),
|
|
115
|
-
};
|
|
116
|
-
TemplateCache[url] = decodedTemplate;
|
|
15
|
+
const decodedTemplate = await generateTemplate(template, createJsModuleUrl);
|
|
16
|
+
templateCache[url] = decodedTemplate;
|
|
117
17
|
/**
|
|
118
18
|
* This will cause a memory leak, which is expected.
|
|
119
19
|
* We cannot ensure that the `URL.createObjectURL` created url will never be used, therefore here we keep it for the entire lifetime of this page.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynx-js/web-core",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "",
|
|
6
6
|
"keywords": [],
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@lynx-js/offscreen-document": "0.1.2",
|
|
28
|
-
"@lynx-js/web-constants": "0.14.
|
|
29
|
-
"@lynx-js/web-mainthread-apis": "0.14.
|
|
30
|
-
"@lynx-js/web-worker-rpc": "0.14.
|
|
31
|
-
"@lynx-js/web-worker-runtime": "0.14.
|
|
28
|
+
"@lynx-js/web-constants": "0.14.2",
|
|
29
|
+
"@lynx-js/web-mainthread-apis": "0.14.2",
|
|
30
|
+
"@lynx-js/web-worker-rpc": "0.14.2",
|
|
31
|
+
"@lynx-js/web-worker-runtime": "0.14.2"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@lynx-js/lynx-core": "0.1.2",
|