🐛 use const instead of function parameters to cache global variables while speedy mode running (#2447)
This commit is contained in:
parent
bb40e63089
commit
601696ad7f
|
|
@ -102,7 +102,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.5",
|
||||
"import-html-entry": "^1.14.3",
|
||||
"import-html-entry": "^1.14.5",
|
||||
"lodash": "^4.17.11",
|
||||
"single-spa": "^5.9.2"
|
||||
},
|
||||
|
|
|
|||
28
src/apis.ts
28
src/apis.ts
|
|
@ -12,7 +12,7 @@ import type {
|
|||
import type { ParcelConfigObjectGetter } from './loader';
|
||||
import { loadApp } from './loader';
|
||||
import { doPrefetchStrategy } from './prefetch';
|
||||
import { Deferred, getContainerXPath, toArray } from './utils';
|
||||
import { Deferred, getContainerXPath, isConstDestructAssignmentSupported, toArray } from './utils';
|
||||
|
||||
let microApps: Array<RegistrableApp<Record<string, unknown>>> = [];
|
||||
|
||||
|
|
@ -24,10 +24,10 @@ const defaultUrlRerouteOnly = true;
|
|||
const frameworkStartedDefer = new Deferred<void>();
|
||||
|
||||
const autoDowngradeForLowVersionBrowser = (configuration: FrameworkConfiguration): FrameworkConfiguration => {
|
||||
const { sandbox, singular } = configuration;
|
||||
const { sandbox = true, singular } = configuration;
|
||||
if (sandbox) {
|
||||
if (!window.Proxy) {
|
||||
console.warn('[qiankun] Miss window.Proxy, proxySandbox will degenerate into snapshotSandbox');
|
||||
console.warn('[qiankun] Missing window.Proxy, proxySandbox will degenerate into snapshotSandbox');
|
||||
|
||||
if (singular === false) {
|
||||
console.warn(
|
||||
|
|
@ -37,6 +37,20 @@ const autoDowngradeForLowVersionBrowser = (configuration: FrameworkConfiguration
|
|||
|
||||
return { ...configuration, sandbox: typeof sandbox === 'object' ? { ...sandbox, loose: true } : { loose: true } };
|
||||
}
|
||||
|
||||
if (
|
||||
!isConstDestructAssignmentSupported() &&
|
||||
(sandbox === true || (typeof sandbox === 'object' && sandbox.speedy !== false))
|
||||
) {
|
||||
console.warn(
|
||||
'[qiankun] Speedy mode will turn off as const destruct assignment not supported in current browser!',
|
||||
);
|
||||
|
||||
return {
|
||||
...configuration,
|
||||
sandbox: typeof sandbox === 'object' ? { ...sandbox, speedy: false } : { speedy: false },
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return configuration;
|
||||
|
|
@ -195,13 +209,7 @@ export function loadMicroApp<T extends ObjectType>(
|
|||
|
||||
export function start(opts: FrameworkConfiguration = {}) {
|
||||
frameworkConfiguration = { prefetch: true, singular: true, sandbox: true, ...opts };
|
||||
const {
|
||||
prefetch,
|
||||
sandbox,
|
||||
singular,
|
||||
urlRerouteOnly = defaultUrlRerouteOnly,
|
||||
...importEntryOpts
|
||||
} = frameworkConfiguration;
|
||||
const { prefetch, urlRerouteOnly = defaultUrlRerouteOnly, ...importEntryOpts } = frameworkConfiguration;
|
||||
|
||||
if (prefetch) {
|
||||
doPrefetchStrategy(microApps, prefetch, importEntryOpts);
|
||||
|
|
|
|||
11
src/utils.ts
11
src/utils.ts
|
|
@ -3,7 +3,7 @@
|
|||
* @since 2019-05-15
|
||||
*/
|
||||
|
||||
import { isFunction, once, snakeCase } from 'lodash';
|
||||
import { isFunction, once, snakeCase, memoize } from 'lodash';
|
||||
import type { FrameworkConfiguration } from './interfaces';
|
||||
import { version } from './version';
|
||||
|
||||
|
|
@ -131,6 +131,15 @@ export function isBoundedFunction(fn: CallableFunction) {
|
|||
return bounded;
|
||||
}
|
||||
|
||||
export const isConstDestructAssignmentSupported = memoize(() => {
|
||||
try {
|
||||
new Function('const { a } = { a: 1 }')();
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
export const qiankunHeadTagName = 'qiankun-head';
|
||||
|
||||
export function getDefaultTplWrapper(name: string, sandboxOpts: FrameworkConfiguration['sandbox']) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user