2017-10-17 2 views
0

Stellen Sie sich vor, wir haben zwei einfache Klassen (weggelassen Export):Node.js -leistung

class SomeService { 
    async func() { 
    // some async function logic 
    return value; 
    } 
} 

class SomeController { 
    constructor (service) { 
    this.service = service; 
    } 
    async func() { 
    const value = await this.service.func(); 
    // some controller-specific logic here 
    return value; 
    } 
} 

Auch wir haben einfache Funktion, die diese zwei Klassen auf zwei Arten verwenden.

Fall eins:

// require clasess 

const somefunc = async() => { 
    const controller = new SomeController(new SomeService()); 
    const value = await controller.func(); 
    return value; 
} 
module.exports = somefunc; 

Fall zwei:

// require clasess 
const controller = new SomeController(new SomeService()); 

const somefunc = async() => { 
    const value = await controller.func(); 
    return value; 
} 
module.exports = somefunc; 

Soweit ich verstehe, wie require Arbeiten des Knotens im ersten Fall controller werden jedes Mal erstellt werden, wenn die somefunc genannt wird. Im zweiten Fall wird controller nur einmal erstellt, wenn die Datei ausgewertet wird. Welcher Fall ist besser und wichtiger, was sollte ich lesen oder nachschlagen, um zu verstehen, warum?

+0

es geht nicht um "was ist besser", sondern "welcher Umfang besser modelliert das Problem, das Sie versuchen zu lösen". – aaaaaa

Antwort

0

Ich kann mir vorstellen, dass die Antwort von Ihrem Anwendungsfall abhängt. Sie müssen sich fragen, ob Sie jedes Mal, wenn die Funktion aufgerufen wird, SomeController neu erstellen müssen. Eine weitere Sache, die ebenfalls in Betracht gezogen wird, ist, ob SomeController bei der Initialisierung auf etwas Async angewiesen ist. Wenn der Controller beispielsweise Zugriff auf eine Datenbankverbindung in seinem Konstruktor benötigt, müssen Sie warten, bis die Datenbankverbindung hergestellt ist. In solchen Situationen haben Sie möglicherweise keine andere Wahl, als SomeController innerhalb der Funktion zu initialisieren. Wie gesagt, in solchen Fällen gibt es kein Ziel better. Es hängt alles von Ihrem Anwendungsfall ab.