Skip to content
Snippets Groups Projects
Commit 7cb49eaa authored by Akihiko Odaki's avatar Akihiko Odaki Committed by Eugen Rochko
Browse files

Do not use function name to track components (#6542)

UglifyJS2 is allowed to mangle function names, and function names can also
be duplicate if they are from different scopes. Therefore function names
are not reliable as identifiers.

Functions as keys for Map object is a cheaper and more reliable
alternative.
parent 4d8c0d99
No related branches found
No related tags found
No related merge requests found
......@@ -26,7 +26,7 @@ class Bundle extends React.Component {
onFetchFail: noop,
}
static cache = {}
static cache = new Map
state = {
mod: undefined,
......@@ -51,13 +51,12 @@ class Bundle extends React.Component {
load = (props) => {
const { fetchComponent, onFetch, onFetchSuccess, onFetchFail, renderDelay } = props || this.props;
const cachedMod = Bundle.cache.get(fetchComponent);
onFetch();
if (Bundle.cache[fetchComponent.name]) {
const mod = Bundle.cache[fetchComponent.name];
this.setState({ mod: mod.default });
if (cachedMod) {
this.setState({ mod: cachedMod.default });
onFetchSuccess();
return Promise.resolve();
}
......@@ -71,7 +70,7 @@ class Bundle extends React.Component {
return fetchComponent()
.then((mod) => {
Bundle.cache[fetchComponent.name] = mod;
Bundle.cache.set(fetchComponent, mod);
this.setState({ mod: mod.default });
onFetchSuccess();
})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment