Маршрутизаторы Express.js и создание новых объектов - PullRequest
0 голосов
/ 10 ноября 2019

В большинстве примеров авторы использовали классы со статическими методами и передавали эти классы со статическими методами в маршрутизатор.

router.post('/user/name', (req, res, next) => {

    UserController.getName(req, res, next);
});

router.post('/user/surname', (req, res, next) => {

    UserController.getSurname(req, res, next);
});

Я не фанат классов со статическими методами. И предпочитаю создавать экземпляр.

router.post('/user/name', (req, res, next) => {

     new UserController(req, res, next).getName();
});

router.post('/user/surname', (req, res, next) => {

     new UserController(req, res, next).getSurname();
});

Предположим, у нас 1000 вызовов на /user/surname. Итак, насколько я понимаю, будет создано 1000 объектов UserController (а затем они будут уничтожены GC как непригодные для использования). Это правильно? Если да, может быть, будет лучше использовать статические методы, потому что они были созданы только один раз при загрузке класса?

1 Ответ

1 голос
/ 10 ноября 2019

Итак, насколько я понимаю, будет создано 1000 объектов UserController (а затем они будут уничтожены GC как непригодные для использования). Это правильно?

Да, это правильно.

Если да, может быть, будет лучше использовать статические методы, потому что они были созданы только один раз при загрузке класса?

Да. Статические методы - это в основном просто функции, которые передаются вам как свойство объекта. Нет причин избегать их. Вы должны просто думать о них как о вызовах функций, когда имя функции находится в пространстве имен объекта. Конечно, вы не чувствуете, что ваш Javascript должен избегать всех вызовов функций. И все, что здесь нужно, это вызов функции. В общем, вам следует избегать создания объекта, который будет использоваться только для одного вызова метода, а затем для сборки мусора, потому что это ненужные накладные расходы.


К вашему сведению, если вы действительно не хотите использовать статическийметоды в классе, вы можете просто объявить простой объект и поместить ваши методы в качестве свойств этого объекта:

let obj = {
     method1: function() {},
     method2: function() {}
};

obj.method1();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...