Производительность javascript статического класса наследует не статический класс - PullRequest
0 голосов
/ 15 февраля 2019

Я создал класс javascript, который делает что-то для dom.Чтобы максимально упростить использование извне, теперь у меня есть методы, подобные этим:

hello.add(id);
hello.delete(id);
hello.select(id);

Чтобы сделать вышеописанное, я настроил статический класс, который использует нестатический класс, например:

Статический класс

class hello {
  static add(id) {
    let hello = new HelloCore();
    hello.add(id);
  }

  static delete(id) {
    let hello = new HelloCore();
    hello.delete(id);
  }

  static select(id) {
    let hello = new HelloCore();
    hello.select(id);
  }
}

Нестатический класс

Реальный код состоит из 500 строк с конструктором и т. Д.

class helloCore() {
  add() {
    // Do something
  }

  delete() {
    // Do something
  }

  select() {
    // Do something
  }
}

Теперь это очень просто, но мне интересно, есть ли проблемы с производительностью при таком подходе.Я предполагаю, что он сохраняет новый объект javascript при каждом статическом вызове в память?

  1. Нужно ли беспокоиться об этом?
  2. Если да, то какой подход будет лучше,но все еще очень просто?

Что я хочу избежать

С самого начала мне всегда приходилось передавать объект в функции, где он будет использоваться.См. Ниже.

let hello = new HelloCore();

function my_function(hello) {
  let id = 2;
  hello.add(id);
}

my_function(hello);

При статическом подходе мне не нужно везде передавать объект.Я могу просто вызвать функцию из любого места.

Я мог бы использовать глобальный var hello = new Hello();, но затем мне нужно убедиться, что он загружен первым, чтобы я не забыл об этом и это означало дополнительный код для пользователя..

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

@ mareful прокомментировал эту полезную информацию:

При использовании статического класса экземпляр hello больше не доступен после вызова функции ...

Это означает, чтостатический класс самоочищается после каждого вызова.

Затем я получил комментарий от @Bergi с идеей использовать const, включая функции с тем же результатом.Этот подход работает очень хорошо.

До - со статическим классом

class hello {
  static add(id) {
    let hello = new HelloCore();
    hello.add(id);
  }

  static delete(id) {
    let hello = new HelloCore();
    hello.delete(id);
  }

  static select(id) {
    let hello = new HelloCore();
    hello.select(id);
  }
}

После - с константой

const hello = {
  add(id) {
    new HelloCore().add(id);
  },
  delete(id) {
    new HelloCore().delete(id);
  },
  select(id) {
    new HelloCore().select(id);
  }
};

В обоих случаях я могу назвать это как hello.add(id);.Версия const короче и в этом случае имеет и некоторые другие преимущества.

она не создает функцию-конструктор и объект-прототип, которые никогда не нужны (и могут даже использоваться неправильно, илипо крайней мере, смутит читателя).

0 голосов
/ 15 февраля 2019

Возможно, вы захотите взглянуть на Singleton .
Это именно то, что вы пытаетесь достичь.

Однако я должен признать, что я (и многиедругие разработчики) не одобряют синглтоны, глобальные и статические классы не из-за производительности, а из-за общего шаблона.
Этот ТАК вопрос немного рассказывает о том, почему синглтоны плохие.

...