Ver código fonte

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.
master
Akihiko Odaki 6 anos atrás
committed by Eugen Rochko
pai
commit
7cb49eaa3a
1 arquivos alterados com 5 adições e 6 exclusões
  1. +5
    -6
      app/javascript/mastodon/features/ui/components/bundle.js

+ 5
- 6
app/javascript/mastodon/features/ui/components/bundle.js Ver arquivo

@@ -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();
})


Carregando…
Cancelar
Salvar